From 0e2c71a975bd76b6757736071e0356e78252d858 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Tue, 30 Jan 2018 12:43:01 -0700 Subject: [PATCH 001/620] Setup for cmake dev. --- isis/3rdParty/Makefile | 121 - isis/3rdParty/lib/README | 2 - isis/3rdParty/plugins/README | 2 - isis/CMakeLists.txt | 273 + isis/Makefile | 12143 +++++++++++++++- isis/cmake/AddIsisModule.cmake | 296 + isis/cmake/BuildDocs.cmake | 507 + .../CMakeDirectoryInformation.cmake | 16 + isis/cmake/CMakeFiles/progress.marks | 1 + isis/cmake/CMakeLists.txt | 30 + isis/cmake/CTestTestfile.cmake | 6 + isis/cmake/CodeGeneration.cmake | 138 + isis/cmake/FindAllDependencies.cmake | 342 + isis/cmake/FindBoost.cmake | 138 + isis/cmake/FindBullet.cmake | 24 + isis/cmake/FindCSPICE.cmake | 23 + isis/cmake/FindCholmod.cmake | 34 + isis/cmake/FindEigen.cmake | 17 + isis/cmake/FindEmbree.cmake | 17 + isis/cmake/FindGMM.cmake | 14 + isis/cmake/FindGSL.cmake | 34 + isis/cmake/FindGeoTIFF.cmake | 34 + isis/cmake/FindGeos.cmake | 37 + isis/cmake/FindHDF5.cmake | 18 + isis/cmake/FindJama.cmake | 16 + isis/cmake/FindKakadu.cmake | 33 + isis/cmake/FindNN.cmake | 15 + isis/cmake/FindOpenCV.cmake | 29 + isis/cmake/FindPCL.cmake | 23 + isis/cmake/FindProtobuf.cmake | 10 + isis/cmake/FindQwt.cmake | 28 + isis/cmake/FindSuperLU.cmake | 23 + isis/cmake/FindTIFF.cmake | 11 + isis/cmake/FindTNT.cmake | 17 + isis/cmake/FindX11.cmake | 14 + isis/cmake/FindXercesC.cmake | 10 + isis/cmake/InstallThirdParty.cmake | 126 + isis/cmake/MacPlistMacros.cmake | 12 + isis/cmake/Makefile | 196 + isis/cmake/RunMakeFileTest.cmake | 81 + isis/cmake/RunUnitTest.cmake | 74 + isis/cmake/TestSetup.cmake | 83 + isis/cmake/Utilities.cmake | 315 + isis/cmake/cmake_install.cmake | 50 + isis/src/CMakeLists.txt | 44 + 45 files changed, 15007 insertions(+), 470 deletions(-) delete mode 100644 isis/3rdParty/Makefile delete mode 100644 isis/3rdParty/lib/README delete mode 100644 isis/3rdParty/plugins/README create mode 100644 isis/CMakeLists.txt create mode 100644 isis/cmake/AddIsisModule.cmake create mode 100644 isis/cmake/BuildDocs.cmake create mode 100644 isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 isis/cmake/CMakeFiles/progress.marks create mode 100644 isis/cmake/CMakeLists.txt create mode 100644 isis/cmake/CTestTestfile.cmake create mode 100644 isis/cmake/CodeGeneration.cmake create mode 100644 isis/cmake/FindAllDependencies.cmake create mode 100644 isis/cmake/FindBoost.cmake create mode 100644 isis/cmake/FindBullet.cmake create mode 100644 isis/cmake/FindCSPICE.cmake create mode 100644 isis/cmake/FindCholmod.cmake create mode 100644 isis/cmake/FindEigen.cmake create mode 100644 isis/cmake/FindEmbree.cmake create mode 100644 isis/cmake/FindGMM.cmake create mode 100644 isis/cmake/FindGSL.cmake create mode 100644 isis/cmake/FindGeoTIFF.cmake create mode 100644 isis/cmake/FindGeos.cmake create mode 100644 isis/cmake/FindHDF5.cmake create mode 100644 isis/cmake/FindJama.cmake create mode 100644 isis/cmake/FindKakadu.cmake create mode 100644 isis/cmake/FindNN.cmake create mode 100644 isis/cmake/FindOpenCV.cmake create mode 100644 isis/cmake/FindPCL.cmake create mode 100644 isis/cmake/FindProtobuf.cmake create mode 100644 isis/cmake/FindQwt.cmake create mode 100644 isis/cmake/FindSuperLU.cmake create mode 100644 isis/cmake/FindTIFF.cmake create mode 100644 isis/cmake/FindTNT.cmake create mode 100644 isis/cmake/FindX11.cmake create mode 100644 isis/cmake/FindXercesC.cmake create mode 100644 isis/cmake/InstallThirdParty.cmake create mode 100644 isis/cmake/MacPlistMacros.cmake create mode 100644 isis/cmake/Makefile create mode 100644 isis/cmake/RunMakeFileTest.cmake create mode 100644 isis/cmake/RunUnitTest.cmake create mode 100644 isis/cmake/TestSetup.cmake create mode 100644 isis/cmake/Utilities.cmake create mode 100644 isis/cmake/cmake_install.cmake create mode 100644 isis/src/CMakeLists.txt diff --git a/isis/3rdParty/Makefile b/isis/3rdParty/Makefile deleted file mode 100644 index 8fe74939ea..0000000000 --- a/isis/3rdParty/Makefile +++ /dev/null @@ -1,121 +0,0 @@ -include $(ISISROOT)/make/isismake.os - -.PHONY: libs license plugins - -all: install - -install: libs license plugins - -#libs: license -libs: - @for library in $(THIRDPARTYLIBS); do \ - $(INSTALL3P) $(INSTALL3POPTS) $$library $(ISISROOT)/3rdParty/lib/; \ - echo $(CURTIMESTAMP) " Installing [$$library]"; \ - if [ "$(HOST_ARCH)" == "Linux" ]; then \ - for file in $$library; do \ - localFile=$(ISISROOT)/3rdParty/lib/`basename $$file`; \ - if [ ! -L "$$localFile" ]; then \ - existingRpath=`$(PATCHELF) --print-rpath "$$localFile" 2>&- | \ - cut -d '/' -f2-4`; \ - dollar='$$'; \ - newRpath=`echo "$${dollar}ORIGIN"`; \ - if [ "$$existingRpath" == "usgs/pkgs/local" ]; then \ - echo $(CURTIMESTAMP) " Patching [" `basename $$file` "]"; \ - $(PATCHELF) --set-rpath "$$newRpath" $$localFile; \ - fi; \ - fi; \ - done; \ - fi; \ - done; \ - for library in $(PATCHLIBS); do \ - $(INSTALL3P) $(INSTALL3POPTS) $$library $(ISISROOT)/3rdParty/lib/; \ - echo $(CURTIMESTAMP) " Installing [$$library]"; \ - if [ "$(HOST_ARCH)" == "Linux" ]; then \ - for file in $$library; do \ - localFile=$(ISISROOT)/3rdParty/lib/`basename $$file`; \ - if [ ! -L "$$localFile" ]; then \ - dollar='$$'; \ - newRpath=`echo "$${dollar}ORIGIN"`; \ - echo $(CURTIMESTAMP) " Patching [" `basename $$file` "]"; \ - $(PATCHELF) --set-rpath "$$newRpath" $$localFile; \ - fi; \ - done; \ - fi; \ - done; \ - if [ "$(HOST_ARCH)" == "Darwin" ]; then \ - chmod u+w $(ISISROOT)/3rdParty/lib/libcrypto.*.dylib; \ - chmod u+w $(ISISROOT)/3rdParty/lib/libssl.*.dylib; \ - chmod u+w $(ISISROOT)/3rdParty/lib/Python.framework/Versions/3.5/Python;\ - $(ISISROOT)/scripts/SetRunTimePath --libs \ - --libmap=$(ISISROOT)/scripts/darwin_lib_paths.lis \ - --liblog=DarwinLibs.lis --update \ - --relocdir=$(ISISROOT)/3rdParty/lib:$(ISISROOT)/3rdParty \ - --errlog=DarwinErrors.lis \ - `find $(ISISROOT)/3rdParty/lib -name '*.dylib*' -type f` \ - > /dev/null; \ - $(ISISROOT)/scripts/SetRunTimePath --libs \ - --libmap=$(ISISROOT)/scripts/qt_paths.lis \ - --liblog=DarwinLibs.lis \ - --relocdir=$(ISISROOT)/3rdParty/lib:$ISISROOT/3rdParty \ - --update \ - `find $(ISISROOT)/3rdParty/lib -name '[Qq]*' -print \ - -mindepth 3 -maxdepth 4 -type f` > /dev/null; \ - $(ISISROOT)/scripts/SetRunTimePath --bins \ - --libmap=$(ISISROOT)/scripts/darwin_bin_paths.lis \ - --liblog=DarwinLibs.lis \ - --relocdir=$(ISISROOT)/3rdParty/lib:$ISISROOT/3rdParty \ - --update \ - `find $(ISISROOT)/3rdParty/lib/Python.framework/Versions/3.5 \ - -name 'Python' -print -type f` > /dev/null; \ - chmod u-w $(ISISROOT)/3rdParty/lib/libcrypto.*.dylib; \ - chmod u-w $(ISISROOT)/3rdParty/lib/libssl.*.dylib; \ - chmod u-w $(ISISROOT)/3rdParty/lib/Python.framework/Versions/3.5/Python;\ - if [ -f "DarwinErrors.lis" ]; then \ - cat DarwinErrors.lis; \ - fi; \ - $(RM) DarwinErrors.lis DarwinLibs.lis; \ - fi - -license: - $(RSYNC) -a $(THIRDPARTYLICPATH) \ - $(ISISROOT)/3rdParty/license/ - -plugins: - @for plugs in $(THIRDPARTYPLUGINS); do \ - echo $(CURTIMESTAMP) " Installing [$$plugs...]"; \ - $(INSTALL3P) $(INSTALL3POPTS) $$plugs $(ISISROOT)/3rdParty/plugins/; \ - done; \ - if [ "$(HOST_ARCH)" == "Darwin" ]; then \ - $(ISISROOT)/scripts/SetRunTimePath --bundles \ - --libmap=$(ISISROOT)/scripts/qt_plugins_paths.lis \ - --liblog=DarwinLibs.lis --update \ - --relocdir=$(ISISROOT)/3rdParty/lib:$(ISISROOT)/3rdParty \ - --errlog=DarwinErrors.lis \ - `find $(ISISROOT)/3rdParty/plugins -name '*.bundle' -type f` \ - `find $(ISISROOT)/3rdParty/plugins -name '*.dylib' -type f` \ - > /dev/null; \ - if [ -f "DarwinErrors.lis" ]; then \ - cat DarwinErrors.lis; \ - fi; \ - $(RM) DarwinErrors.lis DarwinLibs.lis; \ - fi - - -clean: - rm -f lib/lib*.so* lib/lib*.dylib* lib/lib*.a - cd lib && rm -rf *.framework - $(RM) -rf license - @for plugs in plugins/*; do \ - if [ -d $$plugs -a $$plugs != "plugins/CVS" ]; \ - then \ - $(RM) -rf $$plugs; \ - fi \ - done; - -#---------------------------------------------------------------------------- -# Use to see values of variables -# Example: make print-HOST_OS -# Will print the make variable HOST_OS -#---------------------------------------------------------------------------- -print-% : - @echo '$* = $($*)' diff --git a/isis/3rdParty/lib/README b/isis/3rdParty/lib/README deleted file mode 100644 index 370c2cc66e..0000000000 --- a/isis/3rdParty/lib/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains O/S and hardware specific shared libraries needed -to execute ISIS applications diff --git a/isis/3rdParty/plugins/README b/isis/3rdParty/plugins/README deleted file mode 100644 index 55cfae117e..0000000000 --- a/isis/3rdParty/plugins/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains Qt plugins that are exported for use in Isis -applications. diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt new file mode 100644 index 0000000000..ea14a0411b --- /dev/null +++ b/isis/CMakeLists.txt @@ -0,0 +1,273 @@ +#=============================================================================== +# The main build file for building ISIS using CMake. +#=============================================================================== +# CMake initialization + +# Specify the required version of CMake. If your machine does not +# have this, it should be easy to build from https://cmake.org/download/ +cmake_minimum_required(VERSION 3.4) + +# Point cmake to our other CMake files. +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + +list(APPEND CMAKE_INCLUDE_PATH + /usgs/pkgs/local/v007/include/ + /usgs/pkgs/local/v007/bin/ + /usgs/pkgs/local/v007/lib/ + /usgs/pkgs/local/v007/objects/ + /usgs/pkgs/local/v007/include/google-protobuf/protobuf2.6.1/ + /usgs/pkgs/local/v007/include/xercesc/xercesc-3.1.2/ + /usgs/pkgs/local/v007/include/tiff/tiff-4.0.5/ + /usr/lib64/ +) + +set(CMAKE_PREFIX_PATH + /usgs/pkgs/local/v007/include/ + /usgs/pkgs/local/v007/bin/ + /usgs/pkgs/local/v007/lib/ + /usgs/pkgs/local/v007/libexec/ + /opt/usgs/v007/ports/Library/Frameworks/ + /opt/usgs/v007/ports/libexec/ + /opt/usgs/v007/ports/bin/ + /opt/usgs/v007/ports/lib/ + /opt/usgs/v007/ports/include/ + /opt/usgs/v007/ports/libexec/qt5 + /opt/usgs/v007/ports/libexec/qt5/bin/ + /opt/usgs/v007/ports/libexec/qt5/lib/ + /opt/usgs/v007/3rdparty/bin + /opt/usgs/v007/3rdparty/include/ + /opt/usgs/v007/3rdparty/lib/ + /opt/usgs/v007/proprietary/ + /opt/usgs/v007/proprietary/include/ + /opt/usgs/v007/proprietary/lib/ + /usr/lib + /usr/lib64/ + /usr/local/lib +) + +include(AddIsisModule) +include(Utilities) +include(TestSetup) +include(InstallThirdParty) + +#=============================================================================== +#=============================================================================== +# Project information + +project (USGS_ISIS) + + +# Short and long name of this package +set(PACKAGE "ISIS") +set(PACKAGE_NAME "USGS ISIS") + +# Version number +set(VERSION "3.5.00.0") +set(PACKAGE_VERSION ${VERSION}) + +# Full name and version number +set(PACKAGE_STRING "${PACKAGE_NAME} ${VERSION}") + +# Other release information +set(VERSION_DATE "2017-04-24") +set(THIRD_PARTY_LIBS_VERSION "v007") +set(RELEASE_STAGE "alpha") # (alpha, beta, stable) + +# Define to the address where bug reports for this package should be sent. +set(PACKAGE_BUGREPORT "https://isis.astrogeology.usgs.gov/fixit") + +# Main website associated with the software package +set(PACKAGE_URL "https://isis.astrogeology.usgs.gov/") + +# Retrieve a string describing the OS this is built on. +get_os_version(osVersionString) +message("Detected Operating System: ${osVersionString}") + +#=============================================================================== +#=============================================================================== +# Configuration options + +# All libraries are build as shared. The main library is also built +# as a static library using some specialized code in Utilities.cmake. +set(BUILD_SHARED_LIBS ON) + + +# Specify flags used +set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) +#set(thirdPartyCppFlags -Wall -ansi -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) + +# Specify user options that can be passed in with the initial CMake command. +option(isis3Data "Directory containing Isis3Data" "NA") +option(isis3TestData "Directory containing Isis3TestData" "NA") +option(testOutputDir "Directory to store app test output folders" "NA") +option(buildCore "Build the core ISIS modules" ON ) +option(buildMissions "Build the mission specific modules" ON ) +option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) +option(buildTests "Set up unit, application, and module tests." ON ) + + +if(EXISTS ${isis3Data}) + set(ENV{ISIS3DATA} "${isis3Data}") + message("Using ISIS3DATA = $ENV{ISIS3DATA}") +else() + message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") +endif() +if(EXISTS ${isis3TestData}) + set(ENV{ISIS3TESTDATA} "${isis3TestData}") + message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") +else() + message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") +endif() +#if(EXISTS ${CMAKE_INSTALL_PREFIX}) +# set(ENV{CMAKE_INSTALL_PREFIX} "${CMAKE_INSTALL_PREFIX}") +# message("Using INSTALL PREFIX = $ENV{CMAKE_INSTALL_PREFIX}") +#else() +# message(WARNING "Isis3TestData directory ${CMAKE_INSTALL_PREFIX} not found, application and module tests will fail.") +#endif() + +if(${testOutputDir} STREQUAL "OFF") + message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") + execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) +else() + # User specified a test output folder, make sure it exists. + message("Writing test data folders to = ${testOutputDir}") + execute_process(COMMAND mkdir -p ${testOutputDir}) +endif() + +# Set the default library extension based on the platform +if(APPLE) + set(SO ".dylib") +else() + set(SO ".so") +endif() + + +#=============================================================================== +#=============================================================================== +# Start setting up the build +# Add extension to find fortran until .so symlink can be added to /usr/lib64 +list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5) + +# Set up all the third party library dependencies. +include(FindAllDependencies) + +# Allow everything to include the 3rd party libraries +include_directories(SYSTEM ${ALLINCDIRS}) +link_directories(${ALLLIBDIRS}) + +# add isis headers + + +file(GLOB ISIS_HEADERS ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h +${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp) +file(COPY ${ISIS_HEADERS} DESTINATION ${CMAKE_BINARY_DIR}/inc) + +include_directories(${CMAKE_BINARY_DIR}/inc) + +# install scripts +# file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/scripts) +# file(COPY ${CMAKE_SOURCE_DIR}/scripts DESTINATION ${CMAKE_INSTALL_PREFIX}) + +set(CORE_LIB_NAME isis3) + +# Specify relative library include paths which will be set up on +# the installed files. +if(APPLE) + set(CMAKE_INSTALL_RPATH "@loader_path/../lib;@loader_path/../3rdParty/lib") +else() + set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib;$ORIGIN/../3rdParty/lib") +endif() +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) + +# We will set up some links with these files at the end of the install process so +# make sure they are cleared at the start of the install process. +install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.${SO})") +EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_BINARY_DIR}/) +install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") +install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") + +# Append CPP flags set in the third party lib file to the string set in this file. +string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) +# Set up the ctest tool which is used to run all of the tests. +enable_testing() +include(CTest) + +# Delete any existing plugin files in the build folder so they +# don't get filled with duplicate entries. +file(GLOB existingPlugins "${CMAKE_BINARY_DIR}/plugins/*.plugin") +if(existingPlugins) + file(REMOVE ${existingPlugins}) +endif() + +# Add a config file to the install bin directory so that QT can find the plugin libraries. +file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../3rdParty/plugins/\n") +install(FILES "${CMAKE_BINARY_DIR}/qt.conf" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + +#Create the inc directory +execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/inc) + + +# Create an xml folder in the source directory that we will need later +set(sourceXmlFolder ${CMAKE_BINARY_DIR}/bin/xml) +execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/xml) + +# Set up install of the templates folder. +install(DIRECTORY ${CMAKE_SOURCE_DIR}/templates DESTINATION .) + +# Set up install of the make folder. +install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX}) + +# Have CMake process all of the source code and tests. +add_subdirectory(src objects) + +# Set up third party libraries for installation +install_third_party() + +# Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. +# - This is required so that the plugins can be found during unit tests. +# TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. +foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) + get_filename_component(pluginName ${plugin} NAME) + if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) + execute_process(COMMAND ln -s "${plugin}" ${pluginName} + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + endif() +endforeach() + +# Set up documentation build target. +# - This script is called by running "make docs". +# - This long call passes all desired variables to the script. +add_custom_target(docs COMMAND ${CMAKE_COMMAND} + -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} + -DDOXYGEN=${DOXYGEN} -DXALAN=${XALAN} + -DLATEX=${LATEX} + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + -P ${CMAKE_MODULE_PATH}/BuildDocs.cmake) + +# Add a custom build target to clean out everything that gets added to the source +# directory during the build process. +# - Only a few things are added in order to make the tests work properly so +# this is very straightforward. +add_custom_target(clean_source COMMAND rm -rf "${CMAKE_BINARY_DIR}/*" "${CMAKE_INSTALL_PREFIX}/*") + +# Set up a few top level files for installation. +EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_BINARY_DIR}) +EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/scripts ${CMAKE_BINARY_DIR}) +EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/license.txt ${CMAKE_BINARY_DIR}) +EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/version ${CMAKE_BINARY_DIR}) +EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/make ${CMAKE_BINARY_DIR}) + +# Copy the files on make install as well +install(FILES ${CMAKE_SOURCE_DIR}/IsisPreferences DESTINATION ${CMAKE_INSTALL_PREFIX}) +install(FILES ${CMAKE_SOURCE_DIR}/license.txt DESTINATION ${CMAKE_INSTALL_PREFIX}) +install(FILES ${CMAKE_SOURCE_DIR}/version DESTINATION ${CMAKE_INSTALL_PREFIX}) +install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts DESTINATION ${CMAKE_INSTALL_PREFIX}) + +# Trigger all post-install behavior. +# - The only way to run commands post-install in CMake is to add a subdirectory at +# the end of this file containing a CMakeLists.txt file which includes all of +# the desired post-install commands inside. +add_subdirectory(cmake) diff --git a/isis/Makefile b/isis/Makefile index 24fd4e1d5d..a27a43b811 100644 --- a/isis/Makefile +++ b/isis/Makefile @@ -1,349 +1,11802 @@ -include $(ISISROOT)/make/isismake.os - -#--------------------------------------------------------------------------- -# Set up ISIS versioning -#--------------------------------------------------------------------------- -#ISISVERSIONFULL := $(shell head -n 1 $(ISISROOT)/version | sed 's/\#.*//' | sed 's/ *$$//') -#ISISMAJOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f1) -#ISISMINOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f2) -#ISISMINORMINOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f3) -#ISISMINORMINORMINOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f4) -#ISISVERSION := $(ISISMAJOR).$(ISISMINOR).$(ISISMINORMINOR).$(ISISMINORMINORMINOR) -#ISISLIBVERSION := $(shell echo $(ISISMAJOR).$(ISISMINOR).$(ISISMINORMINOR) | sed 's/[a-z].*$$//') -#ISISLOCALVERSION := $(shell head -n 3 $(ISISROOT)/version | tail -n 1 | sed 's/\#.*//' | sed 's/ *$$//') -#ISISRELEASE := REL_0_0 +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.9 +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. .NOTPARALLEL: -#---------------------------------------------------------------------------- -# Let the user know how to use the system -#---------------------------------------------------------------------------- -help: - echo "Isis Make System Commands" - echo "------------------------ " - echo "make all : Build and install the entire system (incs,api,apps,docs)" - echo "make thirdParty : Copy required 3rdParty libraries into distribution" - echo "make incs : Install API include files" - echo "make api : Build and install the Isis API" - echo "make apps : Build and install Isis Applications" - echo "make docs : Build Isis Web Documentation" - echo "make quickclean : Clean binaries from source tree but not app test areas" - echo "make cleansrc : Clean binaries from source tree" - echo "make clean : Clean source tree and install area" - echo "make unitTest : Build and execute unit tests for Isis API" - echo "make appTest : Build and execute application tests" - echo "make catTest : Build and execute category tests" - echo "make coverage : Build a test coverage report from generated coverage info" - -#---------------------------------------------------------------------------- -# Target = all -# Dependencies = includes api applications documentation thirdParty -# -# The API include files must be installed before the API can be constructed. -# After the API is created then the applications can be individually built -# and installed. Finally create the web documentation for the entire system. -#---------------------------------------------------------------------------- -all: incs thirdParty api apps docs - -#---------------------------------------------------------------------------- -# Target = incs -# Dependencies = none -# -# The API include files will be installed in $(ISISROOT)/inc. The Isis -# make system will traverse the objs directories (src/base/objs/*) and -# copy the include file from the individual object directory into the -# system directory $(ISISROOT)/inc. -#---------------------------------------------------------------------------- -incs: - echo $(CURTIMESTAMP) "Installing include files" - mkdir -p inc - $(MAKE) --directory=src includes - echo $(CURTIMESTAMP) "Finished installing include files" - echo $(CURTIMESTAMP) " " - -#---------------------------------------------------------------------------- -# Target = api -# Dependencies = objects -# -# The Isis API is essentially libisis.a which will be created in the -# directory $(ISISROOT)/lib. Make api traverses the objs directories -# (src/base/objs/*) and archives the ".o" files into libisis.a. Therefore -# the ".o" files must exist. -# -# Target = objects -# Dependencies = none -# -# Before the API can be built each individual object must be built. -# This target will traverse the objs directories and create the C++ -# object classes leaving the ".o" file in each individual directory. -# The API is not created until "make api" is performed -# -# Finally after the API is completed the shared libraries will be -# constructed from libisis.a -#---------------------------------------------------------------------------- - -api: - echo $(CURTIMESTAMP) "Building Isis API" - mkdir -p lib - $(MAKE) --directory=src objects - echo $(CURTIMESTAMP) "Finished building Isis API" - echo $(CURTIMESTAMP) "" - echo $(CURTIMESTAMP) "Adding API objects" - if [ "$(HOST_ARCH)" == "Linux" ]; then \ - $(MAKE) --directory=src api; \ - elif [ "$(HOST_ARCH)" == "Darwin" ]; then \ - $(MAKE) osx_static; \ - fi; - echo $(CURTIMESTAMP) "Finished adding API objects" - echo $(CURTIMESTAMP) " " - echo $(CURTIMESTAMP) "Creating Shared Libraries ..." - cp make/Makefile.libs lib/Makefile - $(MAKE) --directory=lib shared - echo $(CURTIMESTAMP) "Finished creating Shared Libraries ..." - echo $(CURTIMESTAMP) " " - -# Make the static library on Macos, faster then recursivly call make -osx_static: - $(eval UNIT_TESTS=$(wildcard src/*/objs/*/unitTest.o)) - $(eval PLUGIN_DIRS=$(dir $(wildcard src/*/objs/*/*.plugin))) - $(eval PLUGIN_FILES=$(foreach dir,$(PLUGIN_DIRS),$(wildcard $(dir)*.o))) - $(eval API_OBJS=$(filter-out $(PLUGIN_FILES),$(filter-out $(UNIT_TESTS),$(wildcard src/*/objs/*/*.o)))) - $(AR) -crs $(ISISROOT)/lib/libisis$(ISISLIBVERSION).a $(API_OBJS); - for i in $(PLUGIN_DIRS); do \ - $(MAKE) --directory=$$i plugin install; \ - done - -# echo "Building Isis API with debugging" -# cd src; $(MAKE) objects MODE=DEBUG -# cd src; $(MAKE) api MODE=DEBUG -# echo "Finished building Isis API with debugging" -# echo " " - -#---------------------------------------------------------------------------- -# Target = apps -# Dependencies = none -# -# This will build and install all the Isis application in the directory -# $(ISISROOT)/bin. It also installs the application Xml file in -# $(ISISROOT/bin/xml. Again the make system traverse the apps directories -# (src/base/apps) and builds/installs each application. Of course the -# API must be built for this to work properly -#---------------------------------------------------------------------------- -apps: - echo $(CURTIMESTAMP) "Building Isis Applications" - mkdir -p bin/xml - $(MAKE) --directory=src applications - echo $(CURTIMESTAMP) "Finished building Isis Applications" - echo $(CURTIMESTAMP) " " - -#---------------------------------------------------------------------------- -# Target = docs -# Dependencies = none -# -# This target traverse both the objs and apps directories and moves the -# Xml and assets directories into specific sub-directories under -# $(ISISROOT)/src/docsys. Then it builds the entire docsys tree which -# generates the Isis Documentation under $(ISISROOT)/doc -#---------------------------------------------------------------------------- -docs: - echo $(CURTIMESTAMP) "Building Isis Documentation" - mkdir -p doc - $(MAKE) --directory=src documentation - $(MAKE) --directory=src/docsys docs - echo $(CURTIMESTAMP) "Finished building Isis Documentation" - - -#---------------------------------------------------------------------------- -# Target = coverage -# Dependencies = none -# -# This target builds a report on how much of Isis is tested in the automated -# tests. This is currently excluding applications that run other applications -# because of the amount of time it takes to generate the report (and that's -# not how we want to test our applications ideally). -#---------------------------------------------------------------------------- -coverage: - if [ "$(CODE_COVERAGE_BIN_DIR)" == "" ]; then \ - echo "Make sure you use MODE=TC when building Isis for a coverage" \ - "report."; \ - exit 1; \ - fi; \ - $(ECHO) $(CURTIMESTAMP) "Finding coverage information..."; \ - CSMESFILES=( lib/libisis$(ISISLIBVERSION).so.csmes \ - `find src/*/apps -name "*.o.csmes" | grep -v moc_` ); \ - CSEXEFILES=(`find src/ -name "*.csexe"` `find bin/ -name "*.csexe"`); \ - if [ "$${#CSMESFILES[@]}" == "0" ] || \ - [ "$${#CSEXEFILES[@]}" == "0" ]; then \ - echo "Please build Isis and run the tests with MODE=TC before " \ - "trying to build a coverage report."; \ - exit 1; \ - fi; \ - $(ECHO) $(CURTIMESTAMP) "Merging source file information into isis.csmes..."; \ - $(CODE_COVERAGE_BIN_DIR)/cmmerge $${CSMESFILES[@]} -o isis.csmes; \ - $(ECHO) $(CURTIMESTAMP) "Adding test execution records into isis.csmes..."; \ - for CSEXEFILE in $${CSEXEFILES[@]}; do \ - EXETESTNAME="$$CSEXEFILE"; \ - APPTESTAPPNAME=`echo $$CSEXEFILE | sed 's#\\(.*/apps/\\)\\([a-zA-Z0-9]*\\)\\(/tsts/\\)\([^/]*\)\(/.*\)#\\2#'`; \ - CSEXEAPPNAME=`basename $$CSEXEFILE | sed 's/.csexe//'`; \ - if [ "$$APPTESTAPPNAME" == "$$CSEXEFILE" ] || \ - [ "$$APPTESTAPPNAME" == "$$CSEXEAPPNAME" ] || \ - [ "`dirname $$CSEXEFILE`" == "bin" ]; then \ - EXETESTNAME=`echo $$EXETESTNAME | sed 's#\\(.*/apps/\\)\\([a-zA-Z0-9]*\\)\\(/tsts/\\)\([^/]*\)\(/.*\)#\\2 Application Test (case \\4\\)#'`; \ - EXETESTNAME=`echo $$EXETESTNAME | sed 's#\\(src/\\)\\([a-zA-Z0-9]*\\)\\(/tsts/\\)\\([a-zA-Z0-9]*\\)\\(.*\\)#\\2 Category Test (case \\4\\)#'`; \ - EXETESTNAME=`echo $$EXETESTNAME | sed 's#\\(.*/\\)\\([^/]*\\)\\(/unitTest.csexe\\)#\\2 Unit Test#'`; \ - $(ECHO) -e $(CURTIMESTAMP) " Adding [$$EXETESTNAME] `basename $$CSEXEFILE`"; \ - $(CODE_COVERAGE_BIN_DIR)/cmcsexeimport -t "$$EXETESTNAME" \ - -e $$CSEXEFILE -m "isis.csmes"; \ - fi; \ - done; \ - $(ECHO) -ne $(CURTIMESTAMP) "Scope Coverage: "; \ - $(CODE_COVERAGE_BIN_DIR)/cmreport \ - --title="Isis System-Wide Test Scope Coverage" \ - -m "`basename $$PWD`.csmes" --select=".*" --bargraph --toc --stat \ - --global=all --method=all --source=all --execution=all \ - --method-sort=coverage --execution-sort=coverage \ - --source-sort=coverage -h scopecoverage; \ - $(ECHO) -ne $(CURTIMESTAMP) "Line Coverage: "; \ - $(CODE_COVERAGE_BIN_DIR)/cmreport \ - --title="Isis System-Wide Test Line Coverage" \ - -m "`basename $$PWD`.csmes" --select=".*" --bargraph --toc --stat \ - --global=all --method=all --source=all --execution=all \ - --method-sort=coverage --execution-sort=coverage \ - --source-sort=coverage --line-coverage -h linecoverage; \ - $(ECHO) -ne $(CURTIMESTAMP) "Function Coverage: "; \ - $(CODE_COVERAGE_BIN_DIR)/cmreport \ - --title="Isis System-Wide Test Function Coverage" \ - -m "`basename $$PWD`.csmes" --select=".*" --bargraph --toc --stat \ - --global=all --method=all --source=all --execution=all \ - --method-sort=coverage --execution-sort=coverage \ - --source-sort=coverage --function-coverage -h functioncoverage; - - -#---------------------------------------------------------------------------- -# Target = quickclean -# -# This target cleans the entire Isis system enough for a recompile. It cleans ".o" files and -# binary executables from the source tree. It also, clears the running -# areas under $ISISROOT (inc, doc, bin, bin/xml, and lib) -# -# Target = quickclean -# Dependencies = none -# -# This walks the src tree and removes ".o" files and binary files -#---------------------------------------------------------------------------- -quickclean: - echo $(CURTIMESTAMP) "Cleaning Isis (quick)"; \ - $(MAKE) --directory=src quickclean; \ - rm -rf inc; \ - rm -rf doc; \ - rm -rf bin; \ - rm -rf lib; \ - rm -rf scripts/tabcomplete.csh; \ - rm -rf scopecoverage scopecoverage.html linecoverage linecoverage.html \ - functioncoverage functioncoverage.html *.csmes *.csexe; \ - $(MAKE) --directory=3rdParty clean; \ - echo $(CURTIMESTAMP) "Finished cleaning Isis"; - -#---------------------------------------------------------------------------- -# Target = clean -# Dependencies = cleansrc -# -# This target cleans the entire Isis system. It cleans ".o" files and -# binary executables from the source tree. It also clears the running -# areas under $ISISROOT (inc, doc, bini, bin/xml, and lib) -# -# Target = cleansrc -# Dependencies = none -# -# This walks the src tree and removes ".o" files and binary files -#---------------------------------------------------------------------------- + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /scratch/isiscmake/isis + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /scratch/isiscmake/isis + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles /scratch/isiscmake/isis/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles 0 +.PHONY : all + +# The main clean target clean: - echo $(CURTIMESTAMP) "Cleaning Isis"; \ - $(MAKE) cleansrc; \ - rm -rf inc; \ - rm -rf doc; \ - rm -rf bin; \ - rm -rf lib; \ - rm -rf scripts/tabcomplete.csh; \ - rm -rf scopecoverage scopecoverage.html linecoverage linecoverage.html \ - functioncoverage functioncoverage.html *.csmes *.csexe; \ - $(MAKE) --directory=3rdParty clean; \ - echo $(CURTIMESTAMP) "Finished cleaning Isis"; - -cleansrc: - $(MAKE) --directory=src clean - -tabcomplete: - if [ ! -d bin ]; then \ - echo $(CURTIMESTAMP) "You must build the applications first"; \ - elif [ ! -f bin/isiscomplete ]; then \ - echo $(CURTIMESTAMP) "Isis application 'isiscomplete' is missing"; \ - else \ - echo "#!/bin/csh" > $$ISISROOT/scripts/tabcomplete.csh; \ - isiscomplete `ls $$ISISROOT/bin | grep -v xml` | sed 's/; /;~/g' | \ - tr '~' '\n' > $$ISISROOT/scripts/tabcomplete.csh; \ - fi; - -#---------------------------------------------------------------------------- -# Target = unitTest appTest appTest2 catTest -# Dependencies = none -# -# This target traverses both the objs and apps directories. In the object -# directories it will build the unitTest executable, run it, and difference -# the results with the unitTest truth data. In the application directories -# it will run the appTest script to ensure the program generates the proper -# output data (whether it be a cube, text file, postscript file, etc) -#---------------------------------------------------------------------------- -unitTest: - echo $(CURTIMESTAMP) "Testing Isis API" - $(MAKE) --directory=src unitTest - echo $(CURTIMESTAMP) "Finished testing Isis API" - -appTest: - echo $(CURTIMESTAMP) "Testing Isis Applications version 2" - $(MAKE) --directory=src appTest - echo $(CURTIMESTAMP) "Finished testing Isis Applications version 2" - -catTest: - echo $(CURTIMESTAMP) "Testing Isis Category" - $(MAKE) --directory=src catTest - echo $(CURTIMESTAMP) "Finished testing Isis Category" - -#---------------------------------------------------------------------------- -# Target = thirdParty -# Dependencies = none -# -# This target is used only for external distributions that do not have -# the need to program. As a convenience we provide the shared libraries -# for 3rdParty packages used in ISIS so that external customers do -# not have to download and install RPMs. -#---------------------------------------------------------------------------- -HOST_ARCH ?= $(shell uname -s) -HOST_MACH ?= $(shell uname -m) - -thirdParty: - echo $(CURTIMESTAMP) "Installing 3rdParty libraries" - rm -f $(ISISROOT)/3rdParty/lib/lib* - $(MAKE) -C $(ISISROOT)/3rdParty install - echo $(CURTIMESTAMP) "Finished installing 3rdParty libraries" - echo $(CURTIMESTAMP) " " - - -#---------------------------------------------------------------------------- -# Use to see values of variables -# Example: make print-HOST_OS -# Will print the make variable HOST_OS -#---------------------------------------------------------------------------- -#print-% : -# @echo '$* = $($*)' - -#---------------------------------------------------------------------------- -# Standard make FORCE target. Do not remove unless you know what you are doing -#---------------------------------------------------------------------------- - -FORCE: - -#---------------------------------------------------------------------------- -# Include the make file debugging targets -#---------------------------------------------------------------------------- -include $(ISISROOT)/make/isismake.print + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named docs + +# Build rule for target. +docs: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 docs +.PHONY : docs + +# fast build rule for target. +docs/fast: + $(MAKE) -f CMakeFiles/docs.dir/build.make CMakeFiles/docs.dir/build +.PHONY : docs/fast + +#============================================================================= +# Target rules for targets named ContinuousSubmit + +# Build rule for target. +ContinuousSubmit: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousSubmit +.PHONY : ContinuousSubmit + +# fast build rule for target. +ContinuousSubmit/fast: + $(MAKE) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/build +.PHONY : ContinuousSubmit/fast + +#============================================================================= +# Target rules for targets named ContinuousCoverage + +# Build rule for target. +ContinuousCoverage: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousCoverage +.PHONY : ContinuousCoverage + +# fast build rule for target. +ContinuousCoverage/fast: + $(MAKE) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/build +.PHONY : ContinuousCoverage/fast + +#============================================================================= +# Target rules for targets named ContinuousTest + +# Build rule for target. +ContinuousTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousTest +.PHONY : ContinuousTest + +# fast build rule for target. +ContinuousTest/fast: + $(MAKE) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/build +.PHONY : ContinuousTest/fast + +#============================================================================= +# Target rules for targets named ContinuousBuild + +# Build rule for target. +ContinuousBuild: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousBuild +.PHONY : ContinuousBuild + +# fast build rule for target. +ContinuousBuild/fast: + $(MAKE) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/build +.PHONY : ContinuousBuild/fast + +#============================================================================= +# Target rules for targets named ContinuousMemCheck + +# Build rule for target. +ContinuousMemCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousMemCheck +.PHONY : ContinuousMemCheck + +# fast build rule for target. +ContinuousMemCheck/fast: + $(MAKE) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/build +.PHONY : ContinuousMemCheck/fast + +#============================================================================= +# Target rules for targets named Nightly + +# Build rule for target. +Nightly: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Nightly +.PHONY : Nightly + +# fast build rule for target. +Nightly/fast: + $(MAKE) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/build +.PHONY : Nightly/fast + +#============================================================================= +# Target rules for targets named NightlyTest + +# Build rule for target. +NightlyTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyTest +.PHONY : NightlyTest + +# fast build rule for target. +NightlyTest/fast: + $(MAKE) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/build +.PHONY : NightlyTest/fast + +#============================================================================= +# Target rules for targets named NightlyUpdate + +# Build rule for target. +NightlyUpdate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyUpdate +.PHONY : NightlyUpdate + +# fast build rule for target. +NightlyUpdate/fast: + $(MAKE) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/build +.PHONY : NightlyUpdate/fast + +#============================================================================= +# Target rules for targets named Continuous + +# Build rule for target. +Continuous: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Continuous +.PHONY : Continuous + +# fast build rule for target. +Continuous/fast: + $(MAKE) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/build +.PHONY : Continuous/fast + +#============================================================================= +# Target rules for targets named NightlyBuild + +# Build rule for target. +NightlyBuild: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyBuild +.PHONY : NightlyBuild + +# fast build rule for target. +NightlyBuild/fast: + $(MAKE) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/build +.PHONY : NightlyBuild/fast + +#============================================================================= +# Target rules for targets named NightlyStart + +# Build rule for target. +NightlyStart: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyStart +.PHONY : NightlyStart + +# fast build rule for target. +NightlyStart/fast: + $(MAKE) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/build +.PHONY : NightlyStart/fast + +#============================================================================= +# Target rules for targets named NightlyMemoryCheck + +# Build rule for target. +NightlyMemoryCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyMemoryCheck +.PHONY : NightlyMemoryCheck + +# fast build rule for target. +NightlyMemoryCheck/fast: + $(MAKE) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/build +.PHONY : NightlyMemoryCheck/fast + +#============================================================================= +# Target rules for targets named NightlyMemCheck + +# Build rule for target. +NightlyMemCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyMemCheck +.PHONY : NightlyMemCheck + +# fast build rule for target. +NightlyMemCheck/fast: + $(MAKE) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/build +.PHONY : NightlyMemCheck/fast + +#============================================================================= +# Target rules for targets named clean_source + +# Build rule for target. +clean_source: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clean_source +.PHONY : clean_source + +# fast build rule for target. +clean_source/fast: + $(MAKE) -f CMakeFiles/clean_source.dir/build.make CMakeFiles/clean_source.dir/build +.PHONY : clean_source/fast + +#============================================================================= +# Target rules for targets named ExperimentalStart + +# Build rule for target. +ExperimentalStart: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalStart +.PHONY : ExperimentalStart + +# fast build rule for target. +ExperimentalStart/fast: + $(MAKE) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/build +.PHONY : ExperimentalStart/fast + +#============================================================================= +# Target rules for targets named ContinuousConfigure + +# Build rule for target. +ContinuousConfigure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousConfigure +.PHONY : ContinuousConfigure + +# fast build rule for target. +ContinuousConfigure/fast: + $(MAKE) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/build +.PHONY : ContinuousConfigure/fast + +#============================================================================= +# Target rules for targets named NightlyCoverage + +# Build rule for target. +NightlyCoverage: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyCoverage +.PHONY : NightlyCoverage + +# fast build rule for target. +NightlyCoverage/fast: + $(MAKE) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/build +.PHONY : NightlyCoverage/fast + +#============================================================================= +# Target rules for targets named ExperimentalUpdate + +# Build rule for target. +ExperimentalUpdate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalUpdate +.PHONY : ExperimentalUpdate + +# fast build rule for target. +ExperimentalUpdate/fast: + $(MAKE) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/build +.PHONY : ExperimentalUpdate/fast + +#============================================================================= +# Target rules for targets named ExperimentalConfigure + +# Build rule for target. +ExperimentalConfigure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalConfigure +.PHONY : ExperimentalConfigure + +# fast build rule for target. +ExperimentalConfigure/fast: + $(MAKE) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/build +.PHONY : ExperimentalConfigure/fast + +#============================================================================= +# Target rules for targets named ExperimentalCoverage + +# Build rule for target. +ExperimentalCoverage: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalCoverage +.PHONY : ExperimentalCoverage + +# fast build rule for target. +ExperimentalCoverage/fast: + $(MAKE) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/build +.PHONY : ExperimentalCoverage/fast + +#============================================================================= +# Target rules for targets named ExperimentalBuild + +# Build rule for target. +ExperimentalBuild: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalBuild +.PHONY : ExperimentalBuild + +# fast build rule for target. +ExperimentalBuild/fast: + $(MAKE) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/build +.PHONY : ExperimentalBuild/fast + +#============================================================================= +# Target rules for targets named NightlyConfigure + +# Build rule for target. +NightlyConfigure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyConfigure +.PHONY : NightlyConfigure + +# fast build rule for target. +NightlyConfigure/fast: + $(MAKE) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/build +.PHONY : NightlyConfigure/fast + +#============================================================================= +# Target rules for targets named ExperimentalTest + +# Build rule for target. +ExperimentalTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalTest +.PHONY : ExperimentalTest + +# fast build rule for target. +ExperimentalTest/fast: + $(MAKE) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/build +.PHONY : ExperimentalTest/fast + +#============================================================================= +# Target rules for targets named ExperimentalMemCheck + +# Build rule for target. +ExperimentalMemCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalMemCheck +.PHONY : ExperimentalMemCheck + +# fast build rule for target. +ExperimentalMemCheck/fast: + $(MAKE) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/build +.PHONY : ExperimentalMemCheck/fast + +#============================================================================= +# Target rules for targets named Experimental + +# Build rule for target. +Experimental: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Experimental +.PHONY : Experimental + +# fast build rule for target. +Experimental/fast: + $(MAKE) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/build +.PHONY : Experimental/fast + +#============================================================================= +# Target rules for targets named NightlySubmit + +# Build rule for target. +NightlySubmit: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlySubmit +.PHONY : NightlySubmit + +# fast build rule for target. +NightlySubmit/fast: + $(MAKE) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/build +.PHONY : NightlySubmit/fast + +#============================================================================= +# Target rules for targets named ExperimentalSubmit + +# Build rule for target. +ExperimentalSubmit: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalSubmit +.PHONY : ExperimentalSubmit + +# fast build rule for target. +ExperimentalSubmit/fast: + $(MAKE) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/build +.PHONY : ExperimentalSubmit/fast + +#============================================================================= +# Target rules for targets named ContinuousStart + +# Build rule for target. +ContinuousStart: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousStart +.PHONY : ContinuousStart + +# fast build rule for target. +ContinuousStart/fast: + $(MAKE) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/build +.PHONY : ContinuousStart/fast + +#============================================================================= +# Target rules for targets named ContinuousUpdate + +# Build rule for target. +ContinuousUpdate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousUpdate +.PHONY : ContinuousUpdate + +# fast build rule for target. +ContinuousUpdate/fast: + $(MAKE) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/build +.PHONY : ContinuousUpdate/fast + +#============================================================================= +# Target rules for targets named VoyagerCamera + +# Build rule for target. +VoyagerCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 VoyagerCamera +.PHONY : VoyagerCamera + +# fast build rule for target. +VoyagerCamera/fast: + $(MAKE) -f objects/CMakeFiles/VoyagerCamera.dir/build.make objects/CMakeFiles/VoyagerCamera.dir/build +.PHONY : VoyagerCamera/fast + +#============================================================================= +# Target rules for targets named viknonoodle_app + +# Build rule for target. +viknonoodle_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 viknonoodle_app +.PHONY : viknonoodle_app + +# fast build rule for target. +viknonoodle_app/fast: + $(MAKE) -f objects/CMakeFiles/viknonoodle_app.dir/build.make objects/CMakeFiles/viknonoodle_app.dir/build +.PHONY : viknonoodle_app/fast + +#============================================================================= +# Target rules for targets named vikcal_app + +# Build rule for target. +vikcal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vikcal_app +.PHONY : vikcal_app + +# fast build rule for target. +vikcal_app/fast: + $(MAKE) -f objects/CMakeFiles/vikcal_app.dir/build.make objects/CMakeFiles/vikcal_app.dir/build +.PHONY : vikcal_app/fast + +#============================================================================= +# Target rules for targets named vik2isis_app + +# Build rule for target. +vik2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vik2isis_app +.PHONY : vik2isis_app + +# fast build rule for target. +vik2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/vik2isis_app.dir/build.make objects/CMakeFiles/vik2isis_app.dir/build +.PHONY : vik2isis_app/fast + +#============================================================================= +# Target rules for targets named rososiris2isis_app + +# Build rule for target. +rososiris2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 rososiris2isis_app +.PHONY : rososiris2isis_app + +# fast build rule for target. +rososiris2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/rososiris2isis_app.dir/build.make objects/CMakeFiles/rososiris2isis_app.dir/build +.PHONY : rososiris2isis_app/fast + +#============================================================================= +# Target rules for targets named RosettaVirtisCamera + +# Build rule for target. +RosettaVirtisCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 RosettaVirtisCamera +.PHONY : RosettaVirtisCamera + +# fast build rule for target. +RosettaVirtisCamera/fast: + $(MAKE) -f objects/CMakeFiles/RosettaVirtisCamera.dir/build.make objects/CMakeFiles/RosettaVirtisCamera.dir/build +.PHONY : RosettaVirtisCamera/fast + +#============================================================================= +# Target rules for targets named thmvisflat_app + +# Build rule for target. +thmvisflat_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thmvisflat_app +.PHONY : thmvisflat_app + +# fast build rule for target. +thmvisflat_app/fast: + $(MAKE) -f objects/CMakeFiles/thmvisflat_app.dir/build.make objects/CMakeFiles/thmvisflat_app.dir/build +.PHONY : thmvisflat_app/fast + +#============================================================================= +# Target rules for targets named ThemisVisCamera + +# Build rule for target. +ThemisVisCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ThemisVisCamera +.PHONY : ThemisVisCamera + +# fast build rule for target. +ThemisVisCamera/fast: + $(MAKE) -f objects/CMakeFiles/ThemisVisCamera.dir/build.make objects/CMakeFiles/ThemisVisCamera.dir/build +.PHONY : ThemisVisCamera/fast + +#============================================================================= +# Target rules for targets named mroctx2isis_app + +# Build rule for target. +mroctx2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mroctx2isis_app +.PHONY : mroctx2isis_app + +# fast build rule for target. +mroctx2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mroctx2isis_app.dir/build.make objects/CMakeFiles/mroctx2isis_app.dir/build +.PHONY : mroctx2isis_app/fast + +#============================================================================= +# Target rules for targets named marcical_app + +# Build rule for target. +marcical_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 marcical_app +.PHONY : marcical_app + +# fast build rule for target. +marcical_app/fast: + $(MAKE) -f objects/CMakeFiles/marcical_app.dir/build.make objects/CMakeFiles/marcical_app.dir/build +.PHONY : marcical_app/fast + +#============================================================================= +# Target rules for targets named marci2isis_app + +# Build rule for target. +marci2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 marci2isis_app +.PHONY : marci2isis_app + +# fast build rule for target. +marci2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/marci2isis_app.dir/build.make objects/CMakeFiles/marci2isis_app.dir/build +.PHONY : marci2isis_app/fast + +#============================================================================= +# Target rules for targets named histitch_app + +# Build rule for target. +histitch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 histitch_app +.PHONY : histitch_app + +# fast build rule for target. +histitch_app/fast: + $(MAKE) -f objects/CMakeFiles/histitch_app.dir/build.make objects/CMakeFiles/histitch_app.dir/build +.PHONY : histitch_app/fast + +#============================================================================= +# Target rules for targets named histat_app + +# Build rule for target. +histat_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 histat_app +.PHONY : histat_app + +# fast build rule for target. +histat_app/fast: + $(MAKE) -f objects/CMakeFiles/histat_app.dir/build.make objects/CMakeFiles/histat_app.dir/build +.PHONY : histat_app/fast + +#============================================================================= +# Target rules for targets named hirdrgen_app + +# Build rule for target. +hirdrgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hirdrgen_app +.PHONY : hirdrgen_app + +# fast build rule for target. +hirdrgen_app/fast: + $(MAKE) -f objects/CMakeFiles/hirdrgen_app.dir/build.make objects/CMakeFiles/hirdrgen_app.dir/build +.PHONY : hirdrgen_app/fast + +#============================================================================= +# Target rules for targets named hinoise_app + +# Build rule for target. +hinoise_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hinoise_app +.PHONY : hinoise_app + +# fast build rule for target. +hinoise_app/fast: + $(MAKE) -f objects/CMakeFiles/hinoise_app.dir/build.make objects/CMakeFiles/hinoise_app.dir/build +.PHONY : hinoise_app/fast + +#============================================================================= +# Target rules for targets named hisharpen_app + +# Build rule for target. +hisharpen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hisharpen_app +.PHONY : hisharpen_app + +# fast build rule for target. +hisharpen_app/fast: + $(MAKE) -f objects/CMakeFiles/hisharpen_app.dir/build.make objects/CMakeFiles/hisharpen_app.dir/build +.PHONY : hisharpen_app/fast + +#============================================================================= +# Target rules for targets named hijitter_app + +# Build rule for target. +hijitter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hijitter_app +.PHONY : hijitter_app + +# fast build rule for target. +hijitter_app/fast: + $(MAKE) -f objects/CMakeFiles/hijitter_app.dir/build.make objects/CMakeFiles/hijitter_app.dir/build +.PHONY : hijitter_app/fast + +#============================================================================= +# Target rules for targets named hifringe_app + +# Build rule for target. +hifringe_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hifringe_app +.PHONY : hifringe_app + +# fast build rule for target. +hifringe_app/fast: + $(MAKE) -f objects/CMakeFiles/hifringe_app.dir/build.make objects/CMakeFiles/hifringe_app.dir/build +.PHONY : hifringe_app/fast + +#============================================================================= +# Target rules for targets named hidtmgen_app + +# Build rule for target. +hidtmgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hidtmgen_app +.PHONY : hidtmgen_app + +# fast build rule for target. +hidtmgen_app/fast: + $(MAKE) -f objects/CMakeFiles/hidtmgen_app.dir/build.make objects/CMakeFiles/hidtmgen_app.dir/build +.PHONY : hidtmgen_app/fast + +#============================================================================= +# Target rules for targets named hicrop_app + +# Build rule for target. +hicrop_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hicrop_app +.PHONY : hicrop_app + +# fast build rule for target. +hicrop_app/fast: + $(MAKE) -f objects/CMakeFiles/hicrop_app.dir/build.make objects/CMakeFiles/hicrop_app.dir/build +.PHONY : hicrop_app/fast + +#============================================================================= +# Target rules for targets named hiccdstitch_app + +# Build rule for target. +hiccdstitch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hiccdstitch_app +.PHONY : hiccdstitch_app + +# fast build rule for target. +hiccdstitch_app/fast: + $(MAKE) -f objects/CMakeFiles/hiccdstitch_app.dir/build.make objects/CMakeFiles/hiccdstitch_app.dir/build +.PHONY : hiccdstitch_app/fast + +#============================================================================= +# Target rules for targets named hicalproc_app + +# Build rule for target. +hicalproc_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hicalproc_app +.PHONY : hicalproc_app + +# fast build rule for target. +hicalproc_app/fast: + $(MAKE) -f objects/CMakeFiles/hicalproc_app.dir/build.make objects/CMakeFiles/hicalproc_app.dir/build +.PHONY : hicalproc_app/fast + +#============================================================================= +# Target rules for targets named hical_app + +# Build rule for target. +hical_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hical_app +.PHONY : hical_app + +# fast build rule for target. +hical_app/fast: + $(MAKE) -f objects/CMakeFiles/hical_app.dir/build.make objects/CMakeFiles/hical_app.dir/build +.PHONY : hical_app/fast + +#============================================================================= +# Target rules for targets named ctxcal_app + +# Build rule for target. +ctxcal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ctxcal_app +.PHONY : ctxcal_app + +# fast build rule for target. +ctxcal_app/fast: + $(MAKE) -f objects/CMakeFiles/ctxcal_app.dir/build.make objects/CMakeFiles/ctxcal_app.dir/build +.PHONY : ctxcal_app/fast + +#============================================================================= +# Target rules for targets named crism2isis_app + +# Build rule for target. +crism2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 crism2isis_app +.PHONY : crism2isis_app + +# fast build rule for target. +crism2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/crism2isis_app.dir/build.make objects/CMakeFiles/crism2isis_app.dir/build +.PHONY : crism2isis_app/fast + +#============================================================================= +# Target rules for targets named mro_unit_test_MarciCamera + +# Build rule for target. +mro_unit_test_MarciCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_MarciCamera +.PHONY : mro_unit_test_MarciCamera + +# fast build rule for target. +mro_unit_test_MarciCamera/fast: + $(MAKE) -f objects/CMakeFiles/mro_unit_test_MarciCamera.dir/build.make objects/CMakeFiles/mro_unit_test_MarciCamera.dir/build +.PHONY : mro_unit_test_MarciCamera/fast + +#============================================================================= +# Target rules for targets named mro_unit_test_HiriseCamera + +# Build rule for target. +mro_unit_test_HiriseCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_HiriseCamera +.PHONY : mro_unit_test_HiriseCamera + +# fast build rule for target. +mro_unit_test_HiriseCamera/fast: + $(MAKE) -f objects/CMakeFiles/mro_unit_test_HiriseCamera.dir/build.make objects/CMakeFiles/mro_unit_test_HiriseCamera.dir/build +.PHONY : mro_unit_test_HiriseCamera/fast + +#============================================================================= +# Target rules for targets named mro_unit_test_CTXCamera + +# Build rule for target. +mro_unit_test_CTXCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_CTXCamera +.PHONY : mro_unit_test_CTXCamera + +# fast build rule for target. +mro_unit_test_CTXCamera/fast: + $(MAKE) -f objects/CMakeFiles/mro_unit_test_CTXCamera.dir/build.make objects/CMakeFiles/mro_unit_test_CTXCamera.dir/build +.PHONY : mro_unit_test_CTXCamera/fast + +#============================================================================= +# Target rules for targets named mro + +# Build rule for target. +mro: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro +.PHONY : mro + +# fast build rule for target. +mro/fast: + $(MAKE) -f objects/CMakeFiles/mro.dir/build.make objects/CMakeFiles/mro.dir/build +.PHONY : mro/fast + +#============================================================================= +# Target rules for targets named HiriseCamera + +# Build rule for target. +HiriseCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HiriseCamera +.PHONY : HiriseCamera + +# fast build rule for target. +HiriseCamera/fast: + $(MAKE) -f objects/CMakeFiles/HiriseCamera.dir/build.make objects/CMakeFiles/HiriseCamera.dir/build +.PHONY : HiriseCamera/fast + +#============================================================================= +# Target rules for targets named CrismCamera + +# Build rule for target. +CrismCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 CrismCamera +.PHONY : CrismCamera + +# fast build rule for target. +CrismCamera/fast: + $(MAKE) -f objects/CMakeFiles/CrismCamera.dir/build.make objects/CMakeFiles/CrismCamera.dir/build +.PHONY : CrismCamera/fast + +#============================================================================= +# Target rules for targets named mocuncompress_app + +# Build rule for target. +mocuncompress_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mocuncompress_app +.PHONY : mocuncompress_app + +# fast build rule for target. +mocuncompress_app/fast: + $(MAKE) -f objects/CMakeFiles/mocuncompress_app.dir/build.make objects/CMakeFiles/mocuncompress_app.dir/build +.PHONY : mocuncompress_app/fast + +#============================================================================= +# Target rules for targets named mocproc_app + +# Build rule for target. +mocproc_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mocproc_app +.PHONY : mocproc_app + +# fast build rule for target. +mocproc_app/fast: + $(MAKE) -f objects/CMakeFiles/mocproc_app.dir/build.make objects/CMakeFiles/mocproc_app.dir/build +.PHONY : mocproc_app/fast + +#============================================================================= +# Target rules for targets named mocnoise50_app + +# Build rule for target. +mocnoise50_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mocnoise50_app +.PHONY : mocnoise50_app + +# fast build rule for target. +mocnoise50_app/fast: + $(MAKE) -f objects/CMakeFiles/mocnoise50_app.dir/build.make objects/CMakeFiles/mocnoise50_app.dir/build +.PHONY : mocnoise50_app/fast + +#============================================================================= +# Target rules for targets named mocgap_app + +# Build rule for target. +mocgap_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mocgap_app +.PHONY : mocgap_app + +# fast build rule for target. +mocgap_app/fast: + $(MAKE) -f objects/CMakeFiles/mocgap_app.dir/build.make objects/CMakeFiles/mocgap_app.dir/build +.PHONY : mocgap_app/fast + +#============================================================================= +# Target rules for targets named moccal_app + +# Build rule for target. +moccal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 moccal_app +.PHONY : moccal_app + +# fast build rule for target. +moccal_app/fast: + $(MAKE) -f objects/CMakeFiles/moccal_app.dir/build.make objects/CMakeFiles/moccal_app.dir/build +.PHONY : moccal_app/fast + +#============================================================================= +# Target rules for targets named mgs_unit_test_MocWideAngleCamera + +# Build rule for target. +mgs_unit_test_MocWideAngleCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocWideAngleCamera +.PHONY : mgs_unit_test_MocWideAngleCamera + +# fast build rule for target. +mgs_unit_test_MocWideAngleCamera/fast: + $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocWideAngleCamera.dir/build.make objects/CMakeFiles/mgs_unit_test_MocWideAngleCamera.dir/build +.PHONY : mgs_unit_test_MocWideAngleCamera/fast + +#============================================================================= +# Target rules for targets named mgs_unit_test_MocLabels + +# Build rule for target. +mgs_unit_test_MocLabels: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocLabels +.PHONY : mgs_unit_test_MocLabels + +# fast build rule for target. +mgs_unit_test_MocLabels/fast: + $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocLabels.dir/build.make objects/CMakeFiles/mgs_unit_test_MocLabels.dir/build +.PHONY : mgs_unit_test_MocLabels/fast + +#============================================================================= +# Target rules for targets named mdisedrinfo_app + +# Build rule for target. +mdisedrinfo_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mdisedrinfo_app +.PHONY : mdisedrinfo_app + +# fast build rule for target. +mdisedrinfo_app/fast: + $(MAKE) -f objects/CMakeFiles/mdisedrinfo_app.dir/build.make objects/CMakeFiles/mdisedrinfo_app.dir/build +.PHONY : mdisedrinfo_app/fast + +#============================================================================= +# Target rules for targets named mdis2pds_app + +# Build rule for target. +mdis2pds_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mdis2pds_app +.PHONY : mdis2pds_app + +# fast build rule for target. +mdis2pds_app/fast: + $(MAKE) -f objects/CMakeFiles/mdis2pds_app.dir/build.make objects/CMakeFiles/mdis2pds_app.dir/build +.PHONY : mdis2pds_app/fast + +#============================================================================= +# Target rules for targets named mer2isis_app + +# Build rule for target. +mer2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mer2isis_app +.PHONY : mer2isis_app + +# fast build rule for target. +mer2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mer2isis_app.dir/build.make objects/CMakeFiles/mer2isis_app.dir/build +.PHONY : mer2isis_app/fast + +#============================================================================= +# Target rules for targets named mar10restore_app + +# Build rule for target. +mar10restore_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mar10restore_app +.PHONY : mar10restore_app + +# fast build rule for target. +mar10restore_app/fast: + $(MAKE) -f objects/CMakeFiles/mar10restore_app.dir/build.make objects/CMakeFiles/mar10restore_app.dir/build +.PHONY : mar10restore_app/fast + +#============================================================================= +# Target rules for targets named mar10cal_app + +# Build rule for target. +mar10cal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mar10cal_app +.PHONY : mar10cal_app + +# fast build rule for target. +mar10cal_app/fast: + $(MAKE) -f objects/CMakeFiles/mar10cal_app.dir/build.make objects/CMakeFiles/mar10cal_app.dir/build +.PHONY : mar10cal_app/fast + +#============================================================================= +# Target rules for targets named lrowacpho_app + +# Build rule for target. +lrowacpho_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lrowacpho_app +.PHONY : lrowacpho_app + +# fast build rule for target. +lrowacpho_app/fast: + $(MAKE) -f objects/CMakeFiles/lrowacpho_app.dir/build.make objects/CMakeFiles/lrowacpho_app.dir/build +.PHONY : lrowacpho_app/fast + +#============================================================================= +# Target rules for targets named lrowaccal_app + +# Build rule for target. +lrowaccal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lrowaccal_app +.PHONY : lrowaccal_app + +# fast build rule for target. +lrowaccal_app/fast: + $(MAKE) -f objects/CMakeFiles/lrowaccal_app.dir/build.make objects/CMakeFiles/lrowaccal_app.dir/build +.PHONY : lrowaccal_app/fast + +#============================================================================= +# Target rules for targets named lronacpho_app + +# Build rule for target. +lronacpho_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lronacpho_app +.PHONY : lronacpho_app + +# fast build rule for target. +lronacpho_app/fast: + $(MAKE) -f objects/CMakeFiles/lronacpho_app.dir/build.make objects/CMakeFiles/lronacpho_app.dir/build +.PHONY : lronacpho_app/fast + +#============================================================================= +# Target rules for targets named lronac2pds_app + +# Build rule for target. +lronac2pds_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lronac2pds_app +.PHONY : lronac2pds_app + +# fast build rule for target. +lronac2pds_app/fast: + $(MAKE) -f objects/CMakeFiles/lronac2pds_app.dir/build.make objects/CMakeFiles/lronac2pds_app.dir/build +.PHONY : lronac2pds_app/fast + +#============================================================================= +# Target rules for targets named lromakeflat_app + +# Build rule for target. +lromakeflat_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lromakeflat_app +.PHONY : lromakeflat_app + +# fast build rule for target. +lromakeflat_app/fast: + $(MAKE) -f objects/CMakeFiles/lromakeflat_app.dir/build.make objects/CMakeFiles/lromakeflat_app.dir/build +.PHONY : lromakeflat_app/fast + +#============================================================================= +# Target rules for targets named hicalbeta_app + +# Build rule for target. +hicalbeta_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hicalbeta_app +.PHONY : hicalbeta_app + +# fast build rule for target. +hicalbeta_app/fast: + $(MAKE) -f objects/CMakeFiles/hicalbeta_app.dir/build.make objects/CMakeFiles/hicalbeta_app.dir/build +.PHONY : hicalbeta_app/fast + +#============================================================================= +# Target rules for targets named MiniRF + +# Build rule for target. +MiniRF: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MiniRF +.PHONY : MiniRF + +# fast build rule for target. +MiniRF/fast: + $(MAKE) -f objects/CMakeFiles/MiniRF.dir/build.make objects/CMakeFiles/MiniRF.dir/build +.PHONY : MiniRF/fast + +#============================================================================= +# Target rules for targets named LroWideAngleCamera + +# Build rule for target. +LroWideAngleCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LroWideAngleCamera +.PHONY : LroWideAngleCamera + +# fast build rule for target. +LroWideAngleCamera/fast: + $(MAKE) -f objects/CMakeFiles/LroWideAngleCamera.dir/build.make objects/CMakeFiles/LroWideAngleCamera.dir/build +.PHONY : LroWideAngleCamera/fast + +#============================================================================= +# Target rules for targets named lo_unit_test_LoMediumCamera + +# Build rule for target. +lo_unit_test_LoMediumCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lo_unit_test_LoMediumCamera +.PHONY : lo_unit_test_LoMediumCamera + +# fast build rule for target. +lo_unit_test_LoMediumCamera/fast: + $(MAKE) -f objects/CMakeFiles/lo_unit_test_LoMediumCamera.dir/build.make objects/CMakeFiles/lo_unit_test_LoMediumCamera.dir/build +.PHONY : lo_unit_test_LoMediumCamera/fast + +#============================================================================= +# Target rules for targets named lo_unit_test_LoHighCamera + +# Build rule for target. +lo_unit_test_LoHighCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lo_unit_test_LoHighCamera +.PHONY : lo_unit_test_LoHighCamera + +# fast build rule for target. +lo_unit_test_LoHighCamera/fast: + $(MAKE) -f objects/CMakeFiles/lo_unit_test_LoHighCamera.dir/build.make objects/CMakeFiles/lo_unit_test_LoHighCamera.dir/build +.PHONY : lo_unit_test_LoHighCamera/fast + +#============================================================================= +# Target rules for targets named lo_unit_test_LoCameraFiducialMap + +# Build rule for target. +lo_unit_test_LoCameraFiducialMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lo_unit_test_LoCameraFiducialMap +.PHONY : lo_unit_test_LoCameraFiducialMap + +# fast build rule for target. +lo_unit_test_LoCameraFiducialMap/fast: + $(MAKE) -f objects/CMakeFiles/lo_unit_test_LoCameraFiducialMap.dir/build.make objects/CMakeFiles/lo_unit_test_LoCameraFiducialMap.dir/build +.PHONY : lo_unit_test_LoCameraFiducialMap/fast + +#============================================================================= +# Target rules for targets named lo + +# Build rule for target. +lo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lo +.PHONY : lo + +# fast build rule for target. +lo/fast: + $(MAKE) -f objects/CMakeFiles/lo.dir/build.make objects/CMakeFiles/lo.dir/build +.PHONY : lo/fast + +#============================================================================= +# Target rules for targets named kaguyatc2isis_app + +# Build rule for target. +kaguyatc2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kaguyatc2isis_app +.PHONY : kaguyatc2isis_app + +# fast build rule for target. +kaguyatc2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/kaguyatc2isis_app.dir/build.make objects/CMakeFiles/kaguyatc2isis_app.dir/build +.PHONY : kaguyatc2isis_app/fast + +#============================================================================= +# Target rules for targets named kaguyasp2isis_app + +# Build rule for target. +kaguyasp2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kaguyasp2isis_app +.PHONY : kaguyasp2isis_app + +# fast build rule for target. +kaguyasp2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/kaguyasp2isis_app.dir/build.make objects/CMakeFiles/kaguyasp2isis_app.dir/build +.PHONY : kaguyasp2isis_app/fast + +#============================================================================= +# Target rules for targets named nirs2isis_app + +# Build rule for target. +nirs2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 nirs2isis_app +.PHONY : nirs2isis_app + +# fast build rule for target. +nirs2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/nirs2isis_app.dir/build.make objects/CMakeFiles/nirs2isis_app.dir/build +.PHONY : nirs2isis_app/fast + +#============================================================================= +# Target rules for targets named HayabusaNirsCamera + +# Build rule for target. +HayabusaNirsCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HayabusaNirsCamera +.PHONY : HayabusaNirsCamera + +# fast build rule for target. +HayabusaNirsCamera/fast: + $(MAKE) -f objects/CMakeFiles/HayabusaNirsCamera.dir/build.make objects/CMakeFiles/HayabusaNirsCamera.dir/build +.PHONY : HayabusaNirsCamera/fast + +#============================================================================= +# Target rules for targets named voyramp_app + +# Build rule for target. +voyramp_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 voyramp_app +.PHONY : voyramp_app + +# fast build rule for target. +voyramp_app/fast: + $(MAKE) -f objects/CMakeFiles/voyramp_app.dir/build.make objects/CMakeFiles/voyramp_app.dir/build +.PHONY : voyramp_app/fast + +#============================================================================= +# Target rules for targets named gllssical_app + +# Build rule for target. +gllssical_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gllssical_app +.PHONY : gllssical_app + +# fast build rule for target. +gllssical_app/fast: + $(MAKE) -f objects/CMakeFiles/gllssical_app.dir/build.make objects/CMakeFiles/gllssical_app.dir/build +.PHONY : gllssical_app/fast + +#============================================================================= +# Target rules for targets named dawnfc2isis_app + +# Build rule for target. +dawnfc2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dawnfc2isis_app +.PHONY : dawnfc2isis_app + +# fast build rule for target. +dawnfc2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/dawnfc2isis_app.dir/build.make objects/CMakeFiles/dawnfc2isis_app.dir/build +.PHONY : dawnfc2isis_app/fast + +#============================================================================= +# Target rules for targets named clemnircal_app + +# Build rule for target. +clemnircal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clemnircal_app +.PHONY : clemnircal_app + +# fast build rule for target. +clemnircal_app/fast: + $(MAKE) -f objects/CMakeFiles/clemnircal_app.dir/build.make objects/CMakeFiles/clemnircal_app.dir/build +.PHONY : clemnircal_app/fast + +#============================================================================= +# Target rules for targets named clem2isis_app + +# Build rule for target. +clem2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clem2isis_app +.PHONY : clem2isis_app + +# fast build rule for target. +clem2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/clem2isis_app.dir/build.make objects/CMakeFiles/clem2isis_app.dir/build +.PHONY : clem2isis_app/fast + +#============================================================================= +# Target rules for targets named LwirCamera + +# Build rule for target. +LwirCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LwirCamera +.PHONY : LwirCamera + +# fast build rule for target. +LwirCamera/fast: + $(MAKE) -f objects/CMakeFiles/LwirCamera.dir/build.make objects/CMakeFiles/LwirCamera.dir/build +.PHONY : LwirCamera/fast + +#============================================================================= +# Target rules for targets named vimscal_app + +# Build rule for target. +vimscal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vimscal_app +.PHONY : vimscal_app + +# fast build rule for target. +vimscal_app/fast: + $(MAKE) -f objects/CMakeFiles/vimscal_app.dir/build.make objects/CMakeFiles/vimscal_app.dir/build +.PHONY : vimscal_app/fast + +#============================================================================= +# Target rules for targets named vims2isis_app + +# Build rule for target. +vims2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vims2isis_app +.PHONY : vims2isis_app + +# fast build rule for target. +vims2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/vims2isis_app.dir/build.make objects/CMakeFiles/vims2isis_app.dir/build +.PHONY : vims2isis_app/fast + +#============================================================================= +# Target rules for targets named cisscal_app + +# Build rule for target. +cisscal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cisscal_app +.PHONY : cisscal_app + +# fast build rule for target. +cisscal_app/fast: + $(MAKE) -f objects/CMakeFiles/cisscal_app.dir/build.make objects/CMakeFiles/cisscal_app.dir/build +.PHONY : cisscal_app/fast + +#============================================================================= +# Target rules for targets named cassini_unit_test_IssWACamera + +# Build rule for target. +cassini_unit_test_IssWACamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_IssWACamera +.PHONY : cassini_unit_test_IssWACamera + +# fast build rule for target. +cassini_unit_test_IssWACamera/fast: + $(MAKE) -f objects/CMakeFiles/cassini_unit_test_IssWACamera.dir/build.make objects/CMakeFiles/cassini_unit_test_IssWACamera.dir/build +.PHONY : cassini_unit_test_IssWACamera/fast + +#============================================================================= +# Target rules for targets named vikclean_app + +# Build rule for target. +vikclean_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vikclean_app +.PHONY : vikclean_app + +# fast build rule for target. +vikclean_app/fast: + $(MAKE) -f objects/CMakeFiles/vikclean_app.dir/build.make objects/CMakeFiles/vikclean_app.dir/build +.PHONY : vikclean_app/fast + +#============================================================================= +# Target rules for targets named cassini + +# Build rule for target. +cassini: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cassini +.PHONY : cassini + +# fast build rule for target. +cassini/fast: + $(MAKE) -f objects/CMakeFiles/cassini.dir/build.make objects/CMakeFiles/cassini.dir/build +.PHONY : cassini/fast + +#============================================================================= +# Target rules for targets named IssNACamera + +# Build rule for target. +IssNACamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 IssNACamera +.PHONY : IssNACamera + +# fast build rule for target. +IssNACamera/fast: + $(MAKE) -f objects/CMakeFiles/IssNACamera.dir/build.make objects/CMakeFiles/IssNACamera.dir/build +.PHONY : IssNACamera/fast + +#============================================================================= +# Target rules for targets named apollowarp_app + +# Build rule for target. +apollowarp_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollowarp_app +.PHONY : apollowarp_app + +# fast build rule for target. +apollowarp_app/fast: + $(MAKE) -f objects/CMakeFiles/apollowarp_app.dir/build.make objects/CMakeFiles/apollowarp_app.dir/build +.PHONY : apollowarp_app/fast + +#============================================================================= +# Target rules for targets named lorri2isis_app + +# Build rule for target. +lorri2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lorri2isis_app +.PHONY : lorri2isis_app + +# fast build rule for target. +lorri2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/lorri2isis_app.dir/build.make objects/CMakeFiles/lorri2isis_app.dir/build +.PHONY : lorri2isis_app/fast + +#============================================================================= +# Target rules for targets named apolloremrx_app + +# Build rule for target. +apolloremrx_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apolloremrx_app +.PHONY : apolloremrx_app + +# fast build rule for target. +apolloremrx_app/fast: + $(MAKE) -f objects/CMakeFiles/apolloremrx_app.dir/build.make objects/CMakeFiles/apolloremrx_app.dir/build +.PHONY : apolloremrx_app/fast + +#============================================================================= +# Target rules for targets named apollopaninit_app + +# Build rule for target. +apollopaninit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollopaninit_app +.PHONY : apollopaninit_app + +# fast build rule for target. +apollopaninit_app/fast: + $(MAKE) -f objects/CMakeFiles/apollopaninit_app.dir/build.make objects/CMakeFiles/apollopaninit_app.dir/build +.PHONY : apollopaninit_app/fast + +#============================================================================= +# Target rules for targets named apollofindrx_app + +# Build rule for target. +apollofindrx_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollofindrx_app +.PHONY : apollofindrx_app + +# fast build rule for target. +apollofindrx_app/fast: + $(MAKE) -f objects/CMakeFiles/apollofindrx_app.dir/build.make objects/CMakeFiles/apollofindrx_app.dir/build +.PHONY : apollofindrx_app/fast + +#============================================================================= +# Target rules for targets named apollo2isis_app + +# Build rule for target. +apollo2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollo2isis_app +.PHONY : apollo2isis_app + +# fast build rule for target. +apollo2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/apollo2isis_app.dir/build.make objects/CMakeFiles/apollo2isis_app.dir/build +.PHONY : apollo2isis_app/fast + +#============================================================================= +# Target rules for targets named apollo_unit_test_CentroidApolloPan + +# Build rule for target. +apollo_unit_test_CentroidApolloPan: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_CentroidApolloPan +.PHONY : apollo_unit_test_CentroidApolloPan + +# fast build rule for target. +apollo_unit_test_CentroidApolloPan/fast: + $(MAKE) -f objects/CMakeFiles/apollo_unit_test_CentroidApolloPan.dir/build.make objects/CMakeFiles/apollo_unit_test_CentroidApolloPan.dir/build +.PHONY : apollo_unit_test_CentroidApolloPan/fast + +#============================================================================= +# Target rules for targets named ApolloPanoramicCamera + +# Build rule for target. +ApolloPanoramicCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ApolloPanoramicCamera +.PHONY : ApolloPanoramicCamera + +# fast build rule for target. +ApolloPanoramicCamera/fast: + $(MAKE) -f objects/CMakeFiles/ApolloPanoramicCamera.dir/build.make objects/CMakeFiles/ApolloPanoramicCamera.dir/build +.PHONY : ApolloPanoramicCamera/fast + +#============================================================================= +# Target rules for targets named ApolloMetricCamera + +# Build rule for target. +ApolloMetricCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ApolloMetricCamera +.PHONY : ApolloMetricCamera + +# fast build rule for target. +ApolloMetricCamera/fast: + $(MAKE) -f objects/CMakeFiles/ApolloMetricCamera.dir/build.make objects/CMakeFiles/ApolloMetricCamera.dir/build +.PHONY : ApolloMetricCamera/fast + +#============================================================================= +# Target rules for targets named kerneldbgen_app + +# Build rule for target. +kerneldbgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kerneldbgen_app +.PHONY : kerneldbgen_app + +# fast build rule for target. +kerneldbgen_app/fast: + $(MAKE) -f objects/CMakeFiles/kerneldbgen_app.dir/build.make objects/CMakeFiles/kerneldbgen_app.dir/build +.PHONY : kerneldbgen_app/fast + +#============================================================================= +# Target rules for targets named isiscomplete_app + +# Build rule for target. +isiscomplete_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isiscomplete_app +.PHONY : isiscomplete_app + +# fast build rule for target. +isiscomplete_app/fast: + $(MAKE) -f objects/CMakeFiles/isiscomplete_app.dir/build.make objects/CMakeFiles/isiscomplete_app.dir/build +.PHONY : isiscomplete_app/fast + +#============================================================================= +# Target rules for targets named dempack_app + +# Build rule for target. +dempack_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dempack_app +.PHONY : dempack_app + +# fast build rule for target. +dempack_app/fast: + $(MAKE) -f objects/CMakeFiles/dempack_app.dir/build.make objects/CMakeFiles/dempack_app.dir/build +.PHONY : dempack_app/fast + +#============================================================================= +# Target rules for targets named hi2isis_app + +# Build rule for target. +hi2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hi2isis_app +.PHONY : hi2isis_app + +# fast build rule for target. +hi2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/hi2isis_app.dir/build.make objects/CMakeFiles/hi2isis_app.dir/build +.PHONY : hi2isis_app/fast + +#============================================================================= +# Target rules for targets named csspckgen_app + +# Build rule for target. +csspckgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 csspckgen_app +.PHONY : csspckgen_app + +# fast build rule for target. +csspckgen_app/fast: + $(MAKE) -f objects/CMakeFiles/csspckgen_app.dir/build.make objects/CMakeFiles/csspckgen_app.dir/build +.PHONY : csspckgen_app/fast + +#============================================================================= +# Target rules for targets named qtie_app + +# Build rule for target. +qtie_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 qtie_app +.PHONY : qtie_app + +# fast build rule for target. +qtie_app/fast: + $(MAKE) -f objects/CMakeFiles/qtie_app.dir/build.make objects/CMakeFiles/qtie_app.dir/build +.PHONY : qtie_app/fast + +#============================================================================= +# Target rules for targets named qnet_app + +# Build rule for target. +qnet_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 qnet_app +.PHONY : qnet_app + +# fast build rule for target. +qnet_app/fast: + $(MAKE) -f objects/CMakeFiles/qnet_app.dir/build.make objects/CMakeFiles/qnet_app.dir/build +.PHONY : qnet_app/fast + +#============================================================================= +# Target rules for targets named qmos_app + +# Build rule for target. +qmos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 qmos_app +.PHONY : qmos_app + +# fast build rule for target. +qmos_app/fast: + $(MAKE) -f objects/CMakeFiles/qmos_app.dir/build.make objects/CMakeFiles/qmos_app.dir/build +.PHONY : qmos_app/fast + +#============================================================================= +# Target rules for targets named warp_app + +# Build rule for target. +warp_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 warp_app +.PHONY : warp_app + +# fast build rule for target. +warp_app/fast: + $(MAKE) -f objects/CMakeFiles/warp_app.dir/build.make objects/CMakeFiles/warp_app.dir/build +.PHONY : warp_app/fast + +#============================================================================= +# Target rules for targets named sumspice_app + +# Build rule for target. +sumspice_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 sumspice_app +.PHONY : sumspice_app + +# fast build rule for target. +sumspice_app/fast: + $(MAKE) -f objects/CMakeFiles/sumspice_app.dir/build.make objects/CMakeFiles/sumspice_app.dir/build +.PHONY : sumspice_app/fast + +#============================================================================= +# Target rules for targets named slither_app + +# Build rule for target. +slither_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 slither_app +.PHONY : slither_app + +# fast build rule for target. +slither_app/fast: + $(MAKE) -f objects/CMakeFiles/slither_app.dir/build.make objects/CMakeFiles/slither_app.dir/build +.PHONY : slither_app/fast + +#============================================================================= +# Target rules for targets named prtloganalyzer_app + +# Build rule for target. +prtloganalyzer_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 prtloganalyzer_app +.PHONY : prtloganalyzer_app + +# fast build rule for target. +prtloganalyzer_app/fast: + $(MAKE) -f objects/CMakeFiles/prtloganalyzer_app.dir/build.make objects/CMakeFiles/prtloganalyzer_app.dir/build +.PHONY : prtloganalyzer_app/fast + +#============================================================================= +# Target rules for targets named jigsaw_app + +# Build rule for target. +jigsaw_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 jigsaw_app +.PHONY : jigsaw_app + +# fast build rule for target. +jigsaw_app/fast: + $(MAKE) -f objects/CMakeFiles/jigsaw_app.dir/build.make objects/CMakeFiles/jigsaw_app.dir/build +.PHONY : jigsaw_app/fast + +#============================================================================= +# Target rules for targets named fplanemap_app + +# Build rule for target. +fplanemap_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fplanemap_app +.PHONY : fplanemap_app + +# fast build rule for target. +fplanemap_app/fast: + $(MAKE) -f objects/CMakeFiles/fplanemap_app.dir/build.make objects/CMakeFiles/fplanemap_app.dir/build +.PHONY : fplanemap_app/fast + +#============================================================================= +# Target rules for targets named findfeatures_app + +# Build rule for target. +findfeatures_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 findfeatures_app +.PHONY : findfeatures_app + +# fast build rule for target. +findfeatures_app/fast: + $(MAKE) -f objects/CMakeFiles/findfeatures_app.dir/build.make objects/CMakeFiles/findfeatures_app.dir/build +.PHONY : findfeatures_app/fast + +#============================================================================= +# Target rules for targets named coreg_app + +# Build rule for target. +coreg_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 coreg_app +.PHONY : coreg_app + +# fast build rule for target. +coreg_app/fast: + $(MAKE) -f objects/CMakeFiles/coreg_app.dir/build.make objects/CMakeFiles/coreg_app.dir/build +.PHONY : coreg_app/fast + +#============================================================================= +# Target rules for targets named cnetwinnow_app + +# Build rule for target. +cnetwinnow_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetwinnow_app +.PHONY : cnetwinnow_app + +# fast build rule for target. +cnetwinnow_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetwinnow_app.dir/build.make objects/CMakeFiles/cnetwinnow_app.dir/build +.PHONY : cnetwinnow_app/fast + +#============================================================================= +# Target rules for targets named cnetthinner_app + +# Build rule for target. +cnetthinner_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetthinner_app +.PHONY : cnetthinner_app + +# fast build rule for target. +cnetthinner_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetthinner_app.dir/build.make objects/CMakeFiles/cnetthinner_app.dir/build +.PHONY : cnetthinner_app/fast + +#============================================================================= +# Target rules for targets named cnetpvl2bin_app + +# Build rule for target. +cnetpvl2bin_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetpvl2bin_app +.PHONY : cnetpvl2bin_app + +# fast build rule for target. +cnetpvl2bin_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetpvl2bin_app.dir/build.make objects/CMakeFiles/cnetpvl2bin_app.dir/build +.PHONY : cnetpvl2bin_app/fast + +#============================================================================= +# Target rules for targets named MsiCamera + +# Build rule for target. +MsiCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MsiCamera +.PHONY : MsiCamera + +# fast build rule for target. +MsiCamera/fast: + $(MAKE) -f objects/CMakeFiles/MsiCamera.dir/build.make objects/CMakeFiles/MsiCamera.dir/build +.PHONY : MsiCamera/fast + +#============================================================================= +# Target rules for targets named cnetmerge_app + +# Build rule for target. +cnetmerge_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetmerge_app +.PHONY : cnetmerge_app + +# fast build rule for target. +cnetmerge_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetmerge_app.dir/build.make objects/CMakeFiles/cnetmerge_app.dir/build +.PHONY : cnetmerge_app/fast + +#============================================================================= +# Target rules for targets named cnetnewradii_app + +# Build rule for target. +cnetnewradii_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetnewradii_app +.PHONY : cnetnewradii_app + +# fast build rule for target. +cnetnewradii_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetnewradii_app.dir/build.make objects/CMakeFiles/cnetnewradii_app.dir/build +.PHONY : cnetnewradii_app/fast + +#============================================================================= +# Target rules for targets named cnethist_app + +# Build rule for target. +cnethist_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnethist_app +.PHONY : cnethist_app + +# fast build rule for target. +cnethist_app/fast: + $(MAKE) -f objects/CMakeFiles/cnethist_app.dir/build.make objects/CMakeFiles/cnethist_app.dir/build +.PHONY : cnethist_app/fast + +#============================================================================= +# Target rules for targets named cnetcombinept_app + +# Build rule for target. +cnetcombinept_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetcombinept_app +.PHONY : cnetcombinept_app + +# fast build rule for target. +cnetcombinept_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetcombinept_app.dir/build.make objects/CMakeFiles/cnetcombinept_app.dir/build +.PHONY : cnetcombinept_app/fast + +#============================================================================= +# Target rules for targets named cnetbin2pvl_app + +# Build rule for target. +cnetbin2pvl_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetbin2pvl_app +.PHONY : cnetbin2pvl_app + +# fast build rule for target. +cnetbin2pvl_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetbin2pvl_app.dir/build.make objects/CMakeFiles/cnetbin2pvl_app.dir/build +.PHONY : cnetbin2pvl_app/fast + +#============================================================================= +# Target rules for targets named cnet2mat_app + +# Build rule for target. +cnet2mat_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnet2mat_app +.PHONY : cnet2mat_app + +# fast build rule for target. +cnet2mat_app/fast: + $(MAKE) -f objects/CMakeFiles/cnet2mat_app.dir/build.make objects/CMakeFiles/cnet2mat_app.dir/build +.PHONY : cnet2mat_app/fast + +#============================================================================= +# Target rules for targets named cnet2dem_app + +# Build rule for target. +cnet2dem_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnet2dem_app +.PHONY : cnet2dem_app + +# fast build rule for target. +cnet2dem_app/fast: + $(MAKE) -f objects/CMakeFiles/cnet2dem_app.dir/build.make objects/CMakeFiles/cnet2dem_app.dir/build +.PHONY : cnet2dem_app/fast + +#============================================================================= +# Target rules for targets named vicar2isis_app + +# Build rule for target. +vicar2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vicar2isis_app +.PHONY : vicar2isis_app + +# fast build rule for target. +vicar2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/vicar2isis_app.dir/build.make objects/CMakeFiles/vicar2isis_app.dir/build +.PHONY : vicar2isis_app/fast + +#============================================================================= +# Target rules for targets named NewHorizonsMvicFrameCamera + +# Build rule for target. +NewHorizonsMvicFrameCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsMvicFrameCamera +.PHONY : NewHorizonsMvicFrameCamera + +# fast build rule for target. +NewHorizonsMvicFrameCamera/fast: + $(MAKE) -f objects/CMakeFiles/NewHorizonsMvicFrameCamera.dir/build.make objects/CMakeFiles/NewHorizonsMvicFrameCamera.dir/build +.PHONY : NewHorizonsMvicFrameCamera/fast + +#============================================================================= +# Target rules for targets named uncrop_app + +# Build rule for target. +uncrop_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 uncrop_app +.PHONY : uncrop_app + +# fast build rule for target. +uncrop_app/fast: + $(MAKE) -f objects/CMakeFiles/uncrop_app.dir/build.make objects/CMakeFiles/uncrop_app.dir/build +.PHONY : uncrop_app/fast + +#============================================================================= +# Target rules for targets named trim_app + +# Build rule for target. +trim_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 trim_app +.PHONY : trim_app + +# fast build rule for target. +trim_app/fast: + $(MAKE) -f objects/CMakeFiles/trim_app.dir/build.make objects/CMakeFiles/trim_app.dir/build +.PHONY : trim_app/fast + +#============================================================================= +# Target rules for targets named tonematch_app + +# Build rule for target. +tonematch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tonematch_app +.PHONY : tonematch_app + +# fast build rule for target. +tonematch_app/fast: + $(MAKE) -f objects/CMakeFiles/tonematch_app.dir/build.make objects/CMakeFiles/tonematch_app.dir/build +.PHONY : tonematch_app/fast + +#============================================================================= +# Target rules for targets named tabledump_app + +# Build rule for target. +tabledump_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tabledump_app +.PHONY : tabledump_app + +# fast build rule for target. +tabledump_app/fast: + $(MAKE) -f objects/CMakeFiles/tabledump_app.dir/build.make objects/CMakeFiles/tabledump_app.dir/build +.PHONY : tabledump_app/fast + +#============================================================================= +# Target rules for targets named cassini_unit_test_VimsCamera + +# Build rule for target. +cassini_unit_test_VimsCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_VimsCamera +.PHONY : cassini_unit_test_VimsCamera + +# fast build rule for target. +cassini_unit_test_VimsCamera/fast: + $(MAKE) -f objects/CMakeFiles/cassini_unit_test_VimsCamera.dir/build.make objects/CMakeFiles/cassini_unit_test_VimsCamera.dir/build +.PHONY : cassini_unit_test_VimsCamera/fast + +#============================================================================= +# Target rules for targets named table2cube_app + +# Build rule for target. +table2cube_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 table2cube_app +.PHONY : table2cube_app + +# fast build rule for target. +table2cube_app/fast: + $(MAKE) -f objects/CMakeFiles/table2cube_app.dir/build.make objects/CMakeFiles/table2cube_app.dir/build +.PHONY : table2cube_app/fast + +#============================================================================= +# Target rules for targets named hideal2pds_app + +# Build rule for target. +hideal2pds_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hideal2pds_app +.PHONY : hideal2pds_app + +# fast build rule for target. +hideal2pds_app/fast: + $(MAKE) -f objects/CMakeFiles/hideal2pds_app.dir/build.make objects/CMakeFiles/hideal2pds_app.dir/build +.PHONY : hideal2pds_app/fast + +#============================================================================= +# Target rules for targets named stretch_app + +# Build rule for target. +stretch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 stretch_app +.PHONY : stretch_app + +# fast build rule for target. +stretch_app/fast: + $(MAKE) -f objects/CMakeFiles/stretch_app.dir/build.make objects/CMakeFiles/stretch_app.dir/build +.PHONY : stretch_app/fast + +#============================================================================= +# Target rules for targets named lrowac2isis_app + +# Build rule for target. +lrowac2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lrowac2isis_app +.PHONY : lrowac2isis_app + +# fast build rule for target. +lrowac2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/lrowac2isis_app.dir/build.make objects/CMakeFiles/lrowac2isis_app.dir/build +.PHONY : lrowac2isis_app/fast + +#============================================================================= +# Target rules for targets named apollo + +# Build rule for target. +apollo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollo +.PHONY : apollo + +# fast build rule for target. +apollo/fast: + $(MAKE) -f objects/CMakeFiles/apollo.dir/build.make objects/CMakeFiles/apollo.dir/build +.PHONY : apollo/fast + +#============================================================================= +# Target rules for targets named spicefit_app + +# Build rule for target. +spicefit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spicefit_app +.PHONY : spicefit_app + +# fast build rule for target. +spicefit_app/fast: + $(MAKE) -f objects/CMakeFiles/spicefit_app.dir/build.make objects/CMakeFiles/spicefit_app.dir/build +.PHONY : spicefit_app/fast + +#============================================================================= +# Target rules for targets named speclowpass_app + +# Build rule for target. +speclowpass_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 speclowpass_app +.PHONY : speclowpass_app + +# fast build rule for target. +speclowpass_app/fast: + $(MAKE) -f objects/CMakeFiles/speclowpass_app.dir/build.make objects/CMakeFiles/speclowpass_app.dir/build +.PHONY : speclowpass_app/fast + +#============================================================================= +# Target rules for targets named chan1m32isis_app + +# Build rule for target. +chan1m32isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 chan1m32isis_app +.PHONY : chan1m32isis_app + +# fast build rule for target. +chan1m32isis_app/fast: + $(MAKE) -f objects/CMakeFiles/chan1m32isis_app.dir/build.make objects/CMakeFiles/chan1m32isis_app.dir/build +.PHONY : chan1m32isis_app/fast + +#============================================================================= +# Target rules for targets named spechighpass_app + +# Build rule for target. +spechighpass_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spechighpass_app +.PHONY : spechighpass_app + +# fast build rule for target. +spechighpass_app/fast: + $(MAKE) -f objects/CMakeFiles/spechighpass_app.dir/build.make objects/CMakeFiles/spechighpass_app.dir/build +.PHONY : spechighpass_app/fast + +#============================================================================= +# Target rules for targets named specadd_app + +# Build rule for target. +specadd_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 specadd_app +.PHONY : specadd_app + +# fast build rule for target. +specadd_app/fast: + $(MAKE) -f objects/CMakeFiles/specadd_app.dir/build.make objects/CMakeFiles/specadd_app.dir/build +.PHONY : specadd_app/fast + +#============================================================================= +# Target rules for targets named smtk_app + +# Build rule for target. +smtk_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 smtk_app +.PHONY : smtk_app + +# fast build rule for target. +smtk_app/fast: + $(MAKE) -f objects/CMakeFiles/smtk_app.dir/build.make objects/CMakeFiles/smtk_app.dir/build +.PHONY : smtk_app/fast + +#============================================================================= +# Target rules for targets named slpmap_app + +# Build rule for target. +slpmap_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 slpmap_app +.PHONY : slpmap_app + +# fast build rule for target. +slpmap_app/fast: + $(MAKE) -f objects/CMakeFiles/slpmap_app.dir/build.make objects/CMakeFiles/slpmap_app.dir/build +.PHONY : slpmap_app/fast + +#============================================================================= +# Target rules for targets named skypt_app + +# Build rule for target. +skypt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 skypt_app +.PHONY : skypt_app + +# fast build rule for target. +skypt_app/fast: + $(MAKE) -f objects/CMakeFiles/skypt_app.dir/build.make objects/CMakeFiles/skypt_app.dir/build +.PHONY : skypt_app/fast + +#============================================================================= +# Target rules for targets named skymap_app + +# Build rule for target. +skymap_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 skymap_app +.PHONY : skymap_app + +# fast build rule for target. +skymap_app/fast: + $(MAKE) -f objects/CMakeFiles/skymap_app.dir/build.make objects/CMakeFiles/skymap_app.dir/build +.PHONY : skymap_app/fast + +#============================================================================= +# Target rules for targets named clemuvviscal_app + +# Build rule for target. +clemuvviscal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clemuvviscal_app +.PHONY : clemuvviscal_app + +# fast build rule for target. +clemuvviscal_app/fast: + $(MAKE) -f objects/CMakeFiles/clemuvviscal_app.dir/build.make objects/CMakeFiles/clemuvviscal_app.dir/build +.PHONY : clemuvviscal_app/fast + +#============================================================================= +# Target rules for targets named sigmastretch_app + +# Build rule for target. +sigmastretch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 sigmastretch_app +.PHONY : sigmastretch_app + +# fast build rule for target. +sigmastretch_app/fast: + $(MAKE) -f objects/CMakeFiles/sigmastretch_app.dir/build.make objects/CMakeFiles/sigmastretch_app.dir/build +.PHONY : sigmastretch_app/fast + +#============================================================================= +# Target rules for targets named shadow_app + +# Build rule for target. +shadow_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 shadow_app +.PHONY : shadow_app + +# fast build rule for target. +shadow_app/fast: + $(MAKE) -f objects/CMakeFiles/shadow_app.dir/build.make objects/CMakeFiles/shadow_app.dir/build +.PHONY : shadow_app/fast + +#============================================================================= +# Target rules for targets named shade_app + +# Build rule for target. +shade_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 shade_app +.PHONY : shade_app + +# fast build rule for target. +shade_app/fast: + $(MAKE) -f objects/CMakeFiles/shade_app.dir/build.make objects/CMakeFiles/shade_app.dir/build +.PHONY : shade_app/fast + +#============================================================================= +# Target rules for targets named mar102isis_app + +# Build rule for target. +mar102isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mar102isis_app +.PHONY : mar102isis_app + +# fast build rule for target. +mar102isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mar102isis_app.dir/build.make objects/CMakeFiles/mar102isis_app.dir/build +.PHONY : mar102isis_app/fast + +#============================================================================= +# Target rules for targets named segment_app + +# Build rule for target. +segment_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 segment_app +.PHONY : segment_app + +# fast build rule for target. +segment_app/fast: + $(MAKE) -f objects/CMakeFiles/segment_app.dir/build.make objects/CMakeFiles/segment_app.dir/build +.PHONY : segment_app/fast + +#============================================================================= +# Target rules for targets named pointreg_app + +# Build rule for target. +pointreg_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pointreg_app +.PHONY : pointreg_app + +# fast build rule for target. +pointreg_app/fast: + $(MAKE) -f objects/CMakeFiles/pointreg_app.dir/build.make objects/CMakeFiles/pointreg_app.dir/build +.PHONY : pointreg_app/fast + +#============================================================================= +# Target rules for targets named rotate_app + +# Build rule for target. +rotate_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 rotate_app +.PHONY : rotate_app + +# fast build rule for target. +rotate_app/fast: + $(MAKE) -f objects/CMakeFiles/rotate_app.dir/build.make objects/CMakeFiles/rotate_app.dir/build +.PHONY : rotate_app/fast + +#============================================================================= +# Target rules for targets named ringspt_app + +# Build rule for target. +ringspt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ringspt_app +.PHONY : ringspt_app + +# fast build rule for target. +ringspt_app/fast: + $(MAKE) -f objects/CMakeFiles/ringspt_app.dir/build.make objects/CMakeFiles/ringspt_app.dir/build +.PHONY : ringspt_app/fast + +#============================================================================= +# Target rules for targets named ringscam2map_app + +# Build rule for target. +ringscam2map_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ringscam2map_app +.PHONY : ringscam2map_app + +# fast build rule for target. +ringscam2map_app/fast: + $(MAKE) -f objects/CMakeFiles/ringscam2map_app.dir/build.make objects/CMakeFiles/ringscam2map_app.dir/build +.PHONY : ringscam2map_app/fast + +#============================================================================= +# Target rules for targets named cnetstats_app + +# Build rule for target. +cnetstats_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetstats_app +.PHONY : cnetstats_app + +# fast build rule for target. +cnetstats_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetstats_app.dir/build.make objects/CMakeFiles/cnetstats_app.dir/build +.PHONY : cnetstats_app/fast + +#============================================================================= +# Target rules for targets named ringsautomos_app + +# Build rule for target. +ringsautomos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ringsautomos_app +.PHONY : ringsautomos_app + +# fast build rule for target. +ringsautomos_app/fast: + $(MAKE) -f objects/CMakeFiles/ringsautomos_app.dir/build.make objects/CMakeFiles/ringsautomos_app.dir/build +.PHONY : ringsautomos_app/fast + +#============================================================================= +# Target rules for targets named raw2isis_app + +# Build rule for target. +raw2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 raw2isis_app +.PHONY : raw2isis_app + +# fast build rule for target. +raw2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/raw2isis_app.dir/build.make objects/CMakeFiles/raw2isis_app.dir/build +.PHONY : raw2isis_app/fast + +#============================================================================= +# Target rules for targets named autoseed_app + +# Build rule for target. +autoseed_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 autoseed_app +.PHONY : autoseed_app + +# fast build rule for target. +autoseed_app/fast: + $(MAKE) -f objects/CMakeFiles/autoseed_app.dir/build.make objects/CMakeFiles/autoseed_app.dir/build +.PHONY : autoseed_app/fast + +#============================================================================= +# Target rules for targets named pixel2map_app + +# Build rule for target. +pixel2map_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pixel2map_app +.PHONY : pixel2map_app + +# fast build rule for target. +pixel2map_app/fast: + $(MAKE) -f objects/CMakeFiles/pixel2map_app.dir/build.make objects/CMakeFiles/pixel2map_app.dir/build +.PHONY : pixel2map_app/fast + +#============================================================================= +# Target rules for targets named thmproc_app + +# Build rule for target. +thmproc_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thmproc_app +.PHONY : thmproc_app + +# fast build rule for target. +thmproc_app/fast: + $(MAKE) -f objects/CMakeFiles/thmproc_app.dir/build.make objects/CMakeFiles/thmproc_app.dir/build +.PHONY : thmproc_app/fast + +#============================================================================= +# Target rules for targets named photomet_app + +# Build rule for target. +photomet_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 photomet_app +.PHONY : photomet_app + +# fast build rule for target. +photomet_app/fast: + $(MAKE) -f objects/CMakeFiles/photomet_app.dir/build.make objects/CMakeFiles/photomet_app.dir/build +.PHONY : photomet_app/fast + +#============================================================================= +# Target rules for targets named clemnirclean_app + +# Build rule for target. +clemnirclean_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clemnirclean_app +.PHONY : clemnirclean_app + +# fast build rule for target. +clemnirclean_app/fast: + $(MAKE) -f objects/CMakeFiles/clemnirclean_app.dir/build.make objects/CMakeFiles/clemnirclean_app.dir/build +.PHONY : clemnirclean_app/fast + +#============================================================================= +# Target rules for targets named photemplate_app + +# Build rule for target. +photemplate_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 photemplate_app +.PHONY : photemplate_app + +# fast build rule for target. +photemplate_app/fast: + $(MAKE) -f objects/CMakeFiles/photemplate_app.dir/build.make objects/CMakeFiles/photemplate_app.dir/build +.PHONY : photemplate_app/fast + +#============================================================================= +# Target rules for targets named phohillier_app + +# Build rule for target. +phohillier_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 phohillier_app +.PHONY : phohillier_app + +# fast build rule for target. +phohillier_app/fast: + $(MAKE) -f objects/CMakeFiles/phohillier_app.dir/build.make objects/CMakeFiles/phohillier_app.dir/build +.PHONY : phohillier_app/fast + +#============================================================================= +# Target rules for targets named thm2isis_app + +# Build rule for target. +thm2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thm2isis_app +.PHONY : thm2isis_app + +# fast build rule for target. +thm2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/thm2isis_app.dir/build.make objects/CMakeFiles/thm2isis_app.dir/build +.PHONY : thm2isis_app/fast + +#============================================================================= +# Target rules for targets named phoempglobal_app + +# Build rule for target. +phoempglobal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 phoempglobal_app +.PHONY : phoempglobal_app + +# fast build rule for target. +phoempglobal_app/fast: + $(MAKE) -f objects/CMakeFiles/phoempglobal_app.dir/build.make objects/CMakeFiles/phoempglobal_app.dir/build +.PHONY : phoempglobal_app/fast + +#============================================================================= +# Target rules for targets named viknobutter_app + +# Build rule for target. +viknobutter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 viknobutter_app +.PHONY : viknobutter_app + +# fast build rule for target. +viknobutter_app/fast: + $(MAKE) -f objects/CMakeFiles/viknobutter_app.dir/build.make objects/CMakeFiles/viknobutter_app.dir/build +.PHONY : viknobutter_app/fast + +#============================================================================= +# Target rules for targets named phocube_app + +# Build rule for target. +phocube_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 phocube_app +.PHONY : phocube_app + +# fast build rule for target. +phocube_app/fast: + $(MAKE) -f objects/CMakeFiles/phocube_app.dir/build.make objects/CMakeFiles/phocube_app.dir/build +.PHONY : phocube_app/fast + +#============================================================================= +# Target rules for targets named pca_app + +# Build rule for target. +pca_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pca_app +.PHONY : pca_app + +# fast build rule for target. +pca_app/fast: + $(MAKE) -f objects/CMakeFiles/pca_app.dir/build.make objects/CMakeFiles/pca_app.dir/build +.PHONY : pca_app/fast + +#============================================================================= +# Target rules for targets named pad_app + +# Build rule for target. +pad_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pad_app +.PHONY : pad_app + +# fast build rule for target. +pad_app/fast: + $(MAKE) -f objects/CMakeFiles/pad_app.dir/build.make objects/CMakeFiles/pad_app.dir/build +.PHONY : pad_app/fast + +#============================================================================= +# Target rules for targets named outline_app + +# Build rule for target. +outline_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 outline_app +.PHONY : outline_app + +# fast build rule for target. +outline_app/fast: + $(MAKE) -f objects/CMakeFiles/outline_app.dir/build.make objects/CMakeFiles/outline_app.dir/build +.PHONY : outline_app/fast + +#============================================================================= +# Target rules for targets named cneteditor_app + +# Build rule for target. +cneteditor_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cneteditor_app +.PHONY : cneteditor_app + +# fast build rule for target. +cneteditor_app/fast: + $(MAKE) -f objects/CMakeFiles/cneteditor_app.dir/build.make objects/CMakeFiles/cneteditor_app.dir/build +.PHONY : cneteditor_app/fast + +#============================================================================= +# Target rules for targets named noseam_app + +# Build rule for target. +noseam_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 noseam_app +.PHONY : noseam_app + +# fast build rule for target. +noseam_app/fast: + $(MAKE) -f objects/CMakeFiles/noseam_app.dir/build.make objects/CMakeFiles/noseam_app.dir/build +.PHONY : noseam_app/fast + +#============================================================================= +# Target rules for targets named mocevenodd_app + +# Build rule for target. +mocevenodd_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mocevenodd_app +.PHONY : mocevenodd_app + +# fast build rule for target. +mocevenodd_app/fast: + $(MAKE) -f objects/CMakeFiles/mocevenodd_app.dir/build.make objects/CMakeFiles/mocevenodd_app.dir/build +.PHONY : mocevenodd_app/fast + +#============================================================================= +# Target rules for targets named mosrange_app + +# Build rule for target. +mosrange_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mosrange_app +.PHONY : mosrange_app + +# fast build rule for target. +mosrange_app/fast: + $(MAKE) -f objects/CMakeFiles/mosrange_app.dir/build.make objects/CMakeFiles/mosrange_app.dir/build +.PHONY : mosrange_app/fast + +#============================================================================= +# Target rules for targets named mode_app + +# Build rule for target. +mode_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mode_app +.PHONY : mode_app + +# fast build rule for target. +mode_app/fast: + $(MAKE) -f objects/CMakeFiles/mode_app.dir/build.make objects/CMakeFiles/mode_app.dir/build +.PHONY : mode_app/fast + +#============================================================================= +# Target rules for targets named minmax_app + +# Build rule for target. +minmax_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 minmax_app +.PHONY : minmax_app + +# fast build rule for target. +minmax_app/fast: + $(MAKE) -f objects/CMakeFiles/minmax_app.dir/build.make objects/CMakeFiles/minmax_app.dir/build +.PHONY : minmax_app/fast + +#============================================================================= +# Target rules for targets named median_app + +# Build rule for target. +median_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 median_app +.PHONY : median_app + +# fast build rule for target. +median_app/fast: + $(MAKE) -f objects/CMakeFiles/median_app.dir/build.make objects/CMakeFiles/median_app.dir/build +.PHONY : median_app/fast + +#============================================================================= +# Target rules for targets named maptrim_app + +# Build rule for target. +maptrim_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 maptrim_app +.PHONY : maptrim_app + +# fast build rule for target. +maptrim_app/fast: + $(MAKE) -f objects/CMakeFiles/maptrim_app.dir/build.make objects/CMakeFiles/maptrim_app.dir/build +.PHONY : maptrim_app/fast + +#============================================================================= +# Target rules for targets named mappt_app + +# Build rule for target. +mappt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mappt_app +.PHONY : mappt_app + +# fast build rule for target. +mappt_app/fast: + $(MAKE) -f objects/CMakeFiles/mappt_app.dir/build.make objects/CMakeFiles/mappt_app.dir/build +.PHONY : mappt_app/fast + +#============================================================================= +# Target rules for targets named mapmos_app + +# Build rule for target. +mapmos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mapmos_app +.PHONY : mapmos_app + +# fast build rule for target. +mapmos_app/fast: + $(MAKE) -f objects/CMakeFiles/mapmos_app.dir/build.make objects/CMakeFiles/mapmos_app.dir/build +.PHONY : mapmos_app/fast + +#============================================================================= +# Target rules for targets named socetframesettings_app + +# Build rule for target. +socetframesettings_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 socetframesettings_app +.PHONY : socetframesettings_app + +# fast build rule for target. +socetframesettings_app/fast: + $(MAKE) -f objects/CMakeFiles/socetframesettings_app.dir/build.make objects/CMakeFiles/socetframesettings_app.dir/build +.PHONY : socetframesettings_app/fast + +#============================================================================= +# Target rules for targets named apollo_unit_test_ApolloMetricCamera + +# Build rule for target. +apollo_unit_test_ApolloMetricCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_ApolloMetricCamera +.PHONY : apollo_unit_test_ApolloMetricCamera + +# fast build rule for target. +apollo_unit_test_ApolloMetricCamera/fast: + $(MAKE) -f objects/CMakeFiles/apollo_unit_test_ApolloMetricCamera.dir/build.make objects/CMakeFiles/apollo_unit_test_ApolloMetricCamera.dir/build +.PHONY : apollo_unit_test_ApolloMetricCamera/fast + +#============================================================================= +# Target rules for targets named maplab_app + +# Build rule for target. +maplab_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 maplab_app +.PHONY : maplab_app + +# fast build rule for target. +maplab_app/fast: + $(MAKE) -f objects/CMakeFiles/maplab_app.dir/build.make objects/CMakeFiles/maplab_app.dir/build +.PHONY : maplab_app/fast + +#============================================================================= +# Target rules for targets named amicacal_app + +# Build rule for target. +amicacal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 amicacal_app +.PHONY : amicacal_app + +# fast build rule for target. +amicacal_app/fast: + $(MAKE) -f objects/CMakeFiles/amicacal_app.dir/build.make objects/CMakeFiles/amicacal_app.dir/build +.PHONY : amicacal_app/fast + +#============================================================================= +# Target rules for targets named map2map_app + +# Build rule for target. +map2map_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 map2map_app +.PHONY : map2map_app + +# fast build rule for target. +map2map_app/fast: + $(MAKE) -f objects/CMakeFiles/map2map_app.dir/build.make objects/CMakeFiles/map2map_app.dir/build +.PHONY : map2map_app/fast + +#============================================================================= +# Target rules for targets named hiequal_app + +# Build rule for target. +hiequal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hiequal_app +.PHONY : hiequal_app + +# fast build rule for target. +hiequal_app/fast: + $(MAKE) -f objects/CMakeFiles/hiequal_app.dir/build.make objects/CMakeFiles/hiequal_app.dir/build +.PHONY : hiequal_app/fast + +#============================================================================= +# Target rules for targets named map2cam_app + +# Build rule for target. +map2cam_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 map2cam_app +.PHONY : map2cam_app + +# fast build rule for target. +map2cam_app/fast: + $(MAKE) -f objects/CMakeFiles/map2cam_app.dir/build.make objects/CMakeFiles/map2cam_app.dir/build +.PHONY : map2cam_app/fast + +#============================================================================= +# Target rules for targets named lowpass_app + +# Build rule for target. +lowpass_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lowpass_app +.PHONY : lowpass_app + +# fast build rule for target. +lowpass_app/fast: + $(MAKE) -f objects/CMakeFiles/lowpass_app.dir/build.make objects/CMakeFiles/lowpass_app.dir/build +.PHONY : lowpass_app/fast + +#============================================================================= +# Target rules for targets named lineeq_app + +# Build rule for target. +lineeq_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lineeq_app +.PHONY : lineeq_app + +# fast build rule for target. +lineeq_app/fast: + $(MAKE) -f objects/CMakeFiles/lineeq_app.dir/build.make objects/CMakeFiles/lineeq_app.dir/build +.PHONY : lineeq_app/fast + +#============================================================================= +# Target rules for targets named kernfilter_app + +# Build rule for target. +kernfilter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kernfilter_app +.PHONY : kernfilter_app + +# fast build rule for target. +kernfilter_app/fast: + $(MAKE) -f objects/CMakeFiles/kernfilter_app.dir/build.make objects/CMakeFiles/kernfilter_app.dir/build +.PHONY : kernfilter_app/fast + +#============================================================================= +# Target rules for targets named isisui_app + +# Build rule for target. +isisui_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isisui_app +.PHONY : isisui_app + +# fast build rule for target. +isisui_app/fast: + $(MAKE) -f objects/CMakeFiles/isisui_app.dir/build.make objects/CMakeFiles/isisui_app.dir/build +.PHONY : isisui_app/fast + +#============================================================================= +# Target rules for targets named isisminer_app + +# Build rule for target. +isisminer_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isisminer_app +.PHONY : isisminer_app + +# fast build rule for target. +isisminer_app/fast: + $(MAKE) -f objects/CMakeFiles/isisminer_app.dir/build.make objects/CMakeFiles/isisminer_app.dir/build +.PHONY : isisminer_app/fast + +#============================================================================= +# Target rules for targets named interestcube_app + +# Build rule for target. +interestcube_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 interestcube_app +.PHONY : interestcube_app + +# fast build rule for target. +interestcube_app/fast: + $(MAKE) -f objects/CMakeFiles/interestcube_app.dir/build.make objects/CMakeFiles/interestcube_app.dir/build +.PHONY : interestcube_app/fast + +#============================================================================= +# Target rules for targets named CTXCamera + +# Build rule for target. +CTXCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 CTXCamera +.PHONY : CTXCamera + +# fast build rule for target. +CTXCamera/fast: + $(MAKE) -f objects/CMakeFiles/CTXCamera.dir/build.make objects/CMakeFiles/CTXCamera.dir/build +.PHONY : CTXCamera/fast + +#============================================================================= +# Target rules for targets named ifft_app + +# Build rule for target. +ifft_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ifft_app +.PHONY : ifft_app + +# fast build rule for target. +ifft_app/fast: + $(MAKE) -f objects/CMakeFiles/ifft_app.dir/build.make objects/CMakeFiles/ifft_app.dir/build +.PHONY : ifft_app/fast + +#============================================================================= +# Target rules for targets named hifurrows_app + +# Build rule for target. +hifurrows_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hifurrows_app +.PHONY : hifurrows_app + +# fast build rule for target. +hifurrows_app/fast: + $(MAKE) -f objects/CMakeFiles/hifurrows_app.dir/build.make objects/CMakeFiles/hifurrows_app.dir/build +.PHONY : hifurrows_app/fast + +#============================================================================= +# Target rules for targets named histmatch_app + +# Build rule for target. +histmatch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 histmatch_app +.PHONY : histmatch_app + +# fast build rule for target. +histmatch_app/fast: + $(MAKE) -f objects/CMakeFiles/histmatch_app.dir/build.make objects/CMakeFiles/histmatch_app.dir/build +.PHONY : histmatch_app/fast + +#============================================================================= +# Target rules for targets named highpass_app + +# Build rule for target. +highpass_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 highpass_app +.PHONY : highpass_app + +# fast build rule for target. +highpass_app/fast: + $(MAKE) -f objects/CMakeFiles/highpass_app.dir/build.make objects/CMakeFiles/highpass_app.dir/build +.PHONY : highpass_app/fast + +#============================================================================= +# Target rules for targets named mro_unit_test_HiLab + +# Build rule for target. +mro_unit_test_HiLab: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_HiLab +.PHONY : mro_unit_test_HiLab + +# fast build rule for target. +mro_unit_test_HiLab/fast: + $(MAKE) -f objects/CMakeFiles/mro_unit_test_HiLab.dir/build.make objects/CMakeFiles/mro_unit_test_HiLab.dir/build +.PHONY : mro_unit_test_HiLab/fast + +#============================================================================= +# Target rules for targets named grid_app + +# Build rule for target. +grid_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 grid_app +.PHONY : grid_app + +# fast build rule for target. +grid_app/fast: + $(MAKE) -f objects/CMakeFiles/grid_app.dir/build.make objects/CMakeFiles/grid_app.dir/build +.PHONY : grid_app/fast + +#============================================================================= +# Target rules for targets named greyscale_app + +# Build rule for target. +greyscale_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 greyscale_app +.PHONY : greyscale_app + +# fast build rule for target. +greyscale_app/fast: + $(MAKE) -f objects/CMakeFiles/greyscale_app.dir/build.make objects/CMakeFiles/greyscale_app.dir/build +.PHONY : greyscale_app/fast + +#============================================================================= +# Target rules for targets named IssWACamera + +# Build rule for target. +IssWACamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 IssWACamera +.PHONY : IssWACamera + +# fast build rule for target. +IssWACamera/fast: + $(MAKE) -f objects/CMakeFiles/IssWACamera.dir/build.make objects/CMakeFiles/IssWACamera.dir/build +.PHONY : IssWACamera/fast + +#============================================================================= +# Target rules for targets named isis2std_app + +# Build rule for target. +isis2std_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis2std_app +.PHONY : isis2std_app + +# fast build rule for target. +isis2std_app/fast: + $(MAKE) -f objects/CMakeFiles/isis2std_app.dir/build.make objects/CMakeFiles/isis2std_app.dir/build +.PHONY : isis2std_app/fast + +#============================================================================= +# Target rules for targets named gradient_app + +# Build rule for target. +gradient_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gradient_app +.PHONY : gradient_app + +# fast build rule for target. +gradient_app/fast: + $(MAKE) -f objects/CMakeFiles/gradient_app.dir/build.make objects/CMakeFiles/gradient_app.dir/build +.PHONY : gradient_app/fast + +#============================================================================= +# Target rules for targets named getsn_app + +# Build rule for target. +getsn_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 getsn_app +.PHONY : getsn_app + +# fast build rule for target. +getsn_app/fast: + $(MAKE) -f objects/CMakeFiles/getsn_app.dir/build.make objects/CMakeFiles/getsn_app.dir/build +.PHONY : getsn_app/fast + +#============================================================================= +# Target rules for targets named getkey_app + +# Build rule for target. +getkey_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 getkey_app +.PHONY : getkey_app + +# fast build rule for target. +getkey_app/fast: + $(MAKE) -f objects/CMakeFiles/getkey_app.dir/build.make objects/CMakeFiles/getkey_app.dir/build +.PHONY : getkey_app/fast + +#============================================================================= +# Target rules for targets named footprintmerge_app + +# Build rule for target. +footprintmerge_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 footprintmerge_app +.PHONY : footprintmerge_app + +# fast build rule for target. +footprintmerge_app/fast: + $(MAKE) -f objects/CMakeFiles/footprintmerge_app.dir/build.make objects/CMakeFiles/footprintmerge_app.dir/build +.PHONY : footprintmerge_app/fast + +#============================================================================= +# Target rules for targets named thmdriftcor_app + +# Build rule for target. +thmdriftcor_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thmdriftcor_app +.PHONY : thmdriftcor_app + +# fast build rule for target. +thmdriftcor_app/fast: + $(MAKE) -f objects/CMakeFiles/thmdriftcor_app.dir/build.make objects/CMakeFiles/thmdriftcor_app.dir/build +.PHONY : thmdriftcor_app/fast + +#============================================================================= +# Target rules for targets named lronaccal_app + +# Build rule for target. +lronaccal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lronaccal_app +.PHONY : lronaccal_app + +# fast build rule for target. +lronaccal_app/fast: + $(MAKE) -f objects/CMakeFiles/lronaccal_app.dir/build.make objects/CMakeFiles/lronaccal_app.dir/build +.PHONY : lronaccal_app/fast + +#============================================================================= +# Target rules for targets named footprintinit_app + +# Build rule for target. +footprintinit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 footprintinit_app +.PHONY : footprintinit_app + +# fast build rule for target. +footprintinit_app/fast: + $(MAKE) -f objects/CMakeFiles/footprintinit_app.dir/build.make objects/CMakeFiles/footprintinit_app.dir/build +.PHONY : footprintinit_app/fast + +#============================================================================= +# Target rules for targets named HiresCamera + +# Build rule for target. +HiresCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HiresCamera +.PHONY : HiresCamera + +# fast build rule for target. +HiresCamera/fast: + $(MAKE) -f objects/CMakeFiles/HiresCamera.dir/build.make objects/CMakeFiles/HiresCamera.dir/build +.PHONY : HiresCamera/fast + +#============================================================================= +# Target rules for targets named fits2isis_app + +# Build rule for target. +fits2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fits2isis_app +.PHONY : fits2isis_app + +# fast build rule for target. +fits2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/fits2isis_app.dir/build.make objects/CMakeFiles/fits2isis_app.dir/build +.PHONY : fits2isis_app/fast + +#============================================================================= +# Target rules for targets named findimageoverlaps_app + +# Build rule for target. +findimageoverlaps_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 findimageoverlaps_app +.PHONY : findimageoverlaps_app + +# fast build rule for target. +findimageoverlaps_app/fast: + $(MAKE) -f objects/CMakeFiles/findimageoverlaps_app.dir/build.make objects/CMakeFiles/findimageoverlaps_app.dir/build +.PHONY : findimageoverlaps_app/fast + +#============================================================================= +# Target rules for targets named findgaps_app + +# Build rule for target. +findgaps_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 findgaps_app +.PHONY : findgaps_app + +# fast build rule for target. +findgaps_app/fast: + $(MAKE) -f objects/CMakeFiles/findgaps_app.dir/build.make objects/CMakeFiles/findgaps_app.dir/build +.PHONY : findgaps_app/fast + +#============================================================================= +# Target rules for targets named errors_app + +# Build rule for target. +errors_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 errors_app +.PHONY : errors_app + +# fast build rule for target. +errors_app/fast: + $(MAKE) -f objects/CMakeFiles/errors_app.dir/build.make objects/CMakeFiles/errors_app.dir/build +.PHONY : errors_app/fast + +#============================================================================= +# Target rules for targets named higlob_app + +# Build rule for target. +higlob_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 higlob_app +.PHONY : higlob_app + +# fast build rule for target. +higlob_app/fast: + $(MAKE) -f objects/CMakeFiles/higlob_app.dir/build.make objects/CMakeFiles/higlob_app.dir/build +.PHONY : higlob_app/fast + +#============================================================================= +# Target rules for targets named skyrange_app + +# Build rule for target. +skyrange_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 skyrange_app +.PHONY : skyrange_app + +# fast build rule for target. +skyrange_app/fast: + $(MAKE) -f objects/CMakeFiles/skyrange_app.dir/build.make objects/CMakeFiles/skyrange_app.dir/build +.PHONY : skyrange_app/fast + +#============================================================================= +# Target rules for targets named equalizer_app + +# Build rule for target. +equalizer_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 equalizer_app +.PHONY : equalizer_app + +# fast build rule for target. +equalizer_app/fast: + $(MAKE) -f objects/CMakeFiles/equalizer_app.dir/build.make objects/CMakeFiles/equalizer_app.dir/build +.PHONY : equalizer_app/fast + +#============================================================================= +# Target rules for targets named edrget_app + +# Build rule for target. +edrget_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 edrget_app +.PHONY : edrget_app + +# fast build rule for target. +edrget_app/fast: + $(MAKE) -f objects/CMakeFiles/edrget_app.dir/build.make objects/CMakeFiles/edrget_app.dir/build +.PHONY : edrget_app/fast + +#============================================================================= +# Target rules for targets named VikingCamera + +# Build rule for target. +VikingCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 VikingCamera +.PHONY : VikingCamera + +# fast build rule for target. +VikingCamera/fast: + $(MAKE) -f objects/CMakeFiles/VikingCamera.dir/build.make objects/CMakeFiles/VikingCamera.dir/build +.PHONY : VikingCamera/fast + +#============================================================================= +# Target rules for targets named phoemplocal_app + +# Build rule for target. +phoemplocal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 phoemplocal_app +.PHONY : phoemplocal_app + +# fast build rule for target. +phoemplocal_app/fast: + $(MAKE) -f objects/CMakeFiles/phoemplocal_app.dir/build.make objects/CMakeFiles/phoemplocal_app.dir/build +.PHONY : phoemplocal_app/fast + +#============================================================================= +# Target rules for targets named editlab_app + +# Build rule for target. +editlab_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 editlab_app +.PHONY : editlab_app + +# fast build rule for target. +editlab_app/fast: + $(MAKE) -f objects/CMakeFiles/editlab_app.dir/build.make objects/CMakeFiles/editlab_app.dir/build +.PHONY : editlab_app/fast + +#============================================================================= +# Target rules for targets named poly_app + +# Build rule for target. +poly_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 poly_app +.PHONY : poly_app + +# fast build rule for target. +poly_app/fast: + $(MAKE) -f objects/CMakeFiles/poly_app.dir/build.make objects/CMakeFiles/poly_app.dir/build +.PHONY : poly_app/fast + +#============================================================================= +# Target rules for targets named dstripe_app + +# Build rule for target. +dstripe_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dstripe_app +.PHONY : dstripe_app + +# fast build rule for target. +dstripe_app/fast: + $(MAKE) -f objects/CMakeFiles/dstripe_app.dir/build.make objects/CMakeFiles/dstripe_app.dir/build +.PHONY : dstripe_app/fast + +#============================================================================= +# Target rules for targets named dsk2isis_app + +# Build rule for target. +dsk2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dsk2isis_app +.PHONY : dsk2isis_app + +# fast build rule for target. +dsk2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/dsk2isis_app.dir/build.make objects/CMakeFiles/dsk2isis_app.dir/build +.PHONY : dsk2isis_app/fast + +#============================================================================= +# Target rules for targets named divfilter_app + +# Build rule for target. +divfilter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 divfilter_app +.PHONY : divfilter_app + +# fast build rule for target. +divfilter_app/fast: + $(MAKE) -f objects/CMakeFiles/divfilter_app.dir/build.make objects/CMakeFiles/divfilter_app.dir/build +.PHONY : divfilter_app/fast + +#============================================================================= +# Target rules for targets named MdisCamera + +# Build rule for target. +MdisCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MdisCamera +.PHONY : MdisCamera + +# fast build rule for target. +MdisCamera/fast: + $(MAKE) -f objects/CMakeFiles/MdisCamera.dir/build.make objects/CMakeFiles/MdisCamera.dir/build +.PHONY : MdisCamera/fast + +#============================================================================= +# Target rules for targets named desmear_app + +# Build rule for target. +desmear_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 desmear_app +.PHONY : desmear_app + +# fast build rule for target. +desmear_app/fast: + $(MAKE) -f objects/CMakeFiles/desmear_app.dir/build.make objects/CMakeFiles/desmear_app.dir/build +.PHONY : desmear_app/fast + +#============================================================================= +# Target rules for targets named demprep_app + +# Build rule for target. +demprep_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 demprep_app +.PHONY : demprep_app + +# fast build rule for target. +demprep_app/fast: + $(MAKE) -f objects/CMakeFiles/demprep_app.dir/build.make objects/CMakeFiles/demprep_app.dir/build +.PHONY : demprep_app/fast + +#============================================================================= +# Target rules for targets named ddd2isis_app + +# Build rule for target. +ddd2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ddd2isis_app +.PHONY : ddd2isis_app + +# fast build rule for target. +ddd2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/ddd2isis_app.dir/build.make objects/CMakeFiles/ddd2isis_app.dir/build +.PHONY : ddd2isis_app/fast + +#============================================================================= +# Target rules for targets named cubeit_app + +# Build rule for target. +cubeit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cubeit_app +.PHONY : cubeit_app + +# fast build rule for target. +cubeit_app/fast: + $(MAKE) -f objects/CMakeFiles/cubeit_app.dir/build.make objects/CMakeFiles/cubeit_app.dir/build +.PHONY : cubeit_app/fast + +#============================================================================= +# Target rules for targets named cubeavg_app + +# Build rule for target. +cubeavg_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cubeavg_app +.PHONY : cubeavg_app + +# fast build rule for target. +cubeavg_app/fast: + $(MAKE) -f objects/CMakeFiles/cubeavg_app.dir/build.make objects/CMakeFiles/cubeavg_app.dir/build +.PHONY : cubeavg_app/fast + +#============================================================================= +# Target rules for targets named messckgen_app + +# Build rule for target. +messckgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 messckgen_app +.PHONY : messckgen_app + +# fast build rule for target. +messckgen_app/fast: + $(MAKE) -f objects/CMakeFiles/messckgen_app.dir/build.make objects/CMakeFiles/messckgen_app.dir/build +.PHONY : messckgen_app/fast + +#============================================================================= +# Target rules for targets named cropspecial_app + +# Build rule for target. +cropspecial_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cropspecial_app +.PHONY : cropspecial_app + +# fast build rule for target. +cropspecial_app/fast: + $(MAKE) -f objects/CMakeFiles/cropspecial_app.dir/build.make objects/CMakeFiles/cropspecial_app.dir/build +.PHONY : cropspecial_app/fast + +#============================================================================= +# Target rules for targets named KaguyaMiCamera + +# Build rule for target. +KaguyaMiCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 KaguyaMiCamera +.PHONY : KaguyaMiCamera + +# fast build rule for target. +KaguyaMiCamera/fast: + $(MAKE) -f objects/CMakeFiles/KaguyaMiCamera.dir/build.make objects/CMakeFiles/KaguyaMiCamera.dir/build +.PHONY : KaguyaMiCamera/fast + +#============================================================================= +# Target rules for targets named svfilter_app + +# Build rule for target. +svfilter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 svfilter_app +.PHONY : svfilter_app + +# fast build rule for target. +svfilter_app/fast: + $(MAKE) -f objects/CMakeFiles/svfilter_app.dir/build.make objects/CMakeFiles/svfilter_app.dir/build +.PHONY : svfilter_app/fast + +#============================================================================= +# Target rules for targets named crop_app + +# Build rule for target. +crop_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 crop_app +.PHONY : crop_app + +# fast build rule for target. +crop_app/fast: + $(MAKE) -f objects/CMakeFiles/crop_app.dir/build.make objects/CMakeFiles/crop_app.dir/build +.PHONY : crop_app/fast + +#============================================================================= +# Target rules for targets named copylabel_app + +# Build rule for target. +copylabel_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 copylabel_app +.PHONY : copylabel_app + +# fast build rule for target. +copylabel_app/fast: + $(MAKE) -f objects/CMakeFiles/copylabel_app.dir/build.make objects/CMakeFiles/copylabel_app.dir/build +.PHONY : copylabel_app/fast + +#============================================================================= +# Target rules for targets named circle_app + +# Build rule for target. +circle_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 circle_app +.PHONY : circle_app + +# fast build rule for target. +circle_app/fast: + $(MAKE) -f objects/CMakeFiles/circle_app.dir/build.make objects/CMakeFiles/circle_app.dir/build +.PHONY : circle_app/fast + +#============================================================================= +# Target rules for targets named catlab_app + +# Build rule for target. +catlab_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 catlab_app +.PHONY : catlab_app + +# fast build rule for target. +catlab_app/fast: + $(MAKE) -f objects/CMakeFiles/catlab_app.dir/build.make objects/CMakeFiles/catlab_app.dir/build +.PHONY : catlab_app/fast + +#============================================================================= +# Target rules for targets named camtrim_app + +# Build rule for target. +camtrim_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 camtrim_app +.PHONY : camtrim_app + +# fast build rule for target. +camtrim_app/fast: + $(MAKE) -f objects/CMakeFiles/camtrim_app.dir/build.make objects/CMakeFiles/camtrim_app.dir/build +.PHONY : camtrim_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MaximumCorrelation + +# Build rule for target. +isis3_unit_test_MaximumCorrelation: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MaximumCorrelation +.PHONY : isis3_unit_test_MaximumCorrelation + +# fast build rule for target. +isis3_unit_test_MaximumCorrelation/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MaximumCorrelation.dir/build.make objects/CMakeFiles/isis3_unit_test_MaximumCorrelation.dir/build +.PHONY : isis3_unit_test_MaximumCorrelation/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Gruen + +# Build rule for target. +isis3_unit_test_Gruen: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Gruen +.PHONY : isis3_unit_test_Gruen + +# fast build rule for target. +isis3_unit_test_Gruen/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Gruen.dir/build.make objects/CMakeFiles/isis3_unit_test_Gruen.dir/build +.PHONY : isis3_unit_test_Gruen/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LunarLambertMcEwen + +# Build rule for target. +isis3_unit_test_LunarLambertMcEwen: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarLambertMcEwen +.PHONY : isis3_unit_test_LunarLambertMcEwen + +# fast build rule for target. +isis3_unit_test_LunarLambertMcEwen/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarLambertMcEwen.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarLambertMcEwen.dir/build +.PHONY : isis3_unit_test_LunarLambertMcEwen/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Mixed + +# Build rule for target. +isis3_unit_test_Mixed: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Mixed +.PHONY : isis3_unit_test_Mixed + +# fast build rule for target. +isis3_unit_test_Mixed/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Mixed.dir/build.make objects/CMakeFiles/isis3_unit_test_Mixed.dir/build +.PHONY : isis3_unit_test_Mixed/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LunarLambertEmpirical + +# Build rule for target. +isis3_unit_test_LunarLambertEmpirical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarLambertEmpirical +.PHONY : isis3_unit_test_LunarLambertEmpirical + +# fast build rule for target. +isis3_unit_test_LunarLambertEmpirical/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarLambertEmpirical.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarLambertEmpirical.dir/build +.PHONY : isis3_unit_test_LunarLambertEmpirical/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PolygonSeederFactory + +# Build rule for target. +isis3_unit_test_PolygonSeederFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolygonSeederFactory +.PHONY : isis3_unit_test_PolygonSeederFactory + +# fast build rule for target. +isis3_unit_test_PolygonSeederFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolygonSeederFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_PolygonSeederFactory.dir/build +.PHONY : isis3_unit_test_PolygonSeederFactory/fast + +#============================================================================= +# Target rules for targets named HayabusaAmicaCamera + +# Build rule for target. +HayabusaAmicaCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HayabusaAmicaCamera +.PHONY : HayabusaAmicaCamera + +# fast build rule for target. +HayabusaAmicaCamera/fast: + $(MAKE) -f objects/CMakeFiles/HayabusaAmicaCamera.dir/build.make objects/CMakeFiles/HayabusaAmicaCamera.dir/build +.PHONY : HayabusaAmicaCamera/fast + +#============================================================================= +# Target rules for targets named deltack_app + +# Build rule for target. +deltack_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 deltack_app +.PHONY : deltack_app + +# fast build rule for target. +deltack_app/fast: + $(MAKE) -f objects/CMakeFiles/deltack_app.dir/build.make objects/CMakeFiles/deltack_app.dir/build +.PHONY : deltack_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Longitude + +# Build rule for target. +isis3_unit_test_Longitude: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Longitude +.PHONY : isis3_unit_test_Longitude + +# fast build rule for target. +isis3_unit_test_Longitude/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Longitude.dir/build.make objects/CMakeFiles/isis3_unit_test_Longitude.dir/build +.PHONY : isis3_unit_test_Longitude/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Matrix + +# Build rule for target. +isis3_unit_test_Matrix: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Matrix +.PHONY : isis3_unit_test_Matrix + +# fast build rule for target. +isis3_unit_test_Matrix/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Matrix.dir/build.make objects/CMakeFiles/isis3_unit_test_Matrix.dir/build +.PHONY : isis3_unit_test_Matrix/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CubeInfixToPostfix + +# Build rule for target. +isis3_unit_test_CubeInfixToPostfix: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeInfixToPostfix +.PHONY : isis3_unit_test_CubeInfixToPostfix + +# fast build rule for target. +isis3_unit_test_CubeInfixToPostfix/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeInfixToPostfix.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeInfixToPostfix.dir/build +.PHONY : isis3_unit_test_CubeInfixToPostfix/fast + +#============================================================================= +# Target rules for targets named qview_app + +# Build rule for target. +qview_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 qview_app +.PHONY : qview_app + +# fast build rule for target. +qview_app/fast: + $(MAKE) -f objects/CMakeFiles/qview_app.dir/build.make objects/CMakeFiles/qview_app.dir/build +.PHONY : qview_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LineEquation + +# Build rule for target. +isis3_unit_test_LineEquation: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineEquation +.PHONY : isis3_unit_test_LineEquation + +# fast build rule for target. +isis3_unit_test_LineEquation/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineEquation.dir/build.make objects/CMakeFiles/isis3_unit_test_LineEquation.dir/build +.PHONY : isis3_unit_test_LineEquation/fast + +#============================================================================= +# Target rules for targets named cosi_app + +# Build rule for target. +cosi_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cosi_app +.PHONY : cosi_app + +# fast build rule for target. +cosi_app/fast: + $(MAKE) -f objects/CMakeFiles/cosi_app.dir/build.make objects/CMakeFiles/cosi_app.dir/build +.PHONY : cosi_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LambertAzimuthalEqualArea + +# Build rule for target. +isis3_unit_test_LambertAzimuthalEqualArea: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LambertAzimuthalEqualArea +.PHONY : isis3_unit_test_LambertAzimuthalEqualArea + +# fast build rule for target. +isis3_unit_test_LambertAzimuthalEqualArea/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LambertAzimuthalEqualArea.dir/build.make objects/CMakeFiles/isis3_unit_test_LambertAzimuthalEqualArea.dir/build +.PHONY : isis3_unit_test_LambertAzimuthalEqualArea/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LineScanCameraSkyMap + +# Build rule for target. +isis3_unit_test_LineScanCameraSkyMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCameraSkyMap +.PHONY : isis3_unit_test_LineScanCameraSkyMap + +# fast build rule for target. +isis3_unit_test_LineScanCameraSkyMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCameraSkyMap.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCameraSkyMap.dir/build +.PHONY : isis3_unit_test_LineScanCameraSkyMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_JP2Importer + +# Build rule for target. +isis3_unit_test_JP2Importer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Importer +.PHONY : isis3_unit_test_JP2Importer + +# fast build rule for target. +isis3_unit_test_JP2Importer/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Importer.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Importer.dir/build +.PHONY : isis3_unit_test_JP2Importer/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlPointList + +# Build rule for target. +isis3_unit_test_ControlPointList: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlPointList +.PHONY : isis3_unit_test_ControlPointList + +# fast build rule for target. +isis3_unit_test_ControlPointList/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlPointList.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlPointList.dir/build +.PHONY : isis3_unit_test_ControlPointList/fast + +#============================================================================= +# Target rules for targets named mimap2isis_app + +# Build rule for target. +mimap2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mimap2isis_app +.PHONY : mimap2isis_app + +# fast build rule for target. +mimap2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mimap2isis_app.dir/build.make objects/CMakeFiles/mimap2isis_app.dir/build +.PHONY : mimap2isis_app/fast + +#============================================================================= +# Target rules for targets named kaguyami2isis_app + +# Build rule for target. +kaguyami2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kaguyami2isis_app +.PHONY : kaguyami2isis_app + +# fast build rule for target. +kaguyami2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/kaguyami2isis_app.dir/build.make objects/CMakeFiles/kaguyami2isis_app.dir/build +.PHONY : kaguyami2isis_app/fast + +#============================================================================= +# Target rules for targets named remrx_app + +# Build rule for target. +remrx_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 remrx_app +.PHONY : remrx_app + +# fast build rule for target. +remrx_app/fast: + $(MAKE) -f objects/CMakeFiles/remrx_app.dir/build.make objects/CMakeFiles/remrx_app.dir/build +.PHONY : remrx_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_JP2Exporter + +# Build rule for target. +isis3_unit_test_JP2Exporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Exporter +.PHONY : isis3_unit_test_JP2Exporter + +# fast build rule for target. +isis3_unit_test_JP2Exporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Exporter.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Exporter.dir/build +.PHONY : isis3_unit_test_JP2Exporter/fast + +#============================================================================= +# Target rules for targets named cnettable_app + +# Build rule for target. +cnettable_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnettable_app +.PHONY : cnettable_app + +# fast build rule for target. +cnettable_app/fast: + $(MAKE) -f objects/CMakeFiles/cnettable_app.dir/build.make objects/CMakeFiles/cnettable_app.dir/build +.PHONY : cnettable_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_JP2Error + +# Build rule for target. +isis3_unit_test_JP2Error: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Error +.PHONY : isis3_unit_test_JP2Error + +# fast build rule for target. +isis3_unit_test_JP2Error/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Error.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Error.dir/build +.PHONY : isis3_unit_test_JP2Error/fast + +#============================================================================= +# Target rules for targets named leisa2isis_app + +# Build rule for target. +leisa2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 leisa2isis_app +.PHONY : leisa2isis_app + +# fast build rule for target. +leisa2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/leisa2isis_app.dir/build.make objects/CMakeFiles/leisa2isis_app.dir/build +.PHONY : leisa2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Isis + +# Build rule for target. +isis3_unit_test_Isis: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Isis +.PHONY : isis3_unit_test_Isis + +# fast build rule for target. +isis3_unit_test_Isis/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Isis.dir/build.make objects/CMakeFiles/isis3_unit_test_Isis.dir/build +.PHONY : isis3_unit_test_Isis/fast + +#============================================================================= +# Target rules for targets named spkwriter_app + +# Build rule for target. +spkwriter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spkwriter_app +.PHONY : spkwriter_app + +# fast build rule for target. +spkwriter_app/fast: + $(MAKE) -f objects/CMakeFiles/spkwriter_app.dir/build.make objects/CMakeFiles/spkwriter_app.dir/build +.PHONY : spkwriter_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MinnaertEmpirical + +# Build rule for target. +isis3_unit_test_MinnaertEmpirical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MinnaertEmpirical +.PHONY : isis3_unit_test_MinnaertEmpirical + +# fast build rule for target. +isis3_unit_test_MinnaertEmpirical/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MinnaertEmpirical.dir/build.make objects/CMakeFiles/isis3_unit_test_MinnaertEmpirical.dir/build +.PHONY : isis3_unit_test_MinnaertEmpirical/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Intercept + +# Build rule for target. +isis3_unit_test_Intercept: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Intercept +.PHONY : isis3_unit_test_Intercept + +# fast build rule for target. +isis3_unit_test_Intercept/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Intercept.dir/build.make objects/CMakeFiles/isis3_unit_test_Intercept.dir/build +.PHONY : isis3_unit_test_Intercept/fast + +#============================================================================= +# Target rules for targets named ringsmappt_app + +# Build rule for target. +ringsmappt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ringsmappt_app +.PHONY : ringsmappt_app + +# fast build rule for target. +ringsmappt_app/fast: + $(MAKE) -f objects/CMakeFiles/ringsmappt_app.dir/build.make objects/CMakeFiles/ringsmappt_app.dir/build +.PHONY : ringsmappt_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BandManager + +# Build rule for target. +isis3_unit_test_BandManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BandManager +.PHONY : isis3_unit_test_BandManager + +# fast build rule for target. +isis3_unit_test_BandManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BandManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BandManager.dir/build +.PHONY : isis3_unit_test_BandManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_InfixToPostfix + +# Build rule for target. +isis3_unit_test_InfixToPostfix: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InfixToPostfix +.PHONY : isis3_unit_test_InfixToPostfix + +# fast build rule for target. +isis3_unit_test_InfixToPostfix/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InfixToPostfix.dir/build.make objects/CMakeFiles/isis3_unit_test_InfixToPostfix.dir/build +.PHONY : isis3_unit_test_InfixToPostfix/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Planar + +# Build rule for target. +isis3_unit_test_Planar: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Planar +.PHONY : isis3_unit_test_Planar + +# fast build rule for target. +isis3_unit_test_Planar/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Planar.dir/build.make objects/CMakeFiles/isis3_unit_test_Planar.dir/build +.PHONY : isis3_unit_test_Planar/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ImportPdsTable + +# Build rule for target. +isis3_unit_test_ImportPdsTable: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImportPdsTable +.PHONY : isis3_unit_test_ImportPdsTable + +# fast build rule for target. +isis3_unit_test_ImportPdsTable/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImportPdsTable.dir/build.make objects/CMakeFiles/isis3_unit_test_ImportPdsTable.dir/build +.PHONY : isis3_unit_test_ImportPdsTable/fast + +#============================================================================= +# Target rules for targets named mro_unit_test_CrismCamera + +# Build rule for target. +mro_unit_test_CrismCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_CrismCamera +.PHONY : mro_unit_test_CrismCamera + +# fast build rule for target. +mro_unit_test_CrismCamera/fast: + $(MAKE) -f objects/CMakeFiles/mro_unit_test_CrismCamera.dir/build.make objects/CMakeFiles/mro_unit_test_CrismCamera.dir/build +.PHONY : mro_unit_test_CrismCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Resource + +# Build rule for target. +isis3_unit_test_Resource: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Resource +.PHONY : isis3_unit_test_Resource + +# fast build rule for target. +isis3_unit_test_Resource/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Resource.dir/build.make objects/CMakeFiles/isis3_unit_test_Resource.dir/build +.PHONY : isis3_unit_test_Resource/fast + +#============================================================================= +# Target rules for targets named UvvisCamera + +# Build rule for target. +UvvisCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 UvvisCamera +.PHONY : UvvisCamera + +# fast build rule for target. +UvvisCamera/fast: + $(MAKE) -f objects/CMakeFiles/UvvisCamera.dir/build.make objects/CMakeFiles/UvvisCamera.dir/build +.PHONY : UvvisCamera/fast + +#============================================================================= +# Target rules for targets named cnetdiff_app + +# Build rule for target. +cnetdiff_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetdiff_app +.PHONY : cnetdiff_app + +# fast build rule for target. +cnetdiff_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetdiff_app.dir/build.make objects/CMakeFiles/cnetdiff_app.dir/build +.PHONY : cnetdiff_app/fast + +#============================================================================= +# Target rules for targets named cubeatt_app + +# Build rule for target. +cubeatt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cubeatt_app +.PHONY : cubeatt_app + +# fast build rule for target. +cubeatt_app/fast: + $(MAKE) -f objects/CMakeFiles/cubeatt_app.dir/build.make objects/CMakeFiles/cubeatt_app.dir/build +.PHONY : cubeatt_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ImageImporter + +# Build rule for target. +isis3_unit_test_ImageImporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageImporter +.PHONY : isis3_unit_test_ImageImporter + +# fast build rule for target. +isis3_unit_test_ImageImporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageImporter.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageImporter.dir/build +.PHONY : isis3_unit_test_ImageImporter/fast + +#============================================================================= +# Target rules for targets named makecube_app + +# Build rule for target. +makecube_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 makecube_app +.PHONY : makecube_app + +# fast build rule for target. +makecube_app/fast: + $(MAKE) -f objects/CMakeFiles/makecube_app.dir/build.make objects/CMakeFiles/makecube_app.dir/build +.PHONY : makecube_app/fast + +#============================================================================= +# Target rules for targets named isis2fits_app + +# Build rule for target. +isis2fits_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis2fits_app +.PHONY : isis2fits_app + +# fast build rule for target. +isis2fits_app/fast: + $(MAKE) -f objects/CMakeFiles/isis2fits_app.dir/build.make objects/CMakeFiles/isis2fits_app.dir/build +.PHONY : isis2fits_app/fast + +#============================================================================= +# Target rules for targets named Mercator + +# Build rule for target. +Mercator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Mercator +.PHONY : Mercator + +# fast build rule for target. +Mercator/fast: + $(MAKE) -f objects/CMakeFiles/Mercator.dir/build.make objects/CMakeFiles/Mercator.dir/build +.PHONY : Mercator/fast + +#============================================================================= +# Target rules for targets named UpturnedEllipsoidTransverseAzimuthal + +# Build rule for target. +UpturnedEllipsoidTransverseAzimuthal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 UpturnedEllipsoidTransverseAzimuthal +.PHONY : UpturnedEllipsoidTransverseAzimuthal + +# fast build rule for target. +UpturnedEllipsoidTransverseAzimuthal/fast: + $(MAKE) -f objects/CMakeFiles/UpturnedEllipsoidTransverseAzimuthal.dir/build.make objects/CMakeFiles/UpturnedEllipsoidTransverseAzimuthal.dir/build +.PHONY : UpturnedEllipsoidTransverseAzimuthal/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SerialNumberList + +# Build rule for target. +isis3_unit_test_SerialNumberList: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SerialNumberList +.PHONY : isis3_unit_test_SerialNumberList + +# fast build rule for target. +isis3_unit_test_SerialNumberList/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SerialNumberList.dir/build.make objects/CMakeFiles/isis3_unit_test_SerialNumberList.dir/build +.PHONY : isis3_unit_test_SerialNumberList/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ImageExporter + +# Build rule for target. +isis3_unit_test_ImageExporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageExporter +.PHONY : isis3_unit_test_ImageExporter + +# fast build rule for target. +isis3_unit_test_ImageExporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageExporter.dir/build +.PHONY : isis3_unit_test_ImageExporter/fast + +#============================================================================= +# Target rules for targets named DawnFcCamera + +# Build rule for target. +DawnFcCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 DawnFcCamera +.PHONY : DawnFcCamera + +# fast build rule for target. +DawnFcCamera/fast: + $(MAKE) -f objects/CMakeFiles/DawnFcCamera.dir/build.make objects/CMakeFiles/DawnFcCamera.dir/build +.PHONY : DawnFcCamera/fast + +#============================================================================= +# Target rules for targets named apollocal_app + +# Build rule for target. +apollocal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollocal_app +.PHONY : apollocal_app + +# fast build rule for target. +apollocal_app/fast: + $(MAKE) -f objects/CMakeFiles/apollocal_app.dir/build.make objects/CMakeFiles/apollocal_app.dir/build +.PHONY : apollocal_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ImageOverlapSet + +# Build rule for target. +isis3_unit_test_ImageOverlapSet: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageOverlapSet +.PHONY : isis3_unit_test_ImageOverlapSet + +# fast build rule for target. +isis3_unit_test_ImageOverlapSet/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageOverlapSet.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageOverlapSet.dir/build +.PHONY : isis3_unit_test_ImageOverlapSet/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal + +# Build rule for target. +isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal +.PHONY : isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal + +# fast build rule for target. +isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal.dir/build.make objects/CMakeFiles/isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal.dir/build +.PHONY : isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal/fast + +#============================================================================= +# Target rules for targets named hirdr2isis_app + +# Build rule for target. +hirdr2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hirdr2isis_app +.PHONY : hirdr2isis_app + +# fast build rule for target. +hirdr2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/hirdr2isis_app.dir/build.make objects/CMakeFiles/hirdr2isis_app.dir/build +.PHONY : hirdr2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_IdealCamera + +# Build rule for target. +isis3_unit_test_IdealCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IdealCamera +.PHONY : isis3_unit_test_IdealCamera + +# fast build rule for target. +isis3_unit_test_IdealCamera/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IdealCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_IdealCamera.dir/build +.PHONY : isis3_unit_test_IdealCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessExportPds + +# Build rule for target. +isis3_unit_test_ProcessExportPds: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessExportPds +.PHONY : isis3_unit_test_ProcessExportPds + +# fast build rule for target. +isis3_unit_test_ProcessExportPds/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessExportPds.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessExportPds.dir/build +.PHONY : isis3_unit_test_ProcessExportPds/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_IException + +# Build rule for target. +isis3_unit_test_IException: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IException +.PHONY : isis3_unit_test_IException + +# fast build rule for target. +isis3_unit_test_IException/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IException.dir/build.make objects/CMakeFiles/isis3_unit_test_IException.dir/build +.PHONY : isis3_unit_test_IException/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_HapkeAtm1 + +# Build rule for target. +isis3_unit_test_HapkeAtm1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_HapkeAtm1 +.PHONY : isis3_unit_test_HapkeAtm1 + +# fast build rule for target. +isis3_unit_test_HapkeAtm1/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_HapkeAtm1.dir/build.make objects/CMakeFiles/isis3_unit_test_HapkeAtm1.dir/build +.PHONY : isis3_unit_test_HapkeAtm1/fast + +#============================================================================= +# Target rules for targets named mar10clean_app + +# Build rule for target. +mar10clean_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mar10clean_app +.PHONY : mar10clean_app + +# fast build rule for target. +mar10clean_app/fast: + $(MAKE) -f objects/CMakeFiles/mar10clean_app.dir/build.make objects/CMakeFiles/mar10clean_app.dir/build +.PHONY : mar10clean_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Gui + +# Build rule for target. +isis3_unit_test_Gui: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Gui +.PHONY : isis3_unit_test_Gui + +# fast build rule for target. +isis3_unit_test_Gui/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Gui.dir/build.make objects/CMakeFiles/isis3_unit_test_Gui.dir/build +.PHONY : isis3_unit_test_Gui/fast + +#============================================================================= +# Target rules for targets named thmnoseam_app + +# Build rule for target. +thmnoseam_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thmnoseam_app +.PHONY : thmnoseam_app + +# fast build rule for target. +thmnoseam_app/fast: + $(MAKE) -f objects/CMakeFiles/thmnoseam_app.dir/build.make objects/CMakeFiles/thmnoseam_app.dir/build +.PHONY : thmnoseam_app/fast + +#============================================================================= +# Target rules for targets named fx_app + +# Build rule for target. +fx_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fx_app +.PHONY : fx_app + +# fast build rule for target. +fx_app/fast: + $(MAKE) -f objects/CMakeFiles/fx_app.dir/build.make objects/CMakeFiles/fx_app.dir/build +.PHONY : fx_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Ransac + +# Build rule for target. +isis3_unit_test_Ransac: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Ransac +.PHONY : isis3_unit_test_Ransac + +# fast build rule for target. +isis3_unit_test_Ransac/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Ransac.dir/build.make objects/CMakeFiles/isis3_unit_test_Ransac.dir/build +.PHONY : isis3_unit_test_Ransac/fast + +#============================================================================= +# Target rules for targets named RosettaOsirisCamera + +# Build rule for target. +RosettaOsirisCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 RosettaOsirisCamera +.PHONY : RosettaOsirisCamera + +# fast build rule for target. +RosettaOsirisCamera/fast: + $(MAKE) -f objects/CMakeFiles/RosettaOsirisCamera.dir/build.make objects/CMakeFiles/RosettaOsirisCamera.dir/build +.PHONY : RosettaOsirisCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Histogram + +# Build rule for target. +isis3_unit_test_Histogram: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Histogram +.PHONY : isis3_unit_test_Histogram + +# fast build rule for target. +isis3_unit_test_Histogram/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Histogram.dir/build.make objects/CMakeFiles/isis3_unit_test_Histogram.dir/build +.PHONY : isis3_unit_test_Histogram/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GroupedStatistics + +# Build rule for target. +isis3_unit_test_GroupedStatistics: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GroupedStatistics +.PHONY : isis3_unit_test_GroupedStatistics + +# fast build rule for target. +isis3_unit_test_GroupedStatistics/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GroupedStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_GroupedStatistics.dir/build +.PHONY : isis3_unit_test_GroupedStatistics/fast + +#============================================================================= +# Target rules for targets named apollo_unit_test_Apollo + +# Build rule for target. +apollo_unit_test_Apollo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_Apollo +.PHONY : apollo_unit_test_Apollo + +# fast build rule for target. +apollo_unit_test_Apollo/fast: + $(MAKE) -f objects/CMakeFiles/apollo_unit_test_Apollo.dir/build.make objects/CMakeFiles/apollo_unit_test_Apollo.dir/build +.PHONY : apollo_unit_test_Apollo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GaussianStretch + +# Build rule for target. +isis3_unit_test_GaussianStretch: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GaussianStretch +.PHONY : isis3_unit_test_GaussianStretch + +# fast build rule for target. +isis3_unit_test_GaussianStretch/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GaussianStretch.dir/build.make objects/CMakeFiles/isis3_unit_test_GaussianStretch.dir/build +.PHONY : isis3_unit_test_GaussianStretch/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GroundGrid + +# Build rule for target. +isis3_unit_test_GroundGrid: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GroundGrid +.PHONY : isis3_unit_test_GroundGrid + +# fast build rule for target. +isis3_unit_test_GroundGrid/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GroundGrid.dir/build.make objects/CMakeFiles/isis3_unit_test_GroundGrid.dir/build +.PHONY : isis3_unit_test_GroundGrid/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GSLUtility + +# Build rule for target. +isis3_unit_test_GSLUtility: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GSLUtility +.PHONY : isis3_unit_test_GSLUtility + +# fast build rule for target. +isis3_unit_test_GSLUtility/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GSLUtility.dir/build.make objects/CMakeFiles/isis3_unit_test_GSLUtility.dir/build +.PHONY : isis3_unit_test_GSLUtility/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_FramingCamera + +# Build rule for target. +isis3_unit_test_FramingCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FramingCamera +.PHONY : isis3_unit_test_FramingCamera + +# fast build rule for target. +isis3_unit_test_FramingCamera/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FramingCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_FramingCamera.dir/build +.PHONY : isis3_unit_test_FramingCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Stretch + +# Build rule for target. +isis3_unit_test_Stretch: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Stretch +.PHONY : isis3_unit_test_Stretch + +# fast build rule for target. +isis3_unit_test_Stretch/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Stretch.dir/build.make objects/CMakeFiles/isis3_unit_test_Stretch.dir/build +.PHONY : isis3_unit_test_Stretch/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_FileName + +# Build rule for target. +isis3_unit_test_FileName: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FileName +.PHONY : isis3_unit_test_FileName + +# fast build rule for target. +isis3_unit_test_FileName/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FileName.dir/build.make objects/CMakeFiles/isis3_unit_test_FileName.dir/build +.PHONY : isis3_unit_test_FileName/fast + +#============================================================================= +# Target rules for targets named SsiCamera + +# Build rule for target. +SsiCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SsiCamera +.PHONY : SsiCamera + +# fast build rule for target. +SsiCamera/fast: + $(MAKE) -f objects/CMakeFiles/SsiCamera.dir/build.make objects/CMakeFiles/SsiCamera.dir/build +.PHONY : SsiCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Isotropic2 + +# Build rule for target. +isis3_unit_test_Isotropic2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Isotropic2 +.PHONY : isis3_unit_test_Isotropic2 + +# fast build rule for target. +isis3_unit_test_Isotropic2/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Isotropic2.dir/build.make objects/CMakeFiles/isis3_unit_test_Isotropic2.dir/build +.PHONY : isis3_unit_test_Isotropic2/fast + +#============================================================================= +# Target rules for targets named NewHorizonsMvicTdiCamera + +# Build rule for target. +NewHorizonsMvicTdiCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsMvicTdiCamera +.PHONY : NewHorizonsMvicTdiCamera + +# fast build rule for target. +NewHorizonsMvicTdiCamera/fast: + $(MAKE) -f objects/CMakeFiles/NewHorizonsMvicTdiCamera.dir/build.make objects/CMakeFiles/NewHorizonsMvicTdiCamera.dir/build +.PHONY : NewHorizonsMvicTdiCamera/fast + +#============================================================================= +# Target rules for targets named mrf2pds_app + +# Build rule for target. +mrf2pds_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mrf2pds_app +.PHONY : mrf2pds_app + +# fast build rule for target. +mrf2pds_app/fast: + $(MAKE) -f objects/CMakeFiles/mrf2pds_app.dir/build.make objects/CMakeFiles/mrf2pds_app.dir/build +.PHONY : mrf2pds_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Pipeline + +# Build rule for target. +isis3_unit_test_Pipeline: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Pipeline +.PHONY : isis3_unit_test_Pipeline + +# fast build rule for target. +isis3_unit_test_Pipeline/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Pipeline.dir/build.make objects/CMakeFiles/isis3_unit_test_Pipeline.dir/build +.PHONY : isis3_unit_test_Pipeline/fast + +#============================================================================= +# Target rules for targets named mask_app + +# Build rule for target. +mask_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mask_app +.PHONY : mask_app + +# fast build rule for target. +mask_app/fast: + $(MAKE) -f objects/CMakeFiles/mask_app.dir/build.make objects/CMakeFiles/mask_app.dir/build +.PHONY : mask_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_FileList + +# Build rule for target. +isis3_unit_test_FileList: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FileList +.PHONY : isis3_unit_test_FileList + +# fast build rule for target. +isis3_unit_test_FileList/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FileList.dir/build.make objects/CMakeFiles/isis3_unit_test_FileList.dir/build +.PHONY : isis3_unit_test_FileList/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_HapkeAtm2 + +# Build rule for target. +isis3_unit_test_HapkeAtm2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_HapkeAtm2 +.PHONY : isis3_unit_test_HapkeAtm2 + +# fast build rule for target. +isis3_unit_test_HapkeAtm2/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_HapkeAtm2.dir/build.make objects/CMakeFiles/isis3_unit_test_HapkeAtm2.dir/build +.PHONY : isis3_unit_test_HapkeAtm2/fast + +#============================================================================= +# Target rules for targets named algebra_app + +# Build rule for target. +algebra_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 algebra_app +.PHONY : algebra_app + +# fast build rule for target. +algebra_app/fast: + $(MAKE) -f objects/CMakeFiles/algebra_app.dir/build.make objects/CMakeFiles/algebra_app.dir/build +.PHONY : algebra_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Isotropic1 + +# Build rule for target. +isis3_unit_test_Isotropic1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Isotropic1 +.PHONY : isis3_unit_test_Isotropic1 + +# fast build rule for target. +isis3_unit_test_Isotropic1/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Isotropic1.dir/build.make objects/CMakeFiles/isis3_unit_test_Isotropic1.dir/build +.PHONY : isis3_unit_test_Isotropic1/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_InlineInfixToPostfix + +# Build rule for target. +isis3_unit_test_InlineInfixToPostfix: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InlineInfixToPostfix +.PHONY : isis3_unit_test_InlineInfixToPostfix + +# fast build rule for target. +isis3_unit_test_InlineInfixToPostfix/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InlineInfixToPostfix.dir/build.make objects/CMakeFiles/isis3_unit_test_InlineInfixToPostfix.dir/build +.PHONY : isis3_unit_test_InlineInfixToPostfix/fast + +#============================================================================= +# Target rules for targets named bit2bit_app + +# Build rule for target. +bit2bit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 bit2bit_app +.PHONY : bit2bit_app + +# fast build rule for target. +bit2bit_app/fast: + $(MAKE) -f objects/CMakeFiles/bit2bit_app.dir/build.make objects/CMakeFiles/bit2bit_app.dir/build +.PHONY : bit2bit_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ExportPdsTable + +# Build rule for target. +isis3_unit_test_ExportPdsTable: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ExportPdsTable +.PHONY : isis3_unit_test_ExportPdsTable + +# fast build rule for target. +isis3_unit_test_ExportPdsTable/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ExportPdsTable.dir/build.make objects/CMakeFiles/isis3_unit_test_ExportPdsTable.dir/build +.PHONY : isis3_unit_test_ExportPdsTable/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PrincipalComponentAnalysis + +# Build rule for target. +isis3_unit_test_PrincipalComponentAnalysis: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PrincipalComponentAnalysis +.PHONY : isis3_unit_test_PrincipalComponentAnalysis + +# fast build rule for target. +isis3_unit_test_PrincipalComponentAnalysis/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PrincipalComponentAnalysis.dir/build.make objects/CMakeFiles/isis3_unit_test_PrincipalComponentAnalysis.dir/build +.PHONY : isis3_unit_test_PrincipalComponentAnalysis/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Equirectangular + +# Build rule for target. +isis3_unit_test_Equirectangular: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Equirectangular +.PHONY : isis3_unit_test_Equirectangular + +# fast build rule for target. +isis3_unit_test_Equirectangular/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Equirectangular.dir/build.make objects/CMakeFiles/isis3_unit_test_Equirectangular.dir/build +.PHONY : isis3_unit_test_Equirectangular/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TopoAtm + +# Build rule for target. +isis3_unit_test_TopoAtm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TopoAtm +.PHONY : isis3_unit_test_TopoAtm + +# fast build rule for target. +isis3_unit_test_TopoAtm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TopoAtm.dir/build.make objects/CMakeFiles/isis3_unit_test_TopoAtm.dir/build +.PHONY : isis3_unit_test_TopoAtm/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Environment + +# Build rule for target. +isis3_unit_test_Environment: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Environment +.PHONY : isis3_unit_test_Environment + +# fast build rule for target. +isis3_unit_test_Environment/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Environment.dir/build.make objects/CMakeFiles/isis3_unit_test_Environment.dir/build +.PHONY : isis3_unit_test_Environment/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Enlarge + +# Build rule for target. +isis3_unit_test_Enlarge: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Enlarge +.PHONY : isis3_unit_test_Enlarge + +# fast build rule for target. +isis3_unit_test_Enlarge/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Enlarge.dir/build.make objects/CMakeFiles/isis3_unit_test_Enlarge.dir/build +.PHONY : isis3_unit_test_Enlarge/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_OverlapNormalization + +# Build rule for target. +isis3_unit_test_OverlapNormalization: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OverlapNormalization +.PHONY : isis3_unit_test_OverlapNormalization + +# fast build rule for target. +isis3_unit_test_OverlapNormalization/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OverlapNormalization.dir/build.make objects/CMakeFiles/isis3_unit_test_OverlapNormalization.dir/build +.PHONY : isis3_unit_test_OverlapNormalization/fast + +#============================================================================= +# Target rules for targets named himos_app + +# Build rule for target. +himos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 himos_app +.PHONY : himos_app + +# fast build rule for target. +himos_app/fast: + $(MAKE) -f objects/CMakeFiles/himos_app.dir/build.make objects/CMakeFiles/himos_app.dir/build +.PHONY : himos_app/fast + +#============================================================================= +# Target rules for targets named StandardDeviationOperator + +# Build rule for target. +StandardDeviationOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 StandardDeviationOperator +.PHONY : StandardDeviationOperator + +# fast build rule for target. +StandardDeviationOperator/fast: + $(MAKE) -f objects/CMakeFiles/StandardDeviationOperator.dir/build.make objects/CMakeFiles/StandardDeviationOperator.dir/build +.PHONY : StandardDeviationOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SessionLog + +# Build rule for target. +isis3_unit_test_SessionLog: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SessionLog +.PHONY : isis3_unit_test_SessionLog + +# fast build rule for target. +isis3_unit_test_SessionLog/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SessionLog.dir/build.make objects/CMakeFiles/isis3_unit_test_SessionLog.dir/build +.PHONY : isis3_unit_test_SessionLog/fast + +#============================================================================= +# Target rules for targets named makeflat_app + +# Build rule for target. +makeflat_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 makeflat_app +.PHONY : makeflat_app + +# fast build rule for target. +makeflat_app/fast: + $(MAKE) -f objects/CMakeFiles/makeflat_app.dir/build.make objects/CMakeFiles/makeflat_app.dir/build +.PHONY : makeflat_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LunarLambert + +# Build rule for target. +isis3_unit_test_LunarLambert: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarLambert +.PHONY : isis3_unit_test_LunarLambert + +# fast build rule for target. +isis3_unit_test_LunarLambert/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarLambert.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarLambert.dir/build +.PHONY : isis3_unit_test_LunarLambert/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Distance + +# Build rule for target. +isis3_unit_test_Distance: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Distance +.PHONY : isis3_unit_test_Distance + +# fast build rule for target. +isis3_unit_test_Distance/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Distance.dir/build.make objects/CMakeFiles/isis3_unit_test_Distance.dir/build +.PHONY : isis3_unit_test_Distance/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Displacement + +# Build rule for target. +isis3_unit_test_Displacement: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Displacement +.PHONY : isis3_unit_test_Displacement + +# fast build rule for target. +isis3_unit_test_Displacement/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Displacement.dir/build.make objects/CMakeFiles/isis3_unit_test_Displacement.dir/build +.PHONY : isis3_unit_test_Displacement/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_JP2Encoder + +# Build rule for target. +isis3_unit_test_JP2Encoder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Encoder +.PHONY : isis3_unit_test_JP2Encoder + +# fast build rule for target. +isis3_unit_test_JP2Encoder/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Encoder.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Encoder.dir/build +.PHONY : isis3_unit_test_JP2Encoder/fast + +#============================================================================= +# Target rules for targets named cassini_unit_test_CisscalFile + +# Build rule for target. +cassini_unit_test_CisscalFile: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_CisscalFile +.PHONY : cassini_unit_test_CisscalFile + +# fast build rule for target. +cassini_unit_test_CisscalFile/fast: + $(MAKE) -f objects/CMakeFiles/cassini_unit_test_CisscalFile.dir/build.make objects/CMakeFiles/cassini_unit_test_CisscalFile.dir/build +.PHONY : cassini_unit_test_CisscalFile/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ImageOverlap + +# Build rule for target. +isis3_unit_test_ImageOverlap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageOverlap +.PHONY : isis3_unit_test_ImageOverlap + +# fast build rule for target. +isis3_unit_test_ImageOverlap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageOverlap.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageOverlap.dir/build +.PHONY : isis3_unit_test_ImageOverlap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_DemShape + +# Build rule for target. +isis3_unit_test_DemShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DemShape +.PHONY : isis3_unit_test_DemShape + +# fast build rule for target. +isis3_unit_test_DemShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DemShape.dir/build.make objects/CMakeFiles/isis3_unit_test_DemShape.dir/build +.PHONY : isis3_unit_test_DemShape/fast + +#============================================================================= +# Target rules for targets named trimfilter_app + +# Build rule for target. +trimfilter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 trimfilter_app +.PHONY : trimfilter_app + +# fast build rule for target. +trimfilter_app/fast: + $(MAKE) -f objects/CMakeFiles/trimfilter_app.dir/build.make objects/CMakeFiles/trimfilter_app.dir/build +.PHONY : trimfilter_app/fast + +#============================================================================= +# Target rules for targets named MoonAlbedo + +# Build rule for target. +MoonAlbedo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MoonAlbedo +.PHONY : MoonAlbedo + +# fast build rule for target. +MoonAlbedo/fast: + $(MAKE) -f objects/CMakeFiles/MoonAlbedo.dir/build.make objects/CMakeFiles/MoonAlbedo.dir/build +.PHONY : MoonAlbedo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GisBlob + +# Build rule for target. +isis3_unit_test_GisBlob: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GisBlob +.PHONY : isis3_unit_test_GisBlob + +# fast build rule for target. +isis3_unit_test_GisBlob/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GisBlob.dir/build.make objects/CMakeFiles/isis3_unit_test_GisBlob.dir/build +.PHONY : isis3_unit_test_GisBlob/fast + +#============================================================================= +# Target rules for targets named noisefilter_app + +# Build rule for target. +noisefilter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 noisefilter_app +.PHONY : noisefilter_app + +# fast build rule for target. +noisefilter_app/fast: + $(MAKE) -f objects/CMakeFiles/noisefilter_app.dir/build.make objects/CMakeFiles/noisefilter_app.dir/build +.PHONY : noisefilter_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CubeManager + +# Build rule for target. +isis3_unit_test_CubeManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeManager +.PHONY : isis3_unit_test_CubeManager + +# fast build rule for target. +isis3_unit_test_CubeManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeManager.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeManager.dir/build +.PHONY : isis3_unit_test_CubeManager/fast + +#============================================================================= +# Target rules for targets named lo2isis_app + +# Build rule for target. +lo2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lo2isis_app +.PHONY : lo2isis_app + +# fast build rule for target. +lo2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/lo2isis_app.dir/build.make objects/CMakeFiles/lo2isis_app.dir/build +.PHONY : lo2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AutoReg + +# Build rule for target. +isis3_unit_test_AutoReg: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AutoReg +.PHONY : isis3_unit_test_AutoReg + +# fast build rule for target. +isis3_unit_test_AutoReg/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AutoReg.dir/build.make objects/CMakeFiles/isis3_unit_test_AutoReg.dir/build +.PHONY : isis3_unit_test_AutoReg/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Stereo + +# Build rule for target. +isis3_unit_test_Stereo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Stereo +.PHONY : isis3_unit_test_Stereo + +# fast build rule for target. +isis3_unit_test_Stereo/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Stereo.dir/build.make objects/CMakeFiles/isis3_unit_test_Stereo.dir/build +.PHONY : isis3_unit_test_Stereo/fast + +#============================================================================= +# Target rules for targets named LunarLambertEmpirical + +# Build rule for target. +LunarLambertEmpirical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LunarLambertEmpirical +.PHONY : LunarLambertEmpirical + +# fast build rule for target. +LunarLambertEmpirical/fast: + $(MAKE) -f objects/CMakeFiles/LunarLambertEmpirical.dir/build.make objects/CMakeFiles/LunarLambertEmpirical.dir/build +.PHONY : LunarLambertEmpirical/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Latitude + +# Build rule for target. +isis3_unit_test_Latitude: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Latitude +.PHONY : isis3_unit_test_Latitude + +# fast build rule for target. +isis3_unit_test_Latitude/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Latitude.dir/build.make objects/CMakeFiles/isis3_unit_test_Latitude.dir/build +.PHONY : isis3_unit_test_Latitude/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MaximumLikelihoodWFunctions + +# Build rule for target. +isis3_unit_test_MaximumLikelihoodWFunctions: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MaximumLikelihoodWFunctions +.PHONY : isis3_unit_test_MaximumLikelihoodWFunctions + +# fast build rule for target. +isis3_unit_test_MaximumLikelihoodWFunctions/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MaximumLikelihoodWFunctions.dir/build.make objects/CMakeFiles/isis3_unit_test_MaximumLikelihoodWFunctions.dir/build +.PHONY : isis3_unit_test_MaximumLikelihoodWFunctions/fast + +#============================================================================= +# Target rules for targets named LoMediumCamera + +# Build rule for target. +LoMediumCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LoMediumCamera +.PHONY : LoMediumCamera + +# fast build rule for target. +LoMediumCamera/fast: + $(MAKE) -f objects/CMakeFiles/LoMediumCamera.dir/build.make objects/CMakeFiles/LoMediumCamera.dir/build +.PHONY : LoMediumCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Constants + +# Build rule for target. +isis3_unit_test_Constants: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Constants +.PHONY : isis3_unit_test_Constants + +# fast build rule for target. +isis3_unit_test_Constants/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Constants.dir/build.make objects/CMakeFiles/isis3_unit_test_Constants.dir/build +.PHONY : isis3_unit_test_Constants/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_EmbreeShapeModel + +# Build rule for target. +isis3_unit_test_EmbreeShapeModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EmbreeShapeModel +.PHONY : isis3_unit_test_EmbreeShapeModel + +# fast build rule for target. +isis3_unit_test_EmbreeShapeModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EmbreeShapeModel.dir/build.make objects/CMakeFiles/isis3_unit_test_EmbreeShapeModel.dir/build +.PHONY : isis3_unit_test_EmbreeShapeModel/fast + +#============================================================================= +# Target rules for targets named NoOperator + +# Build rule for target. +NoOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NoOperator +.PHONY : NoOperator + +# fast build rule for target. +NoOperator/fast: + $(MAKE) -f objects/CMakeFiles/NoOperator.dir/build.make objects/CMakeFiles/NoOperator.dir/build +.PHONY : NoOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_IString + +# Build rule for target. +isis3_unit_test_IString: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IString +.PHONY : isis3_unit_test_IString + +# fast build rule for target. +isis3_unit_test_IString/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IString.dir/build.make objects/CMakeFiles/isis3_unit_test_IString.dir/build +.PHONY : isis3_unit_test_IString/fast + +#============================================================================= +# Target rules for targets named ThemisIrCamera + +# Build rule for target. +ThemisIrCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ThemisIrCamera +.PHONY : ThemisIrCamera + +# fast build rule for target. +ThemisIrCamera/fast: + $(MAKE) -f objects/CMakeFiles/ThemisIrCamera.dir/build.make objects/CMakeFiles/ThemisIrCamera.dir/build +.PHONY : ThemisIrCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Column + +# Build rule for target. +isis3_unit_test_Column: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Column +.PHONY : isis3_unit_test_Column + +# fast build rule for target. +isis3_unit_test_Column/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Column.dir/build.make objects/CMakeFiles/isis3_unit_test_Column.dir/build +.PHONY : isis3_unit_test_Column/fast + +#============================================================================= +# Target rules for targets named MarciCamera + +# Build rule for target. +MarciCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MarciCamera +.PHONY : MarciCamera + +# fast build rule for target. +MarciCamera/fast: + $(MAKE) -f objects/CMakeFiles/MarciCamera.dir/build.make objects/CMakeFiles/MarciCamera.dir/build +.PHONY : MarciCamera/fast + +#============================================================================= +# Target rules for targets named cnetadd_app + +# Build rule for target. +cnetadd_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetadd_app +.PHONY : cnetadd_app + +# fast build rule for target. +cnetadd_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetadd_app.dir/build.make objects/CMakeFiles/cnetadd_app.dir/build +.PHONY : cnetadd_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CollectorMap + +# Build rule for target. +isis3_unit_test_CollectorMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CollectorMap +.PHONY : isis3_unit_test_CollectorMap + +# fast build rule for target. +isis3_unit_test_CollectorMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CollectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CollectorMap.dir/build +.PHONY : isis3_unit_test_CollectorMap/fast + +#============================================================================= +# Target rules for targets named HrscCamera + +# Build rule for target. +HrscCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HrscCamera +.PHONY : HrscCamera + +# fast build rule for target. +HrscCamera/fast: + $(MAKE) -f objects/CMakeFiles/HrscCamera.dir/build.make objects/CMakeFiles/HrscCamera.dir/build +.PHONY : HrscCamera/fast + +#============================================================================= +# Target rules for targets named MoravecOperator + +# Build rule for target. +MoravecOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MoravecOperator +.PHONY : MoravecOperator + +# fast build rule for target. +MoravecOperator/fast: + $(MAKE) -f objects/CMakeFiles/MoravecOperator.dir/build.make objects/CMakeFiles/MoravecOperator.dir/build +.PHONY : MoravecOperator/fast + +#============================================================================= +# Target rules for targets named hicolormos_app + +# Build rule for target. +hicolormos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hicolormos_app +.PHONY : hicolormos_app + +# fast build rule for target. +hicolormos_app/fast: + $(MAKE) -f objects/CMakeFiles/hicolormos_app.dir/build.make objects/CMakeFiles/hicolormos_app.dir/build +.PHONY : hicolormos_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CSVReader + +# Build rule for target. +isis3_unit_test_CSVReader: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CSVReader +.PHONY : isis3_unit_test_CSVReader + +# fast build rule for target. +isis3_unit_test_CSVReader/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CSVReader.dir/build.make objects/CMakeFiles/isis3_unit_test_CSVReader.dir/build +.PHONY : isis3_unit_test_CSVReader/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Interpolator + +# Build rule for target. +isis3_unit_test_Interpolator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Interpolator +.PHONY : isis3_unit_test_Interpolator + +# fast build rule for target. +isis3_unit_test_Interpolator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Interpolator.dir/build.make objects/CMakeFiles/isis3_unit_test_Interpolator.dir/build +.PHONY : isis3_unit_test_Interpolator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpectralDefinition + +# Build rule for target. +isis3_unit_test_SpectralDefinition: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinition +.PHONY : isis3_unit_test_SpectralDefinition + +# fast build rule for target. +isis3_unit_test_SpectralDefinition/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinition.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinition.dir/build +.PHONY : isis3_unit_test_SpectralDefinition/fast + +#============================================================================= +# Target rules for targets named StripPolygonSeeder + +# Build rule for target. +StripPolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 StripPolygonSeeder +.PHONY : StripPolygonSeeder + +# fast build rule for target. +StripPolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/StripPolygonSeeder.dir/build.make objects/CMakeFiles/StripPolygonSeeder.dir/build +.PHONY : StripPolygonSeeder/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MosaicSceneWidget + +# Build rule for target. +isis3_unit_test_MosaicSceneWidget: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MosaicSceneWidget +.PHONY : isis3_unit_test_MosaicSceneWidget + +# fast build rule for target. +isis3_unit_test_MosaicSceneWidget/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MosaicSceneWidget.dir/build.make objects/CMakeFiles/isis3_unit_test_MosaicSceneWidget.dir/build +.PHONY : isis3_unit_test_MosaicSceneWidget/fast + +#============================================================================= +# Target rules for targets named explode_app + +# Build rule for target. +explode_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 explode_app +.PHONY : explode_app + +# fast build rule for target. +explode_app/fast: + $(MAKE) -f objects/CMakeFiles/explode_app.dir/build.make objects/CMakeFiles/explode_app.dir/build +.PHONY : explode_app/fast + +#============================================================================= +# Target rules for targets named ObliqueCylindrical + +# Build rule for target. +ObliqueCylindrical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ObliqueCylindrical +.PHONY : ObliqueCylindrical + +# fast build rule for target. +ObliqueCylindrical/fast: + $(MAKE) -f objects/CMakeFiles/ObliqueCylindrical.dir/build.make objects/CMakeFiles/ObliqueCylindrical.dir/build +.PHONY : ObliqueCylindrical/fast + +#============================================================================= +# Target rules for targets named LunarLambertMcEwen + +# Build rule for target. +LunarLambertMcEwen: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LunarLambertMcEwen +.PHONY : LunarLambertMcEwen + +# fast build rule for target. +LunarLambertMcEwen/fast: + $(MAKE) -f objects/CMakeFiles/LunarLambertMcEwen.dir/build.make objects/CMakeFiles/LunarLambertMcEwen.dir/build +.PHONY : LunarLambertMcEwen/fast + +#============================================================================= +# Target rules for targets named PolarStereographic + +# Build rule for target. +PolarStereographic: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 PolarStereographic +.PHONY : PolarStereographic + +# fast build rule for target. +PolarStereographic/fast: + $(MAKE) -f objects/CMakeFiles/PolarStereographic.dir/build.make objects/CMakeFiles/PolarStereographic.dir/build +.PHONY : PolarStereographic/fast + +#============================================================================= +# Target rules for targets named MocNarrowAngleCamera + +# Build rule for target. +MocNarrowAngleCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MocNarrowAngleCamera +.PHONY : MocNarrowAngleCamera + +# fast build rule for target. +MocNarrowAngleCamera/fast: + $(MAKE) -f objects/CMakeFiles/MocNarrowAngleCamera.dir/build.make objects/CMakeFiles/MocNarrowAngleCamera.dir/build +.PHONY : MocNarrowAngleCamera/fast + +#============================================================================= +# Target rules for targets named PointPerspective + +# Build rule for target. +PointPerspective: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 PointPerspective +.PHONY : PointPerspective + +# fast build rule for target. +PointPerspective/fast: + $(MAKE) -f objects/CMakeFiles/PointPerspective.dir/build.make objects/CMakeFiles/PointPerspective.dir/build +.PHONY : PointPerspective/fast + +#============================================================================= +# Target rules for targets named mical_app + +# Build rule for target. +mical_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mical_app +.PHONY : mical_app + +# fast build rule for target. +mical_app/fast: + $(MAKE) -f objects/CMakeFiles/mical_app.dir/build.make objects/CMakeFiles/mical_app.dir/build +.PHONY : mical_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TransverseMercator + +# Build rule for target. +isis3_unit_test_TransverseMercator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TransverseMercator +.PHONY : isis3_unit_test_TransverseMercator + +# fast build rule for target. +isis3_unit_test_TransverseMercator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TransverseMercator.dir/build.make objects/CMakeFiles/isis3_unit_test_TransverseMercator.dir/build +.PHONY : isis3_unit_test_TransverseMercator/fast + +#============================================================================= +# Target rules for targets named LoHighCamera + +# Build rule for target. +LoHighCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LoHighCamera +.PHONY : LoHighCamera + +# fast build rule for target. +LoHighCamera/fast: + $(MAKE) -f objects/CMakeFiles/LoHighCamera.dir/build.make objects/CMakeFiles/LoHighCamera.dir/build +.PHONY : LoHighCamera/fast + +#============================================================================= +# Target rules for targets named AdaptiveGruen + +# Build rule for target. +AdaptiveGruen: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 AdaptiveGruen +.PHONY : AdaptiveGruen + +# fast build rule for target. +AdaptiveGruen/fast: + $(MAKE) -f objects/CMakeFiles/AdaptiveGruen.dir/build.make objects/CMakeFiles/AdaptiveGruen.dir/build +.PHONY : AdaptiveGruen/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Spice + +# Build rule for target. +isis3_unit_test_Spice: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Spice +.PHONY : isis3_unit_test_Spice + +# fast build rule for target. +isis3_unit_test_Spice/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Spice.dir/build.make objects/CMakeFiles/isis3_unit_test_Spice.dir/build +.PHONY : isis3_unit_test_Spice/fast + +#============================================================================= +# Target rules for targets named LambertAzimuthalEqualArea + +# Build rule for target. +LambertAzimuthalEqualArea: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LambertAzimuthalEqualArea +.PHONY : LambertAzimuthalEqualArea + +# fast build rule for target. +LambertAzimuthalEqualArea/fast: + $(MAKE) -f objects/CMakeFiles/LambertAzimuthalEqualArea.dir/build.make objects/CMakeFiles/LambertAzimuthalEqualArea.dir/build +.PHONY : LambertAzimuthalEqualArea/fast + +#============================================================================= +# Target rules for targets named mirror_app + +# Build rule for target. +mirror_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mirror_app +.PHONY : mirror_app + +# fast build rule for target. +mirror_app/fast: + $(MAKE) -f objects/CMakeFiles/mirror_app.dir/build.make objects/CMakeFiles/mirror_app.dir/build +.PHONY : mirror_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_History + +# Build rule for target. +isis3_unit_test_History: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_History +.PHONY : isis3_unit_test_History + +# fast build rule for target. +isis3_unit_test_History/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_History.dir/build.make objects/CMakeFiles/isis3_unit_test_History.dir/build +.PHONY : isis3_unit_test_History/fast + +#============================================================================= +# Target rules for targets named rosvirtis2isis_app + +# Build rule for target. +rosvirtis2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 rosvirtis2isis_app +.PHONY : rosvirtis2isis_app + +# fast build rule for target. +rosvirtis2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/rosvirtis2isis_app.dir/build.make objects/CMakeFiles/rosvirtis2isis_app.dir/build +.PHONY : rosvirtis2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MinimumDifference + +# Build rule for target. +isis3_unit_test_MinimumDifference: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MinimumDifference +.PHONY : isis3_unit_test_MinimumDifference + +# fast build rule for target. +isis3_unit_test_MinimumDifference/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MinimumDifference.dir/build.make objects/CMakeFiles/isis3_unit_test_MinimumDifference.dir/build +.PHONY : isis3_unit_test_MinimumDifference/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessByTile + +# Build rule for target. +isis3_unit_test_ProcessByTile: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByTile +.PHONY : isis3_unit_test_ProcessByTile + +# fast build rule for target. +isis3_unit_test_ProcessByTile/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByTile.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByTile.dir/build +.PHONY : isis3_unit_test_ProcessByTile/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlTokenizer + +# Build rule for target. +isis3_unit_test_PvlTokenizer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlTokenizer +.PHONY : isis3_unit_test_PvlTokenizer + +# fast build rule for target. +isis3_unit_test_PvlTokenizer/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlTokenizer.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlTokenizer.dir/build +.PHONY : isis3_unit_test_PvlTokenizer/fast + +#============================================================================= +# Target rules for targets named thmvistrim_app + +# Build rule for target. +thmvistrim_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thmvistrim_app +.PHONY : thmvistrim_app + +# fast build rule for target. +thmvistrim_app/fast: + $(MAKE) -f objects/CMakeFiles/thmvistrim_app.dir/build.make objects/CMakeFiles/thmvistrim_app.dir/build +.PHONY : thmvistrim_app/fast + +#============================================================================= +# Target rules for targets named MocWideAngleCamera + +# Build rule for target. +MocWideAngleCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MocWideAngleCamera +.PHONY : MocWideAngleCamera + +# fast build rule for target. +MocWideAngleCamera/fast: + $(MAKE) -f objects/CMakeFiles/MocWideAngleCamera.dir/build.make objects/CMakeFiles/MocWideAngleCamera.dir/build +.PHONY : MocWideAngleCamera/fast + +#============================================================================= +# Target rules for targets named mdisproc_app + +# Build rule for target. +mdisproc_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mdisproc_app +.PHONY : mdisproc_app + +# fast build rule for target. +mdisproc_app/fast: + $(MAKE) -f objects/CMakeFiles/mdisproc_app.dir/build.make objects/CMakeFiles/mdisproc_app.dir/build +.PHONY : mdisproc_app/fast + +#============================================================================= +# Target rules for targets named Planar + +# Build rule for target. +Planar: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Planar +.PHONY : Planar + +# fast build rule for target. +Planar/fast: + $(MAKE) -f objects/CMakeFiles/Planar.dir/build.make objects/CMakeFiles/Planar.dir/build +.PHONY : Planar/fast + +#============================================================================= +# Target rules for targets named hijitreg_app + +# Build rule for target. +hijitreg_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hijitreg_app +.PHONY : hijitreg_app + +# fast build rule for target. +hijitreg_app/fast: + $(MAKE) -f objects/CMakeFiles/hijitreg_app.dir/build.make objects/CMakeFiles/hijitreg_app.dir/build +.PHONY : hijitreg_app/fast + +#============================================================================= +# Target rules for targets named MaximumCorrelation + +# Build rule for target. +MaximumCorrelation: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MaximumCorrelation +.PHONY : MaximumCorrelation + +# fast build rule for target. +MaximumCorrelation/fast: + $(MAKE) -f objects/CMakeFiles/MaximumCorrelation.dir/build.make objects/CMakeFiles/MaximumCorrelation.dir/build +.PHONY : MaximumCorrelation/fast + +#============================================================================= +# Target rules for targets named Hapke + +# Build rule for target. +Hapke: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Hapke +.PHONY : Hapke + +# fast build rule for target. +Hapke/fast: + $(MAKE) -f objects/CMakeFiles/Hapke.dir/build.make objects/CMakeFiles/Hapke.dir/build +.PHONY : Hapke/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlFormatPds + +# Build rule for target. +isis3_unit_test_PvlFormatPds: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlFormatPds +.PHONY : isis3_unit_test_PvlFormatPds + +# fast build rule for target. +isis3_unit_test_PvlFormatPds/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlFormatPds.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlFormatPds.dir/build +.PHONY : isis3_unit_test_PvlFormatPds/fast + +#============================================================================= +# Target rules for targets named cnetsplit_app + +# Build rule for target. +cnetsplit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetsplit_app +.PHONY : cnetsplit_app + +# fast build rule for target. +cnetsplit_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetsplit_app.dir/build.make objects/CMakeFiles/cnetsplit_app.dir/build +.PHONY : cnetsplit_app/fast + +#============================================================================= +# Target rules for targets named TransverseMercator + +# Build rule for target. +TransverseMercator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 TransverseMercator +.PHONY : TransverseMercator + +# fast build rule for target. +TransverseMercator/fast: + $(MAKE) -f objects/CMakeFiles/TransverseMercator.dir/build.make objects/CMakeFiles/TransverseMercator.dir/build +.PHONY : TransverseMercator/fast + +#============================================================================= +# Target rules for targets named ciss2isis_app + +# Build rule for target. +ciss2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ciss2isis_app +.PHONY : ciss2isis_app + +# fast build rule for target. +ciss2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/ciss2isis_app.dir/build.make objects/CMakeFiles/ciss2isis_app.dir/build +.PHONY : ciss2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Cube + +# Build rule for target. +isis3_unit_test_Cube: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Cube +.PHONY : isis3_unit_test_Cube + +# fast build rule for target. +isis3_unit_test_Cube/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Cube.dir/build.make objects/CMakeFiles/isis3_unit_test_Cube.dir/build +.PHONY : isis3_unit_test_Cube/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AdaptiveGruen + +# Build rule for target. +isis3_unit_test_AdaptiveGruen: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AdaptiveGruen +.PHONY : isis3_unit_test_AdaptiveGruen + +# fast build rule for target. +isis3_unit_test_AdaptiveGruen/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AdaptiveGruen.dir/build.make objects/CMakeFiles/isis3_unit_test_AdaptiveGruen.dir/build +.PHONY : isis3_unit_test_AdaptiveGruen/fast + +#============================================================================= +# Target rules for targets named cubenorm_app + +# Build rule for target. +cubenorm_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cubenorm_app +.PHONY : cubenorm_app + +# fast build rule for target. +cubenorm_app/fast: + $(MAKE) -f objects/CMakeFiles/cubenorm_app.dir/build.make objects/CMakeFiles/cubenorm_app.dir/build +.PHONY : cubenorm_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Chip + +# Build rule for target. +isis3_unit_test_Chip: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Chip +.PHONY : isis3_unit_test_Chip + +# fast build rule for target. +isis3_unit_test_Chip/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Chip.dir/build.make objects/CMakeFiles/isis3_unit_test_Chip.dir/build +.PHONY : isis3_unit_test_Chip/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ExportDescription + +# Build rule for target. +isis3_unit_test_ExportDescription: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ExportDescription +.PHONY : isis3_unit_test_ExportDescription + +# fast build rule for target. +isis3_unit_test_ExportDescription/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ExportDescription.dir/build.make objects/CMakeFiles/isis3_unit_test_ExportDescription.dir/build +.PHONY : isis3_unit_test_ExportDescription/fast + +#============================================================================= +# Target rules for targets named appjit_app + +# Build rule for target. +appjit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 appjit_app +.PHONY : appjit_app + +# fast build rule for target. +appjit_app/fast: + $(MAKE) -f objects/CMakeFiles/appjit_app.dir/build.make objects/CMakeFiles/appjit_app.dir/build +.PHONY : appjit_app/fast + +#============================================================================= +# Target rules for targets named ckwriter_app + +# Build rule for target. +ckwriter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ckwriter_app +.PHONY : ckwriter_app + +# fast build rule for target. +ckwriter_app/fast: + $(MAKE) -f objects/CMakeFiles/ckwriter_app.dir/build.make objects/CMakeFiles/ckwriter_app.dir/build +.PHONY : ckwriter_app/fast + +#============================================================================= +# Target rules for targets named ForstnerOperator + +# Build rule for target. +ForstnerOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ForstnerOperator +.PHONY : ForstnerOperator + +# fast build rule for target. +ForstnerOperator/fast: + $(MAKE) -f objects/CMakeFiles/ForstnerOperator.dir/build.make objects/CMakeFiles/ForstnerOperator.dir/build +.PHONY : ForstnerOperator/fast + +#============================================================================= +# Target rules for targets named Lambert + +# Build rule for target. +Lambert: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Lambert +.PHONY : Lambert + +# fast build rule for target. +Lambert/fast: + $(MAKE) -f objects/CMakeFiles/Lambert.dir/build.make objects/CMakeFiles/Lambert.dir/build +.PHONY : Lambert/fast + +#============================================================================= +# Target rules for targets named mrf2isis_app + +# Build rule for target. +mrf2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mrf2isis_app +.PHONY : mrf2isis_app + +# fast build rule for target. +mrf2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mrf2isis_app.dir/build.make objects/CMakeFiles/mrf2isis_app.dir/build +.PHONY : mrf2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Spectel + +# Build rule for target. +isis3_unit_test_Spectel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Spectel +.PHONY : isis3_unit_test_Spectel + +# fast build rule for target. +isis3_unit_test_Spectel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Spectel.dir/build.make objects/CMakeFiles/isis3_unit_test_Spectel.dir/build +.PHONY : isis3_unit_test_Spectel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Topo + +# Build rule for target. +isis3_unit_test_Topo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Topo +.PHONY : isis3_unit_test_Topo + +# fast build rule for target. +isis3_unit_test_Topo/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Topo.dir/build.make objects/CMakeFiles/isis3_unit_test_Topo.dir/build +.PHONY : isis3_unit_test_Topo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Equalization + +# Build rule for target. +isis3_unit_test_Equalization: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Equalization +.PHONY : isis3_unit_test_Equalization + +# fast build rule for target. +isis3_unit_test_Equalization/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Equalization.dir/build.make objects/CMakeFiles/isis3_unit_test_Equalization.dir/build +.PHONY : isis3_unit_test_Equalization/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Hillshade + +# Build rule for target. +isis3_unit_test_Hillshade: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Hillshade +.PHONY : isis3_unit_test_Hillshade + +# fast build rule for target. +isis3_unit_test_Hillshade/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Hillshade.dir/build.make objects/CMakeFiles/isis3_unit_test_Hillshade.dir/build +.PHONY : isis3_unit_test_Hillshade/fast + +#============================================================================= +# Target rules for targets named DawnVirCamera + +# Build rule for target. +DawnVirCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 DawnVirCamera +.PHONY : DawnVirCamera + +# fast build rule for target. +DawnVirCamera/fast: + $(MAKE) -f objects/CMakeFiles/DawnVirCamera.dir/build.make objects/CMakeFiles/DawnVirCamera.dir/build +.PHONY : DawnVirCamera/fast + +#============================================================================= +# Target rules for targets named Sinusoidal + +# Build rule for target. +Sinusoidal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Sinusoidal +.PHONY : Sinusoidal + +# fast build rule for target. +Sinusoidal/fast: + $(MAKE) -f objects/CMakeFiles/Sinusoidal.dir/build.make objects/CMakeFiles/Sinusoidal.dir/build +.PHONY : Sinusoidal/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Projection + +# Build rule for target. +isis3_unit_test_Projection: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Projection +.PHONY : isis3_unit_test_Projection + +# fast build rule for target. +isis3_unit_test_Projection/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Projection.dir/build.make objects/CMakeFiles/isis3_unit_test_Projection.dir/build +.PHONY : isis3_unit_test_Projection/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadarGroundMap + +# Build rule for target. +isis3_unit_test_RadarGroundMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarGroundMap +.PHONY : isis3_unit_test_RadarGroundMap + +# fast build rule for target. +isis3_unit_test_RadarGroundMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarGroundMap.dir/build +.PHONY : isis3_unit_test_RadarGroundMap/fast + +#============================================================================= +# Target rules for targets named cathist_app + +# Build rule for target. +cathist_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cathist_app +.PHONY : cathist_app + +# fast build rule for target. +cathist_app/fast: + $(MAKE) -f objects/CMakeFiles/cathist_app.dir/build.make objects/CMakeFiles/cathist_app.dir/build +.PHONY : cathist_app/fast + +#============================================================================= +# Target rules for targets named LommelSeeliger + +# Build rule for target. +LommelSeeliger: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LommelSeeliger +.PHONY : LommelSeeliger + +# fast build rule for target. +LommelSeeliger/fast: + $(MAKE) -f objects/CMakeFiles/LommelSeeliger.dir/build.make objects/CMakeFiles/LommelSeeliger.dir/build +.PHONY : LommelSeeliger/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SimpleCylindrical + +# Build rule for target. +isis3_unit_test_SimpleCylindrical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SimpleCylindrical +.PHONY : isis3_unit_test_SimpleCylindrical + +# fast build rule for target. +isis3_unit_test_SimpleCylindrical/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SimpleCylindrical.dir/build.make objects/CMakeFiles/isis3_unit_test_SimpleCylindrical.dir/build +.PHONY : isis3_unit_test_SimpleCylindrical/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GisTopology + +# Build rule for target. +isis3_unit_test_GisTopology: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GisTopology +.PHONY : isis3_unit_test_GisTopology + +# fast build rule for target. +isis3_unit_test_GisTopology/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GisTopology.dir/build.make objects/CMakeFiles/isis3_unit_test_GisTopology.dir/build +.PHONY : isis3_unit_test_GisTopology/fast + +#============================================================================= +# Target rules for targets named HapkeAtm1 + +# Build rule for target. +HapkeAtm1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HapkeAtm1 +.PHONY : HapkeAtm1 + +# fast build rule for target. +HapkeAtm1/fast: + $(MAKE) -f objects/CMakeFiles/HapkeAtm1.dir/build.make objects/CMakeFiles/HapkeAtm1.dir/build +.PHONY : HapkeAtm1/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Message + +# Build rule for target. +isis3_unit_test_Message: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Message +.PHONY : isis3_unit_test_Message + +# fast build rule for target. +isis3_unit_test_Message/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Message.dir/build.make objects/CMakeFiles/isis3_unit_test_Message.dir/build +.PHONY : isis3_unit_test_Message/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_DatabaseFactory + +# Build rule for target. +isis3_unit_test_DatabaseFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DatabaseFactory +.PHONY : isis3_unit_test_DatabaseFactory + +# fast build rule for target. +isis3_unit_test_DatabaseFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DatabaseFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_DatabaseFactory.dir/build +.PHONY : isis3_unit_test_DatabaseFactory/fast + +#============================================================================= +# Target rules for targets named rolo2isis_app + +# Build rule for target. +rolo2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 rolo2isis_app +.PHONY : rolo2isis_app + +# fast build rule for target. +rolo2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/rolo2isis_app.dir/build.make objects/CMakeFiles/rolo2isis_app.dir/build +.PHONY : rolo2isis_app/fast + +#============================================================================= +# Target rules for targets named LroNarrowAngleCamera + +# Build rule for target. +LroNarrowAngleCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LroNarrowAngleCamera +.PHONY : LroNarrowAngleCamera + +# fast build rule for target. +LroNarrowAngleCamera/fast: + $(MAKE) -f objects/CMakeFiles/LroNarrowAngleCamera.dir/build.make objects/CMakeFiles/LroNarrowAngleCamera.dir/build +.PHONY : LroNarrowAngleCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_FunctionTools + +# Build rule for target. +isis3_unit_test_FunctionTools: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FunctionTools +.PHONY : isis3_unit_test_FunctionTools + +# fast build rule for target. +isis3_unit_test_FunctionTools/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FunctionTools.dir/build.make objects/CMakeFiles/isis3_unit_test_FunctionTools.dir/build +.PHONY : isis3_unit_test_FunctionTools/fast + +#============================================================================= +# Target rules for targets named noproj_app + +# Build rule for target. +noproj_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 noproj_app +.PHONY : noproj_app + +# fast build rule for target. +noproj_app/fast: + $(MAKE) -f objects/CMakeFiles/noproj_app.dir/build.make objects/CMakeFiles/noproj_app.dir/build +.PHONY : noproj_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Minnaert + +# Build rule for target. +isis3_unit_test_Minnaert: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Minnaert +.PHONY : isis3_unit_test_Minnaert + +# fast build rule for target. +isis3_unit_test_Minnaert/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Minnaert.dir/build.make objects/CMakeFiles/isis3_unit_test_Minnaert.dir/build +.PHONY : isis3_unit_test_Minnaert/fast + +#============================================================================= +# Target rules for targets named mat2cnet_app + +# Build rule for target. +mat2cnet_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mat2cnet_app +.PHONY : mat2cnet_app + +# fast build rule for target. +mat2cnet_app/fast: + $(MAKE) -f objects/CMakeFiles/mat2cnet_app.dir/build.make objects/CMakeFiles/mat2cnet_app.dir/build +.PHONY : mat2cnet_app/fast + +#============================================================================= +# Target rules for targets named camrange_app + +# Build rule for target. +camrange_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 camrange_app +.PHONY : camrange_app + +# fast build rule for target. +camrange_app/fast: + $(MAKE) -f objects/CMakeFiles/camrange_app.dir/build.make objects/CMakeFiles/camrange_app.dir/build +.PHONY : camrange_app/fast + +#============================================================================= +# Target rules for targets named Orthographic + +# Build rule for target. +Orthographic: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Orthographic +.PHONY : Orthographic + +# fast build rule for target. +Orthographic/fast: + $(MAKE) -f objects/CMakeFiles/Orthographic.dir/build.make objects/CMakeFiles/Orthographic.dir/build +.PHONY : Orthographic/fast + +#============================================================================= +# Target rules for targets named camstats_app + +# Build rule for target. +camstats_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 camstats_app +.PHONY : camstats_app + +# fast build rule for target. +camstats_app/fast: + $(MAKE) -f objects/CMakeFiles/camstats_app.dir/build.make objects/CMakeFiles/camstats_app.dir/build +.PHONY : camstats_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ObliqueCylindrical + +# Build rule for target. +isis3_unit_test_ObliqueCylindrical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ObliqueCylindrical +.PHONY : isis3_unit_test_ObliqueCylindrical + +# fast build rule for target. +isis3_unit_test_ObliqueCylindrical/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ObliqueCylindrical.dir/build.make objects/CMakeFiles/isis3_unit_test_ObliqueCylindrical.dir/build +.PHONY : isis3_unit_test_ObliqueCylindrical/fast + +#============================================================================= +# Target rules for targets named NirCamera + +# Build rule for target. +NirCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NirCamera +.PHONY : NirCamera + +# fast build rule for target. +NirCamera/fast: + $(MAKE) -f objects/CMakeFiles/NirCamera.dir/build.make objects/CMakeFiles/NirCamera.dir/build +.PHONY : NirCamera/fast + +#============================================================================= +# Target rules for targets named RingCylindrical + +# Build rule for target. +RingCylindrical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 RingCylindrical +.PHONY : RingCylindrical + +# fast build rule for target. +RingCylindrical/fast: + $(MAKE) -f objects/CMakeFiles/RingCylindrical.dir/build.make objects/CMakeFiles/RingCylindrical.dir/build +.PHONY : RingCylindrical/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LimitPolygonSeeder + +# Build rule for target. +isis3_unit_test_LimitPolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LimitPolygonSeeder +.PHONY : isis3_unit_test_LimitPolygonSeeder + +# fast build rule for target. +isis3_unit_test_LimitPolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LimitPolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_LimitPolygonSeeder.dir/build +.PHONY : isis3_unit_test_LimitPolygonSeeder/fast + +#============================================================================= +# Target rules for targets named clemnirnoise_app + +# Build rule for target. +clemnirnoise_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clemnirnoise_app +.PHONY : clemnirnoise_app + +# fast build rule for target. +clemnirnoise_app/fast: + $(MAKE) -f objects/CMakeFiles/clemnirnoise_app.dir/build.make objects/CMakeFiles/clemnirnoise_app.dir/build +.PHONY : clemnirnoise_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraDistortionMap + +# Build rule for target. +isis3_unit_test_CameraDistortionMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraDistortionMap +.PHONY : isis3_unit_test_CameraDistortionMap + +# fast build rule for target. +isis3_unit_test_CameraDistortionMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraDistortionMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraDistortionMap.dir/build +.PHONY : isis3_unit_test_CameraDistortionMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpectralDefinition1D + +# Build rule for target. +isis3_unit_test_SpectralDefinition1D: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinition1D +.PHONY : isis3_unit_test_SpectralDefinition1D + +# fast build rule for target. +isis3_unit_test_SpectralDefinition1D/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinition1D.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinition1D.dir/build +.PHONY : isis3_unit_test_SpectralDefinition1D/fast + +#============================================================================= +# Target rules for targets named lronacecho_app + +# Build rule for target. +lronacecho_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lronacecho_app +.PHONY : lronacecho_app + +# fast build rule for target. +lronacecho_app/fast: + $(MAKE) -f objects/CMakeFiles/lronacecho_app.dir/build.make objects/CMakeFiles/lronacecho_app.dir/build +.PHONY : lronacecho_app/fast + +#============================================================================= +# Target rules for targets named overlapstats_app + +# Build rule for target. +overlapstats_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 overlapstats_app +.PHONY : overlapstats_app + +# fast build rule for target. +overlapstats_app/fast: + $(MAKE) -f objects/CMakeFiles/overlapstats_app.dir/build.make objects/CMakeFiles/overlapstats_app.dir/build +.PHONY : overlapstats_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlGraph + +# Build rule for target. +isis3_unit_test_ControlGraph: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlGraph +.PHONY : isis3_unit_test_ControlGraph + +# fast build rule for target. +isis3_unit_test_ControlGraph/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlGraph.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlGraph.dir/build +.PHONY : isis3_unit_test_ControlGraph/fast + +#============================================================================= +# Target rules for targets named vdcomp_app + +# Build rule for target. +vdcomp_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vdcomp_app +.PHONY : vdcomp_app + +# fast build rule for target. +vdcomp_app/fast: + $(MAKE) -f objects/CMakeFiles/vdcomp_app.dir/build.make objects/CMakeFiles/vdcomp_app.dir/build +.PHONY : vdcomp_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessImport + +# Build rule for target. +isis3_unit_test_ProcessImport: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImport +.PHONY : isis3_unit_test_ProcessImport + +# fast build rule for target. +isis3_unit_test_ProcessImport/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImport.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImport.dir/build +.PHONY : isis3_unit_test_ProcessImport/fast + +#============================================================================= +# Target rules for targets named messspkgen_app + +# Build rule for target. +messspkgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 messspkgen_app +.PHONY : messspkgen_app + +# fast build rule for target. +messspkgen_app/fast: + $(MAKE) -f objects/CMakeFiles/messspkgen_app.dir/build.make objects/CMakeFiles/messspkgen_app.dir/build +.PHONY : messspkgen_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Endian + +# Build rule for target. +isis3_unit_test_Endian: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Endian +.PHONY : isis3_unit_test_Endian + +# fast build rule for target. +isis3_unit_test_Endian/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Endian.dir/build.make objects/CMakeFiles/isis3_unit_test_Endian.dir/build +.PHONY : isis3_unit_test_Endian/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Application + +# Build rule for target. +isis3_unit_test_Application: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Application +.PHONY : isis3_unit_test_Application + +# fast build rule for target. +isis3_unit_test_Application/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Application.dir/build.make objects/CMakeFiles/isis3_unit_test_Application.dir/build +.PHONY : isis3_unit_test_Application/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_QtExporter + +# Build rule for target. +isis3_unit_test_QtExporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_QtExporter +.PHONY : isis3_unit_test_QtExporter + +# fast build rule for target. +isis3_unit_test_QtExporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_QtExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_QtExporter.dir/build +.PHONY : isis3_unit_test_QtExporter/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Kernels + +# Build rule for target. +isis3_unit_test_Kernels: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Kernels +.PHONY : isis3_unit_test_Kernels + +# fast build rule for target. +isis3_unit_test_Kernels/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Kernels.dir/build.make objects/CMakeFiles/isis3_unit_test_Kernels.dir/build +.PHONY : isis3_unit_test_Kernels/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TiffImporter + +# Build rule for target. +isis3_unit_test_TiffImporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TiffImporter +.PHONY : isis3_unit_test_TiffImporter + +# fast build rule for target. +isis3_unit_test_TiffImporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TiffImporter.dir/build.make objects/CMakeFiles/isis3_unit_test_TiffImporter.dir/build +.PHONY : isis3_unit_test_TiffImporter/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CubeCalculator + +# Build rule for target. +isis3_unit_test_CubeCalculator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeCalculator +.PHONY : isis3_unit_test_CubeCalculator + +# fast build rule for target. +isis3_unit_test_CubeCalculator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeCalculator.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeCalculator.dir/build +.PHONY : isis3_unit_test_CubeCalculator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraDetectorMap + +# Build rule for target. +isis3_unit_test_CameraDetectorMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraDetectorMap +.PHONY : isis3_unit_test_CameraDetectorMap + +# fast build rule for target. +isis3_unit_test_CameraDetectorMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraDetectorMap.dir/build +.PHONY : isis3_unit_test_CameraDetectorMap/fast + +#============================================================================= +# Target rules for targets named flip_app + +# Build rule for target. +flip_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 flip_app +.PHONY : flip_app + +# fast build rule for target. +flip_app/fast: + $(MAKE) -f objects/CMakeFiles/flip_app.dir/build.make objects/CMakeFiles/flip_app.dir/build +.PHONY : flip_app/fast + +#============================================================================= +# Target rules for targets named LambertConformal + +# Build rule for target. +LambertConformal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LambertConformal +.PHONY : LambertConformal + +# fast build rule for target. +LambertConformal/fast: + $(MAKE) -f objects/CMakeFiles/LambertConformal.dir/build.make objects/CMakeFiles/LambertConformal.dir/build +.PHONY : LambertConformal/fast + +#============================================================================= +# Target rules for targets named lrowac2pds_app + +# Build rule for target. +lrowac2pds_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lrowac2pds_app +.PHONY : lrowac2pds_app + +# fast build rule for target. +lrowac2pds_app/fast: + $(MAKE) -f objects/CMakeFiles/lrowac2pds_app.dir/build.make objects/CMakeFiles/lrowac2pds_app.dir/build +.PHONY : lrowac2pds_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GisGeometry + +# Build rule for target. +isis3_unit_test_GisGeometry: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GisGeometry +.PHONY : isis3_unit_test_GisGeometry + +# fast build rule for target. +isis3_unit_test_GisGeometry/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GisGeometry.dir/build.make objects/CMakeFiles/isis3_unit_test_GisGeometry.dir/build +.PHONY : isis3_unit_test_GisGeometry/fast + +#============================================================================= +# Target rules for targets named amica2isis_app + +# Build rule for target. +amica2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 amica2isis_app +.PHONY : amica2isis_app + +# fast build rule for target. +amica2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/amica2isis_app.dir/build.make objects/CMakeFiles/amica2isis_app.dir/build +.PHONY : amica2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlSequence + +# Build rule for target. +isis3_unit_test_PvlSequence: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlSequence +.PHONY : isis3_unit_test_PvlSequence + +# fast build rule for target. +isis3_unit_test_PvlSequence/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlSequence.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlSequence.dir/build +.PHONY : isis3_unit_test_PvlSequence/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Quaternion + +# Build rule for target. +isis3_unit_test_Quaternion: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Quaternion +.PHONY : isis3_unit_test_Quaternion + +# fast build rule for target. +isis3_unit_test_Quaternion/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Quaternion.dir/build.make objects/CMakeFiles/isis3_unit_test_Quaternion.dir/build +.PHONY : isis3_unit_test_Quaternion/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_EllipsoidShape + +# Build rule for target. +isis3_unit_test_EllipsoidShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EllipsoidShape +.PHONY : isis3_unit_test_EllipsoidShape + +# fast build rule for target. +isis3_unit_test_EllipsoidShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EllipsoidShape.dir/build.make objects/CMakeFiles/isis3_unit_test_EllipsoidShape.dir/build +.PHONY : isis3_unit_test_EllipsoidShape/fast + +#============================================================================= +# Target rules for targets named GridPolygonSeeder + +# Build rule for target. +GridPolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 GridPolygonSeeder +.PHONY : GridPolygonSeeder + +# fast build rule for target. +GridPolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/GridPolygonSeeder.dir/build.make objects/CMakeFiles/GridPolygonSeeder.dir/build +.PHONY : GridPolygonSeeder/fast + +#============================================================================= +# Target rules for targets named maptemplate_app + +# Build rule for target. +maptemplate_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 maptemplate_app +.PHONY : maptemplate_app + +# fast build rule for target. +maptemplate_app/fast: + $(MAKE) -f objects/CMakeFiles/maptemplate_app.dir/build.make objects/CMakeFiles/maptemplate_app.dir/build +.PHONY : maptemplate_app/fast + +#============================================================================= +# Target rules for targets named decorstretch_app + +# Build rule for target. +decorstretch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 decorstretch_app +.PHONY : decorstretch_app + +# fast build rule for target. +decorstretch_app/fast: + $(MAKE) -f objects/CMakeFiles/decorstretch_app.dir/build.make objects/CMakeFiles/decorstretch_app.dir/build +.PHONY : decorstretch_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LineScanCamera + +# Build rule for target. +isis3_unit_test_LineScanCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCamera +.PHONY : isis3_unit_test_LineScanCamera + +# fast build rule for target. +isis3_unit_test_LineScanCamera/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCamera.dir/build +.PHONY : isis3_unit_test_LineScanCamera/fast + +#============================================================================= +# Target rules for targets named cassini_unit_test_CissLabels + +# Build rule for target. +cassini_unit_test_CissLabels: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_CissLabels +.PHONY : cassini_unit_test_CissLabels + +# fast build rule for target. +cassini_unit_test_CissLabels/fast: + $(MAKE) -f objects/CMakeFiles/cassini_unit_test_CissLabels.dir/build.make objects/CMakeFiles/cassini_unit_test_CissLabels.dir/build +.PHONY : cassini_unit_test_CissLabels/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_FilterCachingAlgorithm + +# Build rule for target. +isis3_unit_test_FilterCachingAlgorithm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FilterCachingAlgorithm +.PHONY : isis3_unit_test_FilterCachingAlgorithm + +# fast build rule for target. +isis3_unit_test_FilterCachingAlgorithm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FilterCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_FilterCachingAlgorithm.dir/build +.PHONY : isis3_unit_test_FilterCachingAlgorithm/fast + +#============================================================================= +# Target rules for targets named SimpleCylindrical + +# Build rule for target. +SimpleCylindrical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SimpleCylindrical +.PHONY : SimpleCylindrical + +# fast build rule for target. +SimpleCylindrical/fast: + $(MAKE) -f objects/CMakeFiles/SimpleCylindrical.dir/build.make objects/CMakeFiles/SimpleCylindrical.dir/build +.PHONY : SimpleCylindrical/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AtmosModel + +# Build rule for target. +isis3_unit_test_AtmosModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AtmosModel +.PHONY : isis3_unit_test_AtmosModel + +# fast build rule for target. +isis3_unit_test_AtmosModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AtmosModel.dir/build.make objects/CMakeFiles/isis3_unit_test_AtmosModel.dir/build +.PHONY : isis3_unit_test_AtmosModel/fast + +#============================================================================= +# Target rules for targets named mvic2isis_app + +# Build rule for target. +mvic2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mvic2isis_app +.PHONY : mvic2isis_app + +# fast build rule for target. +mvic2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mvic2isis_app.dir/build.make objects/CMakeFiles/mvic2isis_app.dir/build +.PHONY : mvic2isis_app/fast + +#============================================================================= +# Target rules for targets named lronac2isis_app + +# Build rule for target. +lronac2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lronac2isis_app +.PHONY : lronac2isis_app + +# fast build rule for target. +lronac2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/lronac2isis_app.dir/build.make objects/CMakeFiles/lronac2isis_app.dir/build +.PHONY : lronac2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BasisFunction + +# Build rule for target. +isis3_unit_test_BasisFunction: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BasisFunction +.PHONY : isis3_unit_test_BasisFunction + +# fast build rule for target. +isis3_unit_test_BasisFunction/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BasisFunction.dir/build.make objects/CMakeFiles/isis3_unit_test_BasisFunction.dir/build +.PHONY : isis3_unit_test_BasisFunction/fast + +#============================================================================= +# Target rules for targets named AlbedoAtm + +# Build rule for target. +AlbedoAtm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 AlbedoAtm +.PHONY : AlbedoAtm + +# fast build rule for target. +AlbedoAtm/fast: + $(MAKE) -f objects/CMakeFiles/AlbedoAtm.dir/build.make objects/CMakeFiles/AlbedoAtm.dir/build +.PHONY : AlbedoAtm/fast + +#============================================================================= +# Target rules for targets named catoriglab_app + +# Build rule for target. +catoriglab_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 catoriglab_app +.PHONY : catoriglab_app + +# fast build rule for target. +catoriglab_app/fast: + $(MAKE) -f objects/CMakeFiles/catoriglab_app.dir/build.make objects/CMakeFiles/catoriglab_app.dir/build +.PHONY : catoriglab_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AlphaCube + +# Build rule for target. +isis3_unit_test_AlphaCube: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AlphaCube +.PHONY : isis3_unit_test_AlphaCube + +# fast build rule for target. +isis3_unit_test_AlphaCube/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AlphaCube.dir/build.make objects/CMakeFiles/isis3_unit_test_AlphaCube.dir/build +.PHONY : isis3_unit_test_AlphaCube/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_JP2Decoder + +# Build rule for target. +isis3_unit_test_JP2Decoder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Decoder +.PHONY : isis3_unit_test_JP2Decoder + +# fast build rule for target. +isis3_unit_test_JP2Decoder/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Decoder.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Decoder.dir/build +.PHONY : isis3_unit_test_JP2Decoder/fast + +#============================================================================= +# Target rules for targets named Topo + +# Build rule for target. +Topo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Topo +.PHONY : Topo + +# fast build rule for target. +Topo/fast: + $(MAKE) -f objects/CMakeFiles/Topo.dir/build.make objects/CMakeFiles/Topo.dir/build +.PHONY : Topo/fast + +#============================================================================= +# Target rules for targets named Equirectangular + +# Build rule for target. +Equirectangular: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Equirectangular +.PHONY : Equirectangular + +# fast build rule for target. +Equirectangular/fast: + $(MAKE) -f objects/CMakeFiles/Equirectangular.dir/build.make objects/CMakeFiles/Equirectangular.dir/build +.PHONY : Equirectangular/fast + +#============================================================================= +# Target rules for targets named Shade + +# Build rule for target. +Shade: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Shade +.PHONY : Shade + +# fast build rule for target. +Shade/fast: + $(MAKE) -f objects/CMakeFiles/Shade.dir/build.make objects/CMakeFiles/Shade.dir/build +.PHONY : Shade/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_InlineCalculator + +# Build rule for target. +isis3_unit_test_InlineCalculator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InlineCalculator +.PHONY : isis3_unit_test_InlineCalculator + +# fast build rule for target. +isis3_unit_test_InlineCalculator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InlineCalculator.dir/build.make objects/CMakeFiles/isis3_unit_test_InlineCalculator.dir/build +.PHONY : isis3_unit_test_InlineCalculator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Process + +# Build rule for target. +isis3_unit_test_Process: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Process +.PHONY : isis3_unit_test_Process + +# fast build rule for target. +isis3_unit_test_Process/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Process.dir/build.make objects/CMakeFiles/isis3_unit_test_Process.dir/build +.PHONY : isis3_unit_test_Process/fast + +#============================================================================= +# Target rules for targets named viknopepper_app + +# Build rule for target. +viknopepper_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 viknopepper_app +.PHONY : viknopepper_app + +# fast build rule for target. +viknopepper_app/fast: + $(MAKE) -f objects/CMakeFiles/viknopepper_app.dir/build.make objects/CMakeFiles/viknopepper_app.dir/build +.PHONY : viknopepper_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_UserInterface + +# Build rule for target. +isis3_unit_test_UserInterface: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UserInterface +.PHONY : isis3_unit_test_UserInterface + +# fast build rule for target. +isis3_unit_test_UserInterface/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UserInterface.dir/build.make objects/CMakeFiles/isis3_unit_test_UserInterface.dir/build +.PHONY : isis3_unit_test_UserInterface/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ID + +# Build rule for target. +isis3_unit_test_ID: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ID +.PHONY : isis3_unit_test_ID + +# fast build rule for target. +isis3_unit_test_ID/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ID.dir/build.make objects/CMakeFiles/isis3_unit_test_ID.dir/build +.PHONY : isis3_unit_test_ID/fast + +#============================================================================= +# Target rules for targets named GradientOperator + +# Build rule for target. +GradientOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 GradientOperator +.PHONY : GradientOperator + +# fast build rule for target. +GradientOperator/fast: + $(MAKE) -f objects/CMakeFiles/GradientOperator.dir/build.make objects/CMakeFiles/GradientOperator.dir/build +.PHONY : GradientOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PolygonSeeder + +# Build rule for target. +isis3_unit_test_PolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolygonSeeder +.PHONY : isis3_unit_test_PolygonSeeder + +# fast build rule for target. +isis3_unit_test_PolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_PolygonSeeder.dir/build +.PHONY : isis3_unit_test_PolygonSeeder/fast + +#============================================================================= +# Target rules for targets named pds2isis_app + +# Build rule for target. +pds2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pds2isis_app +.PHONY : pds2isis_app + +# fast build rule for target. +pds2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/pds2isis_app.dir/build.make objects/CMakeFiles/pds2isis_app.dir/build +.PHONY : pds2isis_app/fast + +#============================================================================= +# Target rules for targets named IdealCamera + +# Build rule for target. +IdealCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 IdealCamera +.PHONY : IdealCamera + +# fast build rule for target. +IdealCamera/fast: + $(MAKE) -f objects/CMakeFiles/IdealCamera.dir/build.make objects/CMakeFiles/IdealCamera.dir/build +.PHONY : IdealCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LambertConformal + +# Build rule for target. +isis3_unit_test_LambertConformal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LambertConformal +.PHONY : isis3_unit_test_LambertConformal + +# fast build rule for target. +isis3_unit_test_LambertConformal/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LambertConformal.dir/build.make objects/CMakeFiles/isis3_unit_test_LambertConformal.dir/build +.PHONY : isis3_unit_test_LambertConformal/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Shade + +# Build rule for target. +isis3_unit_test_Shade: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Shade +.PHONY : isis3_unit_test_Shade + +# fast build rule for target. +isis3_unit_test_Shade/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Shade.dir/build.make objects/CMakeFiles/isis3_unit_test_Shade.dir/build +.PHONY : isis3_unit_test_Shade/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_EmbreeTargetShape + +# Build rule for target. +isis3_unit_test_EmbreeTargetShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EmbreeTargetShape +.PHONY : isis3_unit_test_EmbreeTargetShape + +# fast build rule for target. +isis3_unit_test_EmbreeTargetShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EmbreeTargetShape.dir/build.make objects/CMakeFiles/isis3_unit_test_EmbreeTargetShape.dir/build +.PHONY : isis3_unit_test_EmbreeTargetShape/fast + +#============================================================================= +# Target rules for targets named voy2isis_app + +# Build rule for target. +voy2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 voy2isis_app +.PHONY : voy2isis_app + +# fast build rule for target. +voy2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/voy2isis_app.dir/build.make objects/CMakeFiles/voy2isis_app.dir/build +.PHONY : voy2isis_app/fast + +#============================================================================= +# Target rules for targets named Mixed + +# Build rule for target. +Mixed: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Mixed +.PHONY : Mixed + +# fast build rule for target. +Mixed/fast: + $(MAKE) -f objects/CMakeFiles/Mixed.dir/build.make objects/CMakeFiles/Mixed.dir/build +.PHONY : Mixed/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraPointInfo + +# Build rule for target. +isis3_unit_test_CameraPointInfo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraPointInfo +.PHONY : isis3_unit_test_CameraPointInfo + +# fast build rule for target. +isis3_unit_test_CameraPointInfo/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraPointInfo.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraPointInfo.dir/build +.PHONY : isis3_unit_test_CameraPointInfo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_StandardDeviationOperator + +# Build rule for target. +isis3_unit_test_StandardDeviationOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StandardDeviationOperator +.PHONY : isis3_unit_test_StandardDeviationOperator + +# fast build rule for target. +isis3_unit_test_StandardDeviationOperator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StandardDeviationOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_StandardDeviationOperator.dir/build +.PHONY : isis3_unit_test_StandardDeviationOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LommelSeeliger + +# Build rule for target. +isis3_unit_test_LommelSeeliger: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LommelSeeliger +.PHONY : isis3_unit_test_LommelSeeliger + +# fast build rule for target. +isis3_unit_test_LommelSeeliger/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LommelSeeliger.dir/build.make objects/CMakeFiles/isis3_unit_test_LommelSeeliger.dir/build +.PHONY : isis3_unit_test_LommelSeeliger/fast + +#============================================================================= +# Target rules for targets named ShadeAtm + +# Build rule for target. +ShadeAtm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ShadeAtm +.PHONY : ShadeAtm + +# fast build rule for target. +ShadeAtm/fast: + $(MAKE) -f objects/CMakeFiles/ShadeAtm.dir/build.make objects/CMakeFiles/ShadeAtm.dir/build +.PHONY : ShadeAtm/fast + +#============================================================================= +# Target rules for targets named thmbasemap1_app + +# Build rule for target. +thmbasemap1_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thmbasemap1_app +.PHONY : thmbasemap1_app + +# fast build rule for target. +thmbasemap1_app/fast: + $(MAKE) -f objects/CMakeFiles/thmbasemap1_app.dir/build.make objects/CMakeFiles/thmbasemap1_app.dir/build +.PHONY : thmbasemap1_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NaifStatus + +# Build rule for target. +isis3_unit_test_NaifStatus: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifStatus +.PHONY : isis3_unit_test_NaifStatus + +# fast build rule for target. +isis3_unit_test_NaifStatus/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifStatus.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifStatus.dir/build +.PHONY : isis3_unit_test_NaifStatus/fast + +#============================================================================= +# Target rules for targets named handmos_app + +# Build rule for target. +handmos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 handmos_app +.PHONY : handmos_app + +# fast build rule for target. +handmos_app/fast: + $(MAKE) -f objects/CMakeFiles/handmos_app.dir/build.make objects/CMakeFiles/handmos_app.dir/build +.PHONY : handmos_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BundleUtilities + +# Build rule for target. +isis3_unit_test_BundleUtilities: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleUtilities +.PHONY : isis3_unit_test_BundleUtilities + +# fast build rule for target. +isis3_unit_test_BundleUtilities/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleUtilities.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleUtilities.dir/build +.PHONY : isis3_unit_test_BundleUtilities/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_EmbreeTargetManager + +# Build rule for target. +isis3_unit_test_EmbreeTargetManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EmbreeTargetManager +.PHONY : isis3_unit_test_EmbreeTargetManager + +# fast build rule for target. +isis3_unit_test_EmbreeTargetManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EmbreeTargetManager.dir/build.make objects/CMakeFiles/isis3_unit_test_EmbreeTargetManager.dir/build +.PHONY : isis3_unit_test_EmbreeTargetManager/fast + +#============================================================================= +# Target rules for targets named pvldiff_app + +# Build rule for target. +pvldiff_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pvldiff_app +.PHONY : pvldiff_app + +# fast build rule for target. +pvldiff_app/fast: + $(MAKE) -f objects/CMakeFiles/pvldiff_app.dir/build.make objects/CMakeFiles/pvldiff_app.dir/build +.PHONY : pvldiff_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CorrelationMatrix + +# Build rule for target. +isis3_unit_test_CorrelationMatrix: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CorrelationMatrix +.PHONY : isis3_unit_test_CorrelationMatrix + +# fast build rule for target. +isis3_unit_test_CorrelationMatrix/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CorrelationMatrix.dir/build.make objects/CMakeFiles/isis3_unit_test_CorrelationMatrix.dir/build +.PHONY : isis3_unit_test_CorrelationMatrix/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ImagePolygon + +# Build rule for target. +isis3_unit_test_ImagePolygon: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImagePolygon +.PHONY : isis3_unit_test_ImagePolygon + +# fast build rule for target. +isis3_unit_test_ImagePolygon/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImagePolygon.dir/build.make objects/CMakeFiles/isis3_unit_test_ImagePolygon.dir/build +.PHONY : isis3_unit_test_ImagePolygon/fast + +#============================================================================= +# Target rules for targets named LunarAzimuthalEqualArea + +# Build rule for target. +LunarAzimuthalEqualArea: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LunarAzimuthalEqualArea +.PHONY : LunarAzimuthalEqualArea + +# fast build rule for target. +LunarAzimuthalEqualArea/fast: + $(MAKE) -f objects/CMakeFiles/LunarAzimuthalEqualArea.dir/build.make objects/CMakeFiles/LunarAzimuthalEqualArea.dir/build +.PHONY : LunarAzimuthalEqualArea/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LinearAlgebra + +# Build rule for target. +isis3_unit_test_LinearAlgebra: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LinearAlgebra +.PHONY : isis3_unit_test_LinearAlgebra + +# fast build rule for target. +isis3_unit_test_LinearAlgebra/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LinearAlgebra.dir/build.make objects/CMakeFiles/isis3_unit_test_LinearAlgebra.dir/build +.PHONY : isis3_unit_test_LinearAlgebra/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraFactory + +# Build rule for target. +isis3_unit_test_CameraFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraFactory +.PHONY : isis3_unit_test_CameraFactory + +# fast build rule for target. +isis3_unit_test_CameraFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraFactory.dir/build +.PHONY : isis3_unit_test_CameraFactory/fast + +#============================================================================= +# Target rules for targets named LunarLambert + +# Build rule for target. +LunarLambert: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LunarLambert +.PHONY : LunarLambert + +# fast build rule for target. +LunarLambert/fast: + $(MAKE) -f objects/CMakeFiles/LunarLambert.dir/build.make objects/CMakeFiles/LunarLambert.dir/build +.PHONY : LunarLambert/fast + +#============================================================================= +# Target rules for targets named hrsc2isis_app + +# Build rule for target. +hrsc2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hrsc2isis_app +.PHONY : hrsc2isis_app + +# fast build rule for target. +hrsc2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/hrsc2isis_app.dir/build.make objects/CMakeFiles/hrsc2isis_app.dir/build +.PHONY : hrsc2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BoxcarManager + +# Build rule for target. +isis3_unit_test_BoxcarManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BoxcarManager +.PHONY : isis3_unit_test_BoxcarManager + +# fast build rule for target. +isis3_unit_test_BoxcarManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BoxcarManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BoxcarManager.dir/build +.PHONY : isis3_unit_test_BoxcarManager/fast + +#============================================================================= +# Target rules for targets named TopoAtm + +# Build rule for target. +TopoAtm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 TopoAtm +.PHONY : TopoAtm + +# fast build rule for target. +TopoAtm/fast: + $(MAKE) -f objects/CMakeFiles/TopoAtm.dir/build.make objects/CMakeFiles/TopoAtm.dir/build +.PHONY : TopoAtm/fast + +#============================================================================= +# Target rules for targets named hsv2rgb_app + +# Build rule for target. +hsv2rgb_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hsv2rgb_app +.PHONY : hsv2rgb_app + +# fast build rule for target. +hsv2rgb_app/fast: + $(MAKE) -f objects/CMakeFiles/hsv2rgb_app.dir/build.make objects/CMakeFiles/hsv2rgb_app.dir/build +.PHONY : hsv2rgb_app/fast + +#============================================================================= +# Target rules for targets named Isotropic1 + +# Build rule for target. +Isotropic1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Isotropic1 +.PHONY : Isotropic1 + +# fast build rule for target. +Isotropic1/fast: + $(MAKE) -f objects/CMakeFiles/Isotropic1.dir/build.make objects/CMakeFiles/Isotropic1.dir/build +.PHONY : Isotropic1/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PolygonTools + +# Build rule for target. +isis3_unit_test_PolygonTools: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolygonTools +.PHONY : isis3_unit_test_PolygonTools + +# fast build rule for target. +isis3_unit_test_PolygonTools/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolygonTools.dir/build.make objects/CMakeFiles/isis3_unit_test_PolygonTools.dir/build +.PHONY : isis3_unit_test_PolygonTools/fast + +#============================================================================= +# Target rules for targets named mgs_unit_test_MocNarrowAngleSumming + +# Build rule for target. +mgs_unit_test_MocNarrowAngleSumming: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocNarrowAngleSumming +.PHONY : mgs_unit_test_MocNarrowAngleSumming + +# fast build rule for target. +mgs_unit_test_MocNarrowAngleSumming/fast: + $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocNarrowAngleSumming.dir/build.make objects/CMakeFiles/mgs_unit_test_MocNarrowAngleSumming.dir/build +.PHONY : mgs_unit_test_MocNarrowAngleSumming/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraSkyMap + +# Build rule for target. +isis3_unit_test_CameraSkyMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraSkyMap +.PHONY : isis3_unit_test_CameraSkyMap + +# fast build rule for target. +isis3_unit_test_CameraSkyMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraSkyMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraSkyMap.dir/build +.PHONY : isis3_unit_test_CameraSkyMap/fast + +#============================================================================= +# Target rules for targets named moc2isis_app + +# Build rule for target. +moc2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 moc2isis_app +.PHONY : moc2isis_app + +# fast build rule for target. +moc2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/moc2isis_app.dir/build.make objects/CMakeFiles/moc2isis_app.dir/build +.PHONY : moc2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CubeDataThread + +# Build rule for target. +isis3_unit_test_CubeDataThread: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeDataThread +.PHONY : isis3_unit_test_CubeDataThread + +# fast build rule for target. +isis3_unit_test_CubeDataThread/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeDataThread.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeDataThread.dir/build +.PHONY : isis3_unit_test_CubeDataThread/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LineManager + +# Build rule for target. +isis3_unit_test_LineManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineManager +.PHONY : isis3_unit_test_LineManager + +# fast build rule for target. +isis3_unit_test_LineManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineManager.dir/build.make objects/CMakeFiles/isis3_unit_test_LineManager.dir/build +.PHONY : isis3_unit_test_LineManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraFocalPlaneMap + +# Build rule for target. +isis3_unit_test_CameraFocalPlaneMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraFocalPlaneMap +.PHONY : isis3_unit_test_CameraFocalPlaneMap + +# fast build rule for target. +isis3_unit_test_CameraFocalPlaneMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraFocalPlaneMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraFocalPlaneMap.dir/build +.PHONY : isis3_unit_test_CameraFocalPlaneMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_StatCumProbDistDynCalc + +# Build rule for target. +isis3_unit_test_StatCumProbDistDynCalc: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StatCumProbDistDynCalc +.PHONY : isis3_unit_test_StatCumProbDistDynCalc + +# fast build rule for target. +isis3_unit_test_StatCumProbDistDynCalc/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StatCumProbDistDynCalc.dir/build.make objects/CMakeFiles/isis3_unit_test_StatCumProbDistDynCalc.dir/build +.PHONY : isis3_unit_test_StatCumProbDistDynCalc/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadarGroundRangeMap + +# Build rule for target. +isis3_unit_test_RadarGroundRangeMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarGroundRangeMap +.PHONY : isis3_unit_test_RadarGroundRangeMap + +# fast build rule for target. +isis3_unit_test_RadarGroundRangeMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarGroundRangeMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarGroundRangeMap.dir/build +.PHONY : isis3_unit_test_RadarGroundRangeMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraGroundMap + +# Build rule for target. +isis3_unit_test_CameraGroundMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraGroundMap +.PHONY : isis3_unit_test_CameraGroundMap + +# fast build rule for target. +isis3_unit_test_CameraGroundMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraGroundMap.dir/build +.PHONY : isis3_unit_test_CameraGroundMap/fast + +#============================================================================= +# Target rules for targets named voycal_app + +# Build rule for target. +voycal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 voycal_app +.PHONY : voycal_app + +# fast build rule for target. +voycal_app/fast: + $(MAKE) -f objects/CMakeFiles/voycal_app.dir/build.make objects/CMakeFiles/voycal_app.dir/build +.PHONY : voycal_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Affine + +# Build rule for target. +isis3_unit_test_Affine: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Affine +.PHONY : isis3_unit_test_Affine + +# fast build rule for target. +isis3_unit_test_Affine/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Affine.dir/build.make objects/CMakeFiles/isis3_unit_test_Affine.dir/build +.PHONY : isis3_unit_test_Affine/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlCubeGraphNode + +# Build rule for target. +isis3_unit_test_ControlCubeGraphNode: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlCubeGraphNode +.PHONY : isis3_unit_test_ControlCubeGraphNode + +# fast build rule for target. +isis3_unit_test_ControlCubeGraphNode/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlCubeGraphNode.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlCubeGraphNode.dir/build +.PHONY : isis3_unit_test_ControlCubeGraphNode/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Albedo + +# Build rule for target. +isis3_unit_test_Albedo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Albedo +.PHONY : isis3_unit_test_Albedo + +# fast build rule for target. +isis3_unit_test_Albedo/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Albedo.dir/build.make objects/CMakeFiles/isis3_unit_test_Albedo.dir/build +.PHONY : isis3_unit_test_Albedo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CameraStatistics + +# Build rule for target. +isis3_unit_test_CameraStatistics: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraStatistics +.PHONY : isis3_unit_test_CameraStatistics + +# fast build rule for target. +isis3_unit_test_CameraStatistics/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraStatistics.dir/build +.PHONY : isis3_unit_test_CameraStatistics/fast + +#============================================================================= +# Target rules for targets named pds2hideal_app + +# Build rule for target. +pds2hideal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pds2hideal_app +.PHONY : pds2hideal_app + +# fast build rule for target. +pds2hideal_app/fast: + $(MAKE) -f objects/CMakeFiles/pds2hideal_app.dir/build.make objects/CMakeFiles/pds2hideal_app.dir/build +.PHONY : pds2hideal_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NaifDskApi + +# Build rule for target. +isis3_unit_test_NaifDskApi: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifDskApi +.PHONY : isis3_unit_test_NaifDskApi + +# fast build rule for target. +isis3_unit_test_NaifDskApi/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifDskApi.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifDskApi.dir/build +.PHONY : isis3_unit_test_NaifDskApi/fast + +#============================================================================= +# Target rules for targets named isis2pds_app + +# Build rule for target. +isis2pds_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis2pds_app +.PHONY : isis2pds_app + +# fast build rule for target. +isis2pds_app/fast: + $(MAKE) -f objects/CMakeFiles/isis2pds_app.dir/build.make objects/CMakeFiles/isis2pds_app.dir/build +.PHONY : isis2pds_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Selection + +# Build rule for target. +isis3_unit_test_Selection: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Selection +.PHONY : isis3_unit_test_Selection + +# fast build rule for target. +isis3_unit_test_Selection/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Selection.dir/build.make objects/CMakeFiles/isis3_unit_test_Selection.dir/build +.PHONY : isis3_unit_test_Selection/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Angle + +# Build rule for target. +isis3_unit_test_Angle: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Angle +.PHONY : isis3_unit_test_Angle + +# fast build rule for target. +isis3_unit_test_Angle/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Angle.dir/build.make objects/CMakeFiles/isis3_unit_test_Angle.dir/build +.PHONY : isis3_unit_test_Angle/fast + +#============================================================================= +# Target rules for targets named Mariner10Camera + +# Build rule for target. +Mariner10Camera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Mariner10Camera +.PHONY : Mariner10Camera + +# fast build rule for target. +Mariner10Camera/fast: + $(MAKE) -f objects/CMakeFiles/Mariner10Camera.dir/build.make objects/CMakeFiles/Mariner10Camera.dir/build +.PHONY : Mariner10Camera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GaussianDistribution + +# Build rule for target. +isis3_unit_test_GaussianDistribution: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GaussianDistribution +.PHONY : isis3_unit_test_GaussianDistribution + +# fast build rule for target. +isis3_unit_test_GaussianDistribution/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GaussianDistribution.dir/build.make objects/CMakeFiles/isis3_unit_test_GaussianDistribution.dir/build +.PHONY : isis3_unit_test_GaussianDistribution/fast + +#============================================================================= +# Target rules for targets named MinimumDifference + +# Build rule for target. +MinimumDifference: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MinimumDifference +.PHONY : MinimumDifference + +# fast build rule for target. +MinimumDifference/fast: + $(MAKE) -f objects/CMakeFiles/MinimumDifference.dir/build.make objects/CMakeFiles/MinimumDifference.dir/build +.PHONY : MinimumDifference/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Anisotropic2 + +# Build rule for target. +isis3_unit_test_Anisotropic2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Anisotropic2 +.PHONY : isis3_unit_test_Anisotropic2 + +# fast build rule for target. +isis3_unit_test_Anisotropic2/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Anisotropic2.dir/build.make objects/CMakeFiles/isis3_unit_test_Anisotropic2.dir/build +.PHONY : isis3_unit_test_Anisotropic2/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Area3D + +# Build rule for target. +isis3_unit_test_Area3D: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Area3D +.PHONY : isis3_unit_test_Area3D + +# fast build rule for target. +isis3_unit_test_Area3D/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Area3D.dir/build.make objects/CMakeFiles/isis3_unit_test_Area3D.dir/build +.PHONY : isis3_unit_test_Area3D/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GradientOperator + +# Build rule for target. +isis3_unit_test_GradientOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GradientOperator +.PHONY : isis3_unit_test_GradientOperator + +# fast build rule for target. +isis3_unit_test_GradientOperator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GradientOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_GradientOperator.dir/build +.PHONY : isis3_unit_test_GradientOperator/fast + +#============================================================================= +# Target rules for targets named cnetcheck_app + +# Build rule for target. +cnetcheck_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetcheck_app +.PHONY : cnetcheck_app + +# fast build rule for target. +cnetcheck_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetcheck_app.dir/build.make objects/CMakeFiles/cnetcheck_app.dir/build +.PHONY : cnetcheck_app/fast + +#============================================================================= +# Target rules for targets named percent_app + +# Build rule for target. +percent_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 percent_app +.PHONY : percent_app + +# fast build rule for target. +percent_app/fast: + $(MAKE) -f objects/CMakeFiles/percent_app.dir/build.make objects/CMakeFiles/percent_app.dir/build +.PHONY : percent_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AlbedoAtm + +# Build rule for target. +isis3_unit_test_AlbedoAtm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AlbedoAtm +.PHONY : isis3_unit_test_AlbedoAtm + +# fast build rule for target. +isis3_unit_test_AlbedoAtm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AlbedoAtm.dir/build.make objects/CMakeFiles/isis3_unit_test_AlbedoAtm.dir/build +.PHONY : isis3_unit_test_AlbedoAtm/fast + +#============================================================================= +# Target rules for targets named isis3 + +# Build rule for target. +isis3: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3 +.PHONY : isis3 + +# fast build rule for target. +isis3/fast: + $(MAKE) -f objects/CMakeFiles/isis3.dir/build.make objects/CMakeFiles/isis3.dir/build +.PHONY : isis3/fast + +#============================================================================= +# Target rules for targets named NewHorizonsLeisaCamera + +# Build rule for target. +NewHorizonsLeisaCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsLeisaCamera +.PHONY : NewHorizonsLeisaCamera + +# fast build rule for target. +NewHorizonsLeisaCamera/fast: + $(MAKE) -f objects/CMakeFiles/NewHorizonsLeisaCamera.dir/build.make objects/CMakeFiles/NewHorizonsLeisaCamera.dir/build +.PHONY : NewHorizonsLeisaCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PushFrameCameraGroundMap + +# Build rule for target. +isis3_unit_test_PushFrameCameraGroundMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCameraGroundMap +.PHONY : isis3_unit_test_PushFrameCameraGroundMap + +# fast build rule for target. +isis3_unit_test_PushFrameCameraGroundMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCameraGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCameraGroundMap.dir/build +.PHONY : isis3_unit_test_PushFrameCameraGroundMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BufferManager + +# Build rule for target. +isis3_unit_test_BufferManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BufferManager +.PHONY : isis3_unit_test_BufferManager + +# fast build rule for target. +isis3_unit_test_BufferManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BufferManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BufferManager.dir/build +.PHONY : isis3_unit_test_BufferManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CubeAttribute + +# Build rule for target. +isis3_unit_test_CubeAttribute: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeAttribute +.PHONY : isis3_unit_test_CubeAttribute + +# fast build rule for target. +isis3_unit_test_CubeAttribute/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeAttribute.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeAttribute.dir/build +.PHONY : isis3_unit_test_CubeAttribute/fast + +#============================================================================= +# Target rules for targets named gaussstretch_app + +# Build rule for target. +gaussstretch_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gaussstretch_app +.PHONY : gaussstretch_app + +# fast build rule for target. +gaussstretch_app/fast: + $(MAKE) -f objects/CMakeFiles/gaussstretch_app.dir/build.make objects/CMakeFiles/gaussstretch_app.dir/build +.PHONY : gaussstretch_app/fast + +#============================================================================= +# Target rules for targets named MinnaertEmpirical + +# Build rule for target. +MinnaertEmpirical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 MinnaertEmpirical +.PHONY : MinnaertEmpirical + +# fast build rule for target. +MinnaertEmpirical/fast: + $(MAKE) -f objects/CMakeFiles/MinnaertEmpirical.dir/build.make objects/CMakeFiles/MinnaertEmpirical.dir/build +.PHONY : MinnaertEmpirical/fast + +#============================================================================= +# Target rules for targets named hicubeit_app + +# Build rule for target. +hicubeit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hicubeit_app +.PHONY : hicubeit_app + +# fast build rule for target. +hicubeit_app/fast: + $(MAKE) -f objects/CMakeFiles/hicubeit_app.dir/build.make objects/CMakeFiles/hicubeit_app.dir/build +.PHONY : hicubeit_app/fast + +#============================================================================= +# Target rules for targets named lopdsgen_app + +# Build rule for target. +lopdsgen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 lopdsgen_app +.PHONY : lopdsgen_app + +# fast build rule for target. +lopdsgen_app/fast: + $(MAKE) -f objects/CMakeFiles/lopdsgen_app.dir/build.make objects/CMakeFiles/lopdsgen_app.dir/build +.PHONY : lopdsgen_app/fast + +#============================================================================= +# Target rules for targets named cnetedit_app + +# Build rule for target. +cnetedit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetedit_app +.PHONY : cnetedit_app + +# fast build rule for target. +cnetedit_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetedit_app.dir/build.make objects/CMakeFiles/cnetedit_app.dir/build +.PHONY : cnetedit_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Kernel + +# Build rule for target. +isis3_unit_test_Kernel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Kernel +.PHONY : isis3_unit_test_Kernel + +# fast build rule for target. +isis3_unit_test_Kernel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Kernel.dir/build.make objects/CMakeFiles/isis3_unit_test_Kernel.dir/build +.PHONY : isis3_unit_test_Kernel/fast + +#============================================================================= +# Target rules for targets named fillgap_app + +# Build rule for target. +fillgap_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fillgap_app +.PHONY : fillgap_app + +# fast build rule for target. +fillgap_app/fast: + $(MAKE) -f objects/CMakeFiles/fillgap_app.dir/build.make objects/CMakeFiles/fillgap_app.dir/build +.PHONY : fillgap_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Basis1VariableFunction + +# Build rule for target. +isis3_unit_test_Basis1VariableFunction: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Basis1VariableFunction +.PHONY : isis3_unit_test_Basis1VariableFunction + +# fast build rule for target. +isis3_unit_test_Basis1VariableFunction/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Basis1VariableFunction.dir/build.make objects/CMakeFiles/isis3_unit_test_Basis1VariableFunction.dir/build +.PHONY : isis3_unit_test_Basis1VariableFunction/fast + +#============================================================================= +# Target rules for targets named cassini_unit_test_IssNACamera + +# Build rule for target. +cassini_unit_test_IssNACamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_IssNACamera +.PHONY : cassini_unit_test_IssNACamera + +# fast build rule for target. +cassini_unit_test_IssNACamera/fast: + $(MAKE) -f objects/CMakeFiles/cassini_unit_test_IssNACamera.dir/build.make objects/CMakeFiles/cassini_unit_test_IssNACamera.dir/build +.PHONY : cassini_unit_test_IssNACamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Blobber + +# Build rule for target. +isis3_unit_test_Blobber: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Blobber +.PHONY : isis3_unit_test_Blobber + +# fast build rule for target. +isis3_unit_test_Blobber/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Blobber.dir/build.make objects/CMakeFiles/isis3_unit_test_Blobber.dir/build +.PHONY : isis3_unit_test_Blobber/fast + +#============================================================================= +# Target rules for targets named VimsCamera + +# Build rule for target. +VimsCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 VimsCamera +.PHONY : VimsCamera + +# fast build rule for target. +VimsCamera/fast: + $(MAKE) -f objects/CMakeFiles/VimsCamera.dir/build.make objects/CMakeFiles/VimsCamera.dir/build +.PHONY : VimsCamera/fast + +#============================================================================= +# Target rules for targets named cnetref_app + +# Build rule for target. +cnetref_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetref_app +.PHONY : cnetref_app + +# fast build rule for target. +cnetref_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetref_app.dir/build.make objects/CMakeFiles/cnetref_app.dir/build +.PHONY : cnetref_app/fast + +#============================================================================= +# Target rules for targets named specpix_app + +# Build rule for target. +specpix_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 specpix_app +.PHONY : specpix_app + +# fast build rule for target. +specpix_app/fast: + $(MAKE) -f objects/CMakeFiles/specpix_app.dir/build.make objects/CMakeFiles/specpix_app.dir/build +.PHONY : specpix_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BoxcarCachingAlgorithm + +# Build rule for target. +isis3_unit_test_BoxcarCachingAlgorithm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BoxcarCachingAlgorithm +.PHONY : isis3_unit_test_BoxcarCachingAlgorithm + +# fast build rule for target. +isis3_unit_test_BoxcarCachingAlgorithm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BoxcarCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_BoxcarCachingAlgorithm.dir/build +.PHONY : isis3_unit_test_BoxcarCachingAlgorithm/fast + +#============================================================================= +# Target rules for targets named ctxevenodd_app + +# Build rule for target. +ctxevenodd_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ctxevenodd_app +.PHONY : ctxevenodd_app + +# fast build rule for target. +ctxevenodd_app/fast: + $(MAKE) -f objects/CMakeFiles/ctxevenodd_app.dir/build.make objects/CMakeFiles/ctxevenodd_app.dir/build +.PHONY : ctxevenodd_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Calculator + +# Build rule for target. +isis3_unit_test_Calculator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Calculator +.PHONY : isis3_unit_test_Calculator + +# fast build rule for target. +isis3_unit_test_Calculator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Calculator.dir/build.make objects/CMakeFiles/isis3_unit_test_Calculator.dir/build +.PHONY : isis3_unit_test_Calculator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_EquatorialCylindricalShape + +# Build rule for target. +isis3_unit_test_EquatorialCylindricalShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EquatorialCylindricalShape +.PHONY : isis3_unit_test_EquatorialCylindricalShape + +# fast build rule for target. +isis3_unit_test_EquatorialCylindricalShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EquatorialCylindricalShape.dir/build.make objects/CMakeFiles/isis3_unit_test_EquatorialCylindricalShape.dir/build +.PHONY : isis3_unit_test_EquatorialCylindricalShape/fast + +#============================================================================= +# Target rules for targets named spiceinit_app + +# Build rule for target. +spiceinit_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spiceinit_app +.PHONY : spiceinit_app + +# fast build rule for target. +spiceinit_app/fast: + $(MAKE) -f objects/CMakeFiles/spiceinit_app.dir/build.make objects/CMakeFiles/spiceinit_app.dir/build +.PHONY : spiceinit_app/fast + +#============================================================================= +# Target rules for targets named photrim_app + +# Build rule for target. +photrim_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 photrim_app +.PHONY : photrim_app + +# fast build rule for target. +photrim_app/fast: + $(MAKE) -f objects/CMakeFiles/photrim_app.dir/build.make objects/CMakeFiles/photrim_app.dir/build +.PHONY : photrim_app/fast + +#============================================================================= +# Target rules for targets named Robinson + +# Build rule for target. +Robinson: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Robinson +.PHONY : Robinson + +# fast build rule for target. +Robinson/fast: + $(MAKE) -f objects/CMakeFiles/Robinson.dir/build.make objects/CMakeFiles/Robinson.dir/build +.PHONY : Robinson/fast + +#============================================================================= +# Target rules for targets named deriv_app + +# Build rule for target. +deriv_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 deriv_app +.PHONY : deriv_app + +# fast build rule for target. +deriv_app/fast: + $(MAKE) -f objects/CMakeFiles/deriv_app.dir/build.make objects/CMakeFiles/deriv_app.dir/build +.PHONY : deriv_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Brick + +# Build rule for target. +isis3_unit_test_Brick: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Brick +.PHONY : isis3_unit_test_Brick + +# fast build rule for target. +isis3_unit_test_Brick/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Brick.dir/build.make objects/CMakeFiles/isis3_unit_test_Brick.dir/build +.PHONY : isis3_unit_test_Brick/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Buffer + +# Build rule for target. +isis3_unit_test_Buffer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Buffer +.PHONY : isis3_unit_test_Buffer + +# fast build rule for target. +isis3_unit_test_Buffer/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Buffer.dir/build.make objects/CMakeFiles/isis3_unit_test_Buffer.dir/build +.PHONY : isis3_unit_test_Buffer/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlNetVersioner + +# Build rule for target. +isis3_unit_test_ControlNetVersioner: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetVersioner +.PHONY : isis3_unit_test_ControlNetVersioner + +# fast build rule for target. +isis3_unit_test_ControlNetVersioner/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetVersioner.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetVersioner.dir/build +.PHONY : isis3_unit_test_ControlNetVersioner/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Anisotropic1 + +# Build rule for target. +isis3_unit_test_Anisotropic1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Anisotropic1 +.PHONY : isis3_unit_test_Anisotropic1 + +# fast build rule for target. +isis3_unit_test_Anisotropic1/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Anisotropic1.dir/build.make objects/CMakeFiles/isis3_unit_test_Anisotropic1.dir/build +.PHONY : isis3_unit_test_Anisotropic1/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LineScanCameraDetectorMap + +# Build rule for target. +isis3_unit_test_LineScanCameraDetectorMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCameraDetectorMap +.PHONY : isis3_unit_test_LineScanCameraDetectorMap + +# fast build rule for target. +isis3_unit_test_LineScanCameraDetectorMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCameraDetectorMap.dir/build +.PHONY : isis3_unit_test_LineScanCameraDetectorMap/fast + +#============================================================================= +# Target rules for targets named shadowtau_app + +# Build rule for target. +shadowtau_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 shadowtau_app +.PHONY : shadowtau_app + +# fast build rule for target. +shadowtau_app/fast: + $(MAKE) -f objects/CMakeFiles/shadowtau_app.dir/build.make objects/CMakeFiles/shadowtau_app.dir/build +.PHONY : shadowtau_app/fast + +#============================================================================= +# Target rules for targets named Anisotropic1 + +# Build rule for target. +Anisotropic1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Anisotropic1 +.PHONY : Anisotropic1 + +# fast build rule for target. +Anisotropic1/fast: + $(MAKE) -f objects/CMakeFiles/Anisotropic1.dir/build.make objects/CMakeFiles/Anisotropic1.dir/build +.PHONY : Anisotropic1/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AtmosModelFactory + +# Build rule for target. +isis3_unit_test_AtmosModelFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AtmosModelFactory +.PHONY : isis3_unit_test_AtmosModelFactory + +# fast build rule for target. +isis3_unit_test_AtmosModelFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AtmosModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_AtmosModelFactory.dir/build +.PHONY : isis3_unit_test_AtmosModelFactory/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Blob + +# Build rule for target. +isis3_unit_test_Blob: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Blob +.PHONY : isis3_unit_test_Blob + +# fast build rule for target. +isis3_unit_test_Blob/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Blob.dir/build.make objects/CMakeFiles/isis3_unit_test_Blob.dir/build +.PHONY : isis3_unit_test_Blob/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpicePosition + +# Build rule for target. +isis3_unit_test_SpicePosition: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpicePosition +.PHONY : isis3_unit_test_SpicePosition + +# fast build rule for target. +isis3_unit_test_SpicePosition/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpicePosition.dir/build.make objects/CMakeFiles/isis3_unit_test_SpicePosition.dir/build +.PHONY : isis3_unit_test_SpicePosition/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BundleSolutionInfo + +# Build rule for target. +isis3_unit_test_BundleSolutionInfo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleSolutionInfo +.PHONY : isis3_unit_test_BundleSolutionInfo + +# fast build rule for target. +isis3_unit_test_BundleSolutionInfo/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleSolutionInfo.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleSolutionInfo.dir/build +.PHONY : isis3_unit_test_BundleSolutionInfo/fast + +#============================================================================= +# Target rules for targets named gauss_app + +# Build rule for target. +gauss_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gauss_app +.PHONY : gauss_app + +# fast build rule for target. +gauss_app/fast: + $(MAKE) -f objects/CMakeFiles/gauss_app.dir/build.make objects/CMakeFiles/gauss_app.dir/build +.PHONY : gauss_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BulletDskShape + +# Build rule for target. +isis3_unit_test_BulletDskShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletDskShape +.PHONY : isis3_unit_test_BulletDskShape + +# fast build rule for target. +isis3_unit_test_BulletDskShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletDskShape.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletDskShape.dir/build +.PHONY : isis3_unit_test_BulletDskShape/fast + +#============================================================================= +# Target rules for targets named cubediff_app + +# Build rule for target. +cubediff_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cubediff_app +.PHONY : cubediff_app + +# fast build rule for target. +cubediff_app/fast: + $(MAKE) -f objects/CMakeFiles/cubediff_app.dir/build.make objects/CMakeFiles/cubediff_app.dir/build +.PHONY : cubediff_app/fast + +#============================================================================= +# Target rules for targets named Minnaert + +# Build rule for target. +Minnaert: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Minnaert +.PHONY : Minnaert + +# fast build rule for target. +Minnaert/fast: + $(MAKE) -f objects/CMakeFiles/Minnaert.dir/build.make objects/CMakeFiles/Minnaert.dir/build +.PHONY : Minnaert/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BulletShapeModel + +# Build rule for target. +isis3_unit_test_BulletShapeModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletShapeModel +.PHONY : isis3_unit_test_BulletShapeModel + +# fast build rule for target. +isis3_unit_test_BulletShapeModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletShapeModel.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletShapeModel.dir/build +.PHONY : isis3_unit_test_BulletShapeModel/fast + +#============================================================================= +# Target rules for targets named std2isis_app + +# Build rule for target. +std2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 std2isis_app +.PHONY : std2isis_app + +# fast build rule for target. +std2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/std2isis_app.dir/build.make objects/CMakeFiles/std2isis_app.dir/build +.PHONY : std2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TileManager + +# Build rule for target. +isis3_unit_test_TileManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TileManager +.PHONY : isis3_unit_test_TileManager + +# fast build rule for target. +isis3_unit_test_TileManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TileManager.dir/build.make objects/CMakeFiles/isis3_unit_test_TileManager.dir/build +.PHONY : isis3_unit_test_TileManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BulletTargetShape + +# Build rule for target. +isis3_unit_test_BulletTargetShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletTargetShape +.PHONY : isis3_unit_test_BulletTargetShape + +# fast build rule for target. +isis3_unit_test_BulletTargetShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletTargetShape.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletTargetShape.dir/build +.PHONY : isis3_unit_test_BulletTargetShape/fast + +#============================================================================= +# Target rules for targets named caminfo_app + +# Build rule for target. +caminfo_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 caminfo_app +.PHONY : caminfo_app + +# fast build rule for target. +caminfo_app/fast: + $(MAKE) -f objects/CMakeFiles/caminfo_app.dir/build.make objects/CMakeFiles/caminfo_app.dir/build +.PHONY : caminfo_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Camera + +# Build rule for target. +isis3_unit_test_Camera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Camera +.PHONY : isis3_unit_test_Camera + +# fast build rule for target. +isis3_unit_test_Camera/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Camera.dir/build.make objects/CMakeFiles/isis3_unit_test_Camera.dir/build +.PHONY : isis3_unit_test_Camera/fast + +#============================================================================= +# Target rules for targets named Mollweide + +# Build rule for target. +Mollweide: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Mollweide +.PHONY : Mollweide + +# fast build rule for target. +Mollweide/fast: + $(MAKE) -f objects/CMakeFiles/Mollweide.dir/build.make objects/CMakeFiles/Mollweide.dir/build +.PHONY : Mollweide/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Centroid + +# Build rule for target. +isis3_unit_test_Centroid: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Centroid +.PHONY : isis3_unit_test_Centroid + +# fast build rule for target. +isis3_unit_test_Centroid/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Centroid.dir/build.make objects/CMakeFiles/isis3_unit_test_Centroid.dir/build +.PHONY : isis3_unit_test_Centroid/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PixelFOV + +# Build rule for target. +isis3_unit_test_PixelFOV: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PixelFOV +.PHONY : isis3_unit_test_PixelFOV + +# fast build rule for target. +isis3_unit_test_PixelFOV/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PixelFOV.dir/build.make objects/CMakeFiles/isis3_unit_test_PixelFOV.dir/build +.PHONY : isis3_unit_test_PixelFOV/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Mollweide + +# Build rule for target. +isis3_unit_test_Mollweide: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Mollweide +.PHONY : isis3_unit_test_Mollweide + +# fast build rule for target. +isis3_unit_test_Mollweide/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Mollweide.dir/build.make objects/CMakeFiles/isis3_unit_test_Mollweide.dir/build +.PHONY : isis3_unit_test_Mollweide/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MoonAlbedo + +# Build rule for target. +isis3_unit_test_MoonAlbedo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MoonAlbedo +.PHONY : isis3_unit_test_MoonAlbedo + +# fast build rule for target. +isis3_unit_test_MoonAlbedo/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MoonAlbedo.dir/build.make objects/CMakeFiles/isis3_unit_test_MoonAlbedo.dir/build +.PHONY : isis3_unit_test_MoonAlbedo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_FourierTransform + +# Build rule for target. +isis3_unit_test_FourierTransform: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FourierTransform +.PHONY : isis3_unit_test_FourierTransform + +# fast build rule for target. +isis3_unit_test_FourierTransform/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FourierTransform.dir/build.make objects/CMakeFiles/isis3_unit_test_FourierTransform.dir/build +.PHONY : isis3_unit_test_FourierTransform/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NaifDskShape + +# Build rule for target. +isis3_unit_test_NaifDskShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifDskShape +.PHONY : isis3_unit_test_NaifDskShape + +# fast build rule for target. +isis3_unit_test_NaifDskShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifDskShape.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifDskShape.dir/build +.PHONY : isis3_unit_test_NaifDskShape/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpectralDefinition2D + +# Build rule for target. +isis3_unit_test_SpectralDefinition2D: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinition2D +.PHONY : isis3_unit_test_SpectralDefinition2D + +# fast build rule for target. +isis3_unit_test_SpectralDefinition2D/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinition2D.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinition2D.dir/build +.PHONY : isis3_unit_test_SpectralDefinition2D/fast + +#============================================================================= +# Target rules for targets named dawnvir2isis_app + +# Build rule for target. +dawnvir2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 dawnvir2isis_app +.PHONY : dawnvir2isis_app + +# fast build rule for target. +dawnvir2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/dawnvir2isis_app.dir/build.make objects/CMakeFiles/dawnvir2isis_app.dir/build +.PHONY : dawnvir2isis_app/fast + +#============================================================================= +# Target rules for targets named Chandrayaan1M3Camera + +# Build rule for target. +Chandrayaan1M3Camera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Chandrayaan1M3Camera +.PHONY : Chandrayaan1M3Camera + +# fast build rule for target. +Chandrayaan1M3Camera/fast: + $(MAKE) -f objects/CMakeFiles/Chandrayaan1M3Camera.dir/build.make objects/CMakeFiles/Chandrayaan1M3Camera.dir/build +.PHONY : Chandrayaan1M3Camera/fast + +#============================================================================= +# Target rules for targets named ratio_app + +# Build rule for target. +ratio_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ratio_app +.PHONY : ratio_app + +# fast build rule for target. +ratio_app/fast: + $(MAKE) -f objects/CMakeFiles/ratio_app.dir/build.make objects/CMakeFiles/ratio_app.dir/build +.PHONY : ratio_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NoNormalization + +# Build rule for target. +isis3_unit_test_NoNormalization: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NoNormalization +.PHONY : isis3_unit_test_NoNormalization + +# fast build rule for target. +isis3_unit_test_NoNormalization/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NoNormalization.dir/build.make objects/CMakeFiles/isis3_unit_test_NoNormalization.dir/build +.PHONY : isis3_unit_test_NoNormalization/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NoOperator + +# Build rule for target. +isis3_unit_test_NoOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NoOperator +.PHONY : isis3_unit_test_NoOperator + +# fast build rule for target. +isis3_unit_test_NoOperator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NoOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_NoOperator.dir/build +.PHONY : isis3_unit_test_NoOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TProjection + +# Build rule for target. +isis3_unit_test_TProjection: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TProjection +.PHONY : isis3_unit_test_TProjection + +# fast build rule for target. +isis3_unit_test_TProjection/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TProjection.dir/build.make objects/CMakeFiles/isis3_unit_test_TProjection.dir/build +.PHONY : isis3_unit_test_TProjection/fast + +#============================================================================= +# Target rules for targets named apollo_unit_test_ApolloPanoramicCamera + +# Build rule for target. +apollo_unit_test_ApolloPanoramicCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_ApolloPanoramicCamera +.PHONY : apollo_unit_test_ApolloPanoramicCamera + +# fast build rule for target. +apollo_unit_test_ApolloPanoramicCamera/fast: + $(MAKE) -f objects/CMakeFiles/apollo_unit_test_ApolloPanoramicCamera.dir/build.make objects/CMakeFiles/apollo_unit_test_ApolloPanoramicCamera.dir/build +.PHONY : apollo_unit_test_ApolloPanoramicCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NormModel + +# Build rule for target. +isis3_unit_test_NormModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NormModel +.PHONY : isis3_unit_test_NormModel + +# fast build rule for target. +isis3_unit_test_NormModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NormModel.dir/build.make objects/CMakeFiles/isis3_unit_test_NormModel.dir/build +.PHONY : isis3_unit_test_NormModel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NormModelFactory + +# Build rule for target. +isis3_unit_test_NormModelFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NormModelFactory +.PHONY : isis3_unit_test_NormModelFactory + +# fast build rule for target. +isis3_unit_test_NormModelFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NormModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_NormModelFactory.dir/build +.PHONY : isis3_unit_test_NormModelFactory/fast + +#============================================================================= +# Target rules for targets named stats_app + +# Build rule for target. +stats_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 stats_app +.PHONY : stats_app + +# fast build rule for target. +stats_app/fast: + $(MAKE) -f objects/CMakeFiles/stats_app.dir/build.make objects/CMakeFiles/stats_app.dir/build +.PHONY : stats_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LeastSquares + +# Build rule for target. +isis3_unit_test_LeastSquares: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LeastSquares +.PHONY : isis3_unit_test_LeastSquares + +# fast build rule for target. +isis3_unit_test_LeastSquares/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LeastSquares.dir/build.make objects/CMakeFiles/isis3_unit_test_LeastSquares.dir/build +.PHONY : isis3_unit_test_LeastSquares/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Sensor + +# Build rule for target. +isis3_unit_test_Sensor: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Sensor +.PHONY : isis3_unit_test_Sensor + +# fast build rule for target. +isis3_unit_test_Sensor/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Sensor.dir/build.make objects/CMakeFiles/isis3_unit_test_Sensor.dir/build +.PHONY : isis3_unit_test_Sensor/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NumericalApproximation + +# Build rule for target. +isis3_unit_test_NumericalApproximation: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NumericalApproximation +.PHONY : isis3_unit_test_NumericalApproximation + +# fast build rule for target. +isis3_unit_test_NumericalApproximation/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NumericalApproximation.dir/build.make objects/CMakeFiles/isis3_unit_test_NumericalApproximation.dir/build +.PHONY : isis3_unit_test_NumericalApproximation/fast + +#============================================================================= +# Target rules for targets named hicubenorm_app + +# Build rule for target. +hicubenorm_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hicubenorm_app +.PHONY : hicubenorm_app + +# fast build rule for target. +hicubenorm_app/fast: + $(MAKE) -f objects/CMakeFiles/hicubenorm_app.dir/build.make objects/CMakeFiles/hicubenorm_app.dir/build +.PHONY : hicubenorm_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Lambert + +# Build rule for target. +isis3_unit_test_Lambert: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Lambert +.PHONY : isis3_unit_test_Lambert + +# fast build rule for target. +isis3_unit_test_Lambert/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Lambert.dir/build.make objects/CMakeFiles/isis3_unit_test_Lambert.dir/build +.PHONY : isis3_unit_test_Lambert/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PixelType + +# Build rule for target. +isis3_unit_test_PixelType: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PixelType +.PHONY : isis3_unit_test_PixelType + +# fast build rule for target. +isis3_unit_test_PixelType/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PixelType.dir/build.make objects/CMakeFiles/isis3_unit_test_PixelType.dir/build +.PHONY : isis3_unit_test_PixelType/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TableRecord + +# Build rule for target. +isis3_unit_test_TableRecord: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TableRecord +.PHONY : isis3_unit_test_TableRecord + +# fast build rule for target. +isis3_unit_test_TableRecord/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TableRecord.dir/build.make objects/CMakeFiles/isis3_unit_test_TableRecord.dir/build +.PHONY : isis3_unit_test_TableRecord/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SubArea + +# Build rule for target. +isis3_unit_test_SubArea: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SubArea +.PHONY : isis3_unit_test_SubArea + +# fast build rule for target. +isis3_unit_test_SubArea/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SubArea.dir/build.make objects/CMakeFiles/isis3_unit_test_SubArea.dir/build +.PHONY : isis3_unit_test_SubArea/fast + +#============================================================================= +# Target rules for targets named socetlinescankeywords_app + +# Build rule for target. +socetlinescankeywords_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 socetlinescankeywords_app +.PHONY : socetlinescankeywords_app + +# fast build rule for target. +socetlinescankeywords_app/fast: + $(MAKE) -f objects/CMakeFiles/socetlinescankeywords_app.dir/build.make objects/CMakeFiles/socetlinescankeywords_app.dir/build +.PHONY : socetlinescankeywords_app/fast + +#============================================================================= +# Target rules for targets named blobdump_app + +# Build rule for target. +blobdump_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 blobdump_app +.PHONY : blobdump_app + +# fast build rule for target. +blobdump_app/fast: + $(MAKE) -f objects/CMakeFiles/blobdump_app.dir/build.make objects/CMakeFiles/blobdump_app.dir/build +.PHONY : blobdump_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ObservationNumber + +# Build rule for target. +isis3_unit_test_ObservationNumber: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ObservationNumber +.PHONY : isis3_unit_test_ObservationNumber + +# fast build rule for target. +isis3_unit_test_ObservationNumber/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ObservationNumber.dir/build.make objects/CMakeFiles/isis3_unit_test_ObservationNumber.dir/build +.PHONY : isis3_unit_test_ObservationNumber/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ObservationNumberList + +# Build rule for target. +isis3_unit_test_ObservationNumberList: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ObservationNumberList +.PHONY : isis3_unit_test_ObservationNumberList + +# fast build rule for target. +isis3_unit_test_ObservationNumberList/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ObservationNumberList.dir/build.make objects/CMakeFiles/isis3_unit_test_ObservationNumberList.dir/build +.PHONY : isis3_unit_test_ObservationNumberList/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Orthographic + +# Build rule for target. +isis3_unit_test_Orthographic: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Orthographic +.PHONY : isis3_unit_test_Orthographic + +# fast build rule for target. +isis3_unit_test_Orthographic/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Orthographic.dir/build.make objects/CMakeFiles/isis3_unit_test_Orthographic.dir/build +.PHONY : isis3_unit_test_Orthographic/fast + +#============================================================================= +# Target rules for targets named NewHorizonsLorriCamera + +# Build rule for target. +NewHorizonsLorriCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsLorriCamera +.PHONY : NewHorizonsLorriCamera + +# fast build rule for target. +NewHorizonsLorriCamera/fast: + $(MAKE) -f objects/CMakeFiles/NewHorizonsLorriCamera.dir/build.make objects/CMakeFiles/NewHorizonsLorriCamera.dir/build +.PHONY : NewHorizonsLorriCamera/fast + +#============================================================================= +# Target rules for targets named mdiscal_app + +# Build rule for target. +mdiscal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mdiscal_app +.PHONY : mdiscal_app + +# fast build rule for target. +mdiscal_app/fast: + $(MAKE) -f objects/CMakeFiles/mdiscal_app.dir/build.make objects/CMakeFiles/mdiscal_app.dir/build +.PHONY : mdiscal_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_OverlapStatistics + +# Build rule for target. +isis3_unit_test_OverlapStatistics: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OverlapStatistics +.PHONY : isis3_unit_test_OverlapStatistics + +# fast build rule for target. +isis3_unit_test_OverlapStatistics/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OverlapStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_OverlapStatistics.dir/build +.PHONY : isis3_unit_test_OverlapStatistics/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Parabola + +# Build rule for target. +isis3_unit_test_Parabola: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Parabola +.PHONY : isis3_unit_test_Parabola + +# fast build rule for target. +isis3_unit_test_Parabola/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Parabola.dir/build.make objects/CMakeFiles/isis3_unit_test_Parabola.dir/build +.PHONY : isis3_unit_test_Parabola/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PhotoModel + +# Build rule for target. +isis3_unit_test_PhotoModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PhotoModel +.PHONY : isis3_unit_test_PhotoModel + +# fast build rule for target. +isis3_unit_test_PhotoModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PhotoModel.dir/build.make objects/CMakeFiles/isis3_unit_test_PhotoModel.dir/build +.PHONY : isis3_unit_test_PhotoModel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadialDistortionMap + +# Build rule for target. +isis3_unit_test_RadialDistortionMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadialDistortionMap +.PHONY : isis3_unit_test_RadialDistortionMap + +# fast build rule for target. +isis3_unit_test_RadialDistortionMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadialDistortionMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadialDistortionMap.dir/build +.PHONY : isis3_unit_test_RadialDistortionMap/fast + +#============================================================================= +# Target rules for targets named viknosalt_app + +# Build rule for target. +viknosalt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 viknosalt_app +.PHONY : viknosalt_app + +# fast build rule for target. +viknosalt_app/fast: + $(MAKE) -f objects/CMakeFiles/viknosalt_app.dir/build.make objects/CMakeFiles/viknosalt_app.dir/build +.PHONY : viknosalt_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PhotoModelFactory + +# Build rule for target. +isis3_unit_test_PhotoModelFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PhotoModelFactory +.PHONY : isis3_unit_test_PhotoModelFactory + +# fast build rule for target. +isis3_unit_test_PhotoModelFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PhotoModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_PhotoModelFactory.dir/build +.PHONY : isis3_unit_test_PhotoModelFactory/fast + +#============================================================================= +# Target rules for targets named cnetextract_app + +# Build rule for target. +cnetextract_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cnetextract_app +.PHONY : cnetextract_app + +# fast build rule for target. +cnetextract_app/fast: + $(MAKE) -f objects/CMakeFiles/cnetextract_app.dir/build.make objects/CMakeFiles/cnetextract_app.dir/build +.PHONY : cnetextract_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessByQuickFilter + +# Build rule for target. +isis3_unit_test_ProcessByQuickFilter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByQuickFilter +.PHONY : isis3_unit_test_ProcessByQuickFilter + +# fast build rule for target. +isis3_unit_test_ProcessByQuickFilter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByQuickFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByQuickFilter.dir/build +.PHONY : isis3_unit_test_ProcessByQuickFilter/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SqlRecord + +# Build rule for target. +isis3_unit_test_SqlRecord: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SqlRecord +.PHONY : isis3_unit_test_SqlRecord + +# fast build rule for target. +isis3_unit_test_SqlRecord/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SqlRecord.dir/build.make objects/CMakeFiles/isis3_unit_test_SqlRecord.dir/build +.PHONY : isis3_unit_test_SqlRecord/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Photometry + +# Build rule for target. +isis3_unit_test_Photometry: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Photometry +.PHONY : isis3_unit_test_Photometry + +# fast build rule for target. +isis3_unit_test_Photometry/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Photometry.dir/build.make objects/CMakeFiles/isis3_unit_test_Photometry.dir/build +.PHONY : isis3_unit_test_Photometry/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Pixel + +# Build rule for target. +isis3_unit_test_Pixel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Pixel +.PHONY : isis3_unit_test_Pixel + +# fast build rule for target. +isis3_unit_test_Pixel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Pixel.dir/build.make objects/CMakeFiles/isis3_unit_test_Pixel.dir/build +.PHONY : isis3_unit_test_Pixel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PlaneShape + +# Build rule for target. +isis3_unit_test_PlaneShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PlaneShape +.PHONY : isis3_unit_test_PlaneShape + +# fast build rule for target. +isis3_unit_test_PlaneShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PlaneShape.dir/build.make objects/CMakeFiles/isis3_unit_test_PlaneShape.dir/build +.PHONY : isis3_unit_test_PlaneShape/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Plugin + +# Build rule for target. +isis3_unit_test_Plugin: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Plugin +.PHONY : isis3_unit_test_Plugin + +# fast build rule for target. +isis3_unit_test_Plugin/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Plugin.dir/build.make objects/CMakeFiles/isis3_unit_test_Plugin.dir/build +.PHONY : isis3_unit_test_Plugin/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PointPerspective + +# Build rule for target. +isis3_unit_test_PointPerspective: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PointPerspective +.PHONY : isis3_unit_test_PointPerspective + +# fast build rule for target. +isis3_unit_test_PointPerspective/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PointPerspective.dir/build.make objects/CMakeFiles/isis3_unit_test_PointPerspective.dir/build +.PHONY : isis3_unit_test_PointPerspective/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlNetStatistics + +# Build rule for target. +isis3_unit_test_ControlNetStatistics: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetStatistics +.PHONY : isis3_unit_test_ControlNetStatistics + +# fast build rule for target. +isis3_unit_test_ControlNetStatistics/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetStatistics.dir/build +.PHONY : isis3_unit_test_ControlNetStatistics/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ShapeModel + +# Build rule for target. +isis3_unit_test_ShapeModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ShapeModel +.PHONY : isis3_unit_test_ShapeModel + +# fast build rule for target. +isis3_unit_test_ShapeModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ShapeModel.dir/build.make objects/CMakeFiles/isis3_unit_test_ShapeModel.dir/build +.PHONY : isis3_unit_test_ShapeModel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_CubeCachingAlgorithm + +# Build rule for target. +isis3_unit_test_CubeCachingAlgorithm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeCachingAlgorithm +.PHONY : isis3_unit_test_CubeCachingAlgorithm + +# fast build rule for target. +isis3_unit_test_CubeCachingAlgorithm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeCachingAlgorithm.dir/build +.PHONY : isis3_unit_test_CubeCachingAlgorithm/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessRubberSheet + +# Build rule for target. +isis3_unit_test_ProcessRubberSheet: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessRubberSheet +.PHONY : isis3_unit_test_ProcessRubberSheet + +# fast build rule for target. +isis3_unit_test_ProcessRubberSheet/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessRubberSheet.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessRubberSheet.dir/build +.PHONY : isis3_unit_test_ProcessRubberSheet/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_EndianSwapper + +# Build rule for target. +isis3_unit_test_EndianSwapper: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EndianSwapper +.PHONY : isis3_unit_test_EndianSwapper + +# fast build rule for target. +isis3_unit_test_EndianSwapper/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EndianSwapper.dir/build.make objects/CMakeFiles/isis3_unit_test_EndianSwapper.dir/build +.PHONY : isis3_unit_test_EndianSwapper/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PolynomialBivariate + +# Build rule for target. +isis3_unit_test_PolynomialBivariate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolynomialBivariate +.PHONY : isis3_unit_test_PolynomialBivariate + +# fast build rule for target. +isis3_unit_test_PolynomialBivariate/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolynomialBivariate.dir/build.make objects/CMakeFiles/isis3_unit_test_PolynomialBivariate.dir/build +.PHONY : isis3_unit_test_PolynomialBivariate/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Robinson + +# Build rule for target. +isis3_unit_test_Robinson: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Robinson +.PHONY : isis3_unit_test_Robinson + +# fast build rule for target. +isis3_unit_test_Robinson/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Robinson.dir/build.make objects/CMakeFiles/isis3_unit_test_Robinson.dir/build +.PHONY : isis3_unit_test_Robinson/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PolynomialUnivariate + +# Build rule for target. +isis3_unit_test_PolynomialUnivariate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolynomialUnivariate +.PHONY : isis3_unit_test_PolynomialUnivariate + +# fast build rule for target. +isis3_unit_test_PolynomialUnivariate/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolynomialUnivariate.dir/build.make objects/CMakeFiles/isis3_unit_test_PolynomialUnivariate.dir/build +.PHONY : isis3_unit_test_PolynomialUnivariate/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Target + +# Build rule for target. +isis3_unit_test_Target: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Target +.PHONY : isis3_unit_test_Target + +# fast build rule for target. +isis3_unit_test_Target/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Target.dir/build.make objects/CMakeFiles/isis3_unit_test_Target.dir/build +.PHONY : isis3_unit_test_Target/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BundleSettings + +# Build rule for target. +isis3_unit_test_BundleSettings: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleSettings +.PHONY : isis3_unit_test_BundleSettings + +# fast build rule for target. +isis3_unit_test_BundleSettings/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleSettings.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleSettings.dir/build +.PHONY : isis3_unit_test_BundleSettings/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RingCylindrical + +# Build rule for target. +isis3_unit_test_RingCylindrical: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RingCylindrical +.PHONY : isis3_unit_test_RingCylindrical + +# fast build rule for target. +isis3_unit_test_RingCylindrical/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RingCylindrical.dir/build.make objects/CMakeFiles/isis3_unit_test_RingCylindrical.dir/build +.PHONY : isis3_unit_test_RingCylindrical/fast + +#============================================================================= +# Target rules for targets named Anisotropic2 + +# Build rule for target. +Anisotropic2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Anisotropic2 +.PHONY : Anisotropic2 + +# fast build rule for target. +Anisotropic2/fast: + $(MAKE) -f objects/CMakeFiles/Anisotropic2.dir/build.make objects/CMakeFiles/Anisotropic2.dir/build +.PHONY : Anisotropic2/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Portal + +# Build rule for target. +isis3_unit_test_Portal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Portal +.PHONY : isis3_unit_test_Portal + +# fast build rule for target. +isis3_unit_test_Portal/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Portal.dir/build.make objects/CMakeFiles/isis3_unit_test_Portal.dir/build +.PHONY : isis3_unit_test_Portal/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Preference + +# Build rule for target. +isis3_unit_test_Preference: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Preference +.PHONY : isis3_unit_test_Preference + +# fast build rule for target. +isis3_unit_test_Preference/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Preference.dir/build.make objects/CMakeFiles/isis3_unit_test_Preference.dir/build +.PHONY : isis3_unit_test_Preference/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessByBoxcar + +# Build rule for target. +isis3_unit_test_ProcessByBoxcar: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByBoxcar +.PHONY : isis3_unit_test_ProcessByBoxcar + +# fast build rule for target. +isis3_unit_test_ProcessByBoxcar/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByBoxcar.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByBoxcar.dir/build +.PHONY : isis3_unit_test_ProcessByBoxcar/fast + +#============================================================================= +# Target rules for targets named histeq_app + +# Build rule for target. +histeq_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 histeq_app +.PHONY : histeq_app + +# fast build rule for target. +histeq_app/fast: + $(MAKE) -f objects/CMakeFiles/histeq_app.dir/build.make objects/CMakeFiles/histeq_app.dir/build +.PHONY : histeq_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessByBrick + +# Build rule for target. +isis3_unit_test_ProcessByBrick: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByBrick +.PHONY : isis3_unit_test_ProcessByBrick + +# fast build rule for target. +isis3_unit_test_ProcessByBrick/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByBrick.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByBrick.dir/build +.PHONY : isis3_unit_test_ProcessByBrick/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessBySample + +# Build rule for target. +isis3_unit_test_ProcessBySample: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessBySample +.PHONY : isis3_unit_test_ProcessBySample + +# fast build rule for target. +isis3_unit_test_ProcessBySample/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessBySample.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessBySample.dir/build +.PHONY : isis3_unit_test_ProcessBySample/fast + +#============================================================================= +# Target rules for targets named isis2gml_app + +# Build rule for target. +isis2gml_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis2gml_app +.PHONY : isis2gml_app + +# fast build rule for target. +isis2gml_app/fast: + $(MAKE) -f objects/CMakeFiles/isis2gml_app.dir/build.make objects/CMakeFiles/isis2gml_app.dir/build +.PHONY : isis2gml_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessBySpectra + +# Build rule for target. +isis3_unit_test_ProcessBySpectra: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessBySpectra +.PHONY : isis3_unit_test_ProcessBySpectra + +# fast build rule for target. +isis3_unit_test_ProcessBySpectra/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessBySpectra.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessBySpectra.dir/build +.PHONY : isis3_unit_test_ProcessBySpectra/fast + +#============================================================================= +# Target rules for targets named blend_app + +# Build rule for target. +blend_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 blend_app +.PHONY : blend_app + +# fast build rule for target. +blend_app/fast: + $(MAKE) -f objects/CMakeFiles/blend_app.dir/build.make objects/CMakeFiles/blend_app.dir/build +.PHONY : blend_app/fast + +#============================================================================= +# Target rules for targets named findrx_app + +# Build rule for target. +findrx_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 findrx_app +.PHONY : findrx_app + +# fast build rule for target. +findrx_app/fast: + $(MAKE) -f objects/CMakeFiles/findrx_app.dir/build.make objects/CMakeFiles/findrx_app.dir/build +.PHONY : findrx_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessExport + +# Build rule for target. +isis3_unit_test_ProcessExport: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessExport +.PHONY : isis3_unit_test_ProcessExport + +# fast build rule for target. +isis3_unit_test_ProcessExport/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessExport.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessExport.dir/build +.PHONY : isis3_unit_test_ProcessExport/fast + +#============================================================================= +# Target rules for targets named cam2map_app + +# Build rule for target. +cam2map_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cam2map_app +.PHONY : cam2map_app + +# fast build rule for target. +cam2map_app/fast: + $(MAKE) -f objects/CMakeFiles/cam2map_app.dir/build.make objects/CMakeFiles/cam2map_app.dir/build +.PHONY : cam2map_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Hapke + +# Build rule for target. +isis3_unit_test_Hapke: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Hapke +.PHONY : isis3_unit_test_Hapke + +# fast build rule for target. +isis3_unit_test_Hapke/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Hapke.dir/build.make objects/CMakeFiles/isis3_unit_test_Hapke.dir/build +.PHONY : isis3_unit_test_Hapke/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessExportPds4 + +# Build rule for target. +isis3_unit_test_ProcessExportPds4: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessExportPds4 +.PHONY : isis3_unit_test_ProcessExportPds4 + +# fast build rule for target. +isis3_unit_test_ProcessExportPds4/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessExportPds4.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessExportPds4.dir/build +.PHONY : isis3_unit_test_ProcessExportPds4/fast + +#============================================================================= +# Target rules for targets named kuwahara_app + +# Build rule for target. +kuwahara_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kuwahara_app +.PHONY : kuwahara_app + +# fast build rule for target. +kuwahara_app/fast: + $(MAKE) -f objects/CMakeFiles/kuwahara_app.dir/build.make objects/CMakeFiles/kuwahara_app.dir/build +.PHONY : kuwahara_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessGroundPolygons + +# Build rule for target. +isis3_unit_test_ProcessGroundPolygons: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessGroundPolygons +.PHONY : isis3_unit_test_ProcessGroundPolygons + +# fast build rule for target. +isis3_unit_test_ProcessGroundPolygons/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessGroundPolygons.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessGroundPolygons.dir/build +.PHONY : isis3_unit_test_ProcessGroundPolygons/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessImportFits + +# Build rule for target. +isis3_unit_test_ProcessImportFits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImportFits +.PHONY : isis3_unit_test_ProcessImportFits + +# fast build rule for target. +isis3_unit_test_ProcessImportFits/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImportFits.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImportFits.dir/build +.PHONY : isis3_unit_test_ProcessImportFits/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_OriginalLabel + +# Build rule for target. +isis3_unit_test_OriginalLabel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OriginalLabel +.PHONY : isis3_unit_test_OriginalLabel + +# fast build rule for target. +isis3_unit_test_OriginalLabel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OriginalLabel.dir/build.make objects/CMakeFiles/isis3_unit_test_OriginalLabel.dir/build +.PHONY : isis3_unit_test_OriginalLabel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PolarStereographic + +# Build rule for target. +isis3_unit_test_PolarStereographic: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolarStereographic +.PHONY : isis3_unit_test_PolarStereographic + +# fast build rule for target. +isis3_unit_test_PolarStereographic/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolarStereographic.dir/build.make objects/CMakeFiles/isis3_unit_test_PolarStereographic.dir/build +.PHONY : isis3_unit_test_PolarStereographic/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessImportPds + +# Build rule for target. +isis3_unit_test_ProcessImportPds: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImportPds +.PHONY : isis3_unit_test_ProcessImportPds + +# fast build rule for target. +isis3_unit_test_ProcessImportPds/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImportPds.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImportPds.dir/build +.PHONY : isis3_unit_test_ProcessImportPds/fast + +#============================================================================= +# Target rules for targets named specdivfilter_app + +# Build rule for target. +specdivfilter_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 specdivfilter_app +.PHONY : specdivfilter_app + +# fast build rule for target. +specdivfilter_app/fast: + $(MAKE) -f objects/CMakeFiles/specdivfilter_app.dir/build.make objects/CMakeFiles/specdivfilter_app.dir/build +.PHONY : specdivfilter_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_WorldMapper + +# Build rule for target. +isis3_unit_test_WorldMapper: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_WorldMapper +.PHONY : isis3_unit_test_WorldMapper + +# fast build rule for target. +isis3_unit_test_WorldMapper/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_WorldMapper.dir/build.make objects/CMakeFiles/isis3_unit_test_WorldMapper.dir/build +.PHONY : isis3_unit_test_WorldMapper/fast + +#============================================================================= +# Target rules for targets named clemhirescal_app + +# Build rule for target. +clemhirescal_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 clemhirescal_app +.PHONY : clemhirescal_app + +# fast build rule for target. +clemhirescal_app/fast: + $(MAKE) -f objects/CMakeFiles/clemhirescal_app.dir/build.make objects/CMakeFiles/clemhirescal_app.dir/build +.PHONY : clemhirescal_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessImportVicar + +# Build rule for target. +isis3_unit_test_ProcessImportVicar: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImportVicar +.PHONY : isis3_unit_test_ProcessImportVicar + +# fast build rule for target. +isis3_unit_test_ProcessImportVicar/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImportVicar.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImportVicar.dir/build +.PHONY : isis3_unit_test_ProcessImportVicar/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_DbAccess + +# Build rule for target. +isis3_unit_test_DbAccess: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DbAccess +.PHONY : isis3_unit_test_DbAccess + +# fast build rule for target. +isis3_unit_test_DbAccess/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DbAccess.dir/build.make objects/CMakeFiles/isis3_unit_test_DbAccess.dir/build +.PHONY : isis3_unit_test_DbAccess/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessMapMosaic + +# Build rule for target. +isis3_unit_test_ProcessMapMosaic: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessMapMosaic +.PHONY : isis3_unit_test_ProcessMapMosaic + +# fast build rule for target. +isis3_unit_test_ProcessMapMosaic/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessMapMosaic.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessMapMosaic.dir/build +.PHONY : isis3_unit_test_ProcessMapMosaic/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessMosaic + +# Build rule for target. +isis3_unit_test_ProcessMosaic: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessMosaic +.PHONY : isis3_unit_test_ProcessMosaic + +# fast build rule for target. +isis3_unit_test_ProcessMosaic/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessMosaic.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessMosaic.dir/build +.PHONY : isis3_unit_test_ProcessMosaic/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessPolygons + +# Build rule for target. +isis3_unit_test_ProcessPolygons: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessPolygons +.PHONY : isis3_unit_test_ProcessPolygons + +# fast build rule for target. +isis3_unit_test_ProcessPolygons/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessPolygons.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessPolygons.dir/build +.PHONY : isis3_unit_test_ProcessPolygons/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProgramLauncher + +# Build rule for target. +isis3_unit_test_ProgramLauncher: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProgramLauncher +.PHONY : isis3_unit_test_ProgramLauncher + +# fast build rule for target. +isis3_unit_test_ProgramLauncher/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProgramLauncher.dir/build.make objects/CMakeFiles/isis3_unit_test_ProgramLauncher.dir/build +.PHONY : isis3_unit_test_ProgramLauncher/fast + +#============================================================================= +# Target rules for targets named kaguyasp2ascii_app + +# Build rule for target. +kaguyasp2ascii_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 kaguyasp2ascii_app +.PHONY : kaguyasp2ascii_app + +# fast build rule for target. +kaguyasp2ascii_app/fast: + $(MAKE) -f objects/CMakeFiles/kaguyasp2ascii_app.dir/build.make objects/CMakeFiles/kaguyasp2ascii_app.dir/build +.PHONY : kaguyasp2ascii_app/fast + +#============================================================================= +# Target rules for targets named mvstats_app + +# Build rule for target. +mvstats_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mvstats_app +.PHONY : mvstats_app + +# fast build rule for target. +mvstats_app/fast: + $(MAKE) -f objects/CMakeFiles/mvstats_app.dir/build.make objects/CMakeFiles/mvstats_app.dir/build +.PHONY : mvstats_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PushFrameCamera + +# Build rule for target. +isis3_unit_test_PushFrameCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCamera +.PHONY : isis3_unit_test_PushFrameCamera + +# fast build rule for target. +isis3_unit_test_PushFrameCamera/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCamera.dir/build +.PHONY : isis3_unit_test_PushFrameCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TriangularPlate + +# Build rule for target. +isis3_unit_test_TriangularPlate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TriangularPlate +.PHONY : isis3_unit_test_TriangularPlate + +# fast build rule for target. +isis3_unit_test_TriangularPlate/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TriangularPlate.dir/build.make objects/CMakeFiles/isis3_unit_test_TriangularPlate.dir/build +.PHONY : isis3_unit_test_TriangularPlate/fast + +#============================================================================= +# Target rules for targets named hidestripe_app + +# Build rule for target. +hidestripe_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hidestripe_app +.PHONY : hidestripe_app + +# fast build rule for target. +hidestripe_app/fast: + $(MAKE) -f objects/CMakeFiles/hidestripe_app.dir/build.make objects/CMakeFiles/hidestripe_app.dir/build +.PHONY : hidestripe_app/fast + +#============================================================================= +# Target rules for targets named center_app + +# Build rule for target. +center_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 center_app +.PHONY : center_app + +# fast build rule for target. +center_app/fast: + $(MAKE) -f objects/CMakeFiles/center_app.dir/build.make objects/CMakeFiles/center_app.dir/build +.PHONY : center_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AutoRegFactory + +# Build rule for target. +isis3_unit_test_AutoRegFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AutoRegFactory +.PHONY : isis3_unit_test_AutoRegFactory + +# fast build rule for target. +isis3_unit_test_AutoRegFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AutoRegFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_AutoRegFactory.dir/build +.PHONY : isis3_unit_test_AutoRegFactory/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MoravecOperator + +# Build rule for target. +isis3_unit_test_MoravecOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MoravecOperator +.PHONY : isis3_unit_test_MoravecOperator + +# fast build rule for target. +isis3_unit_test_MoravecOperator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MoravecOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_MoravecOperator.dir/build +.PHONY : isis3_unit_test_MoravecOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PushFrameCameraDetectorMap + +# Build rule for target. +isis3_unit_test_PushFrameCameraDetectorMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCameraDetectorMap +.PHONY : isis3_unit_test_PushFrameCameraDetectorMap + +# fast build rule for target. +isis3_unit_test_PushFrameCameraDetectorMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCameraDetectorMap.dir/build +.PHONY : isis3_unit_test_PushFrameCameraDetectorMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Pvl + +# Build rule for target. +isis3_unit_test_Pvl: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Pvl +.PHONY : isis3_unit_test_Pvl + +# fast build rule for target. +isis3_unit_test_Pvl/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Pvl.dir/build.make objects/CMakeFiles/isis3_unit_test_Pvl.dir/build +.PHONY : isis3_unit_test_Pvl/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlContainer + +# Build rule for target. +isis3_unit_test_PvlContainer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlContainer +.PHONY : isis3_unit_test_PvlContainer + +# fast build rule for target. +isis3_unit_test_PvlContainer/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlContainer.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlContainer.dir/build +.PHONY : isis3_unit_test_PvlContainer/fast + +#============================================================================= +# Target rules for targets named fft_app + +# Build rule for target. +fft_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fft_app +.PHONY : fft_app + +# fast build rule for target. +fft_app/fast: + $(MAKE) -f objects/CMakeFiles/fft_app.dir/build.make objects/CMakeFiles/fft_app.dir/build +.PHONY : fft_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlEditDialog + +# Build rule for target. +isis3_unit_test_PvlEditDialog: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlEditDialog +.PHONY : isis3_unit_test_PvlEditDialog + +# fast build rule for target. +isis3_unit_test_PvlEditDialog/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlEditDialog.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlEditDialog.dir/build +.PHONY : isis3_unit_test_PvlEditDialog/fast + +#============================================================================= +# Target rules for targets named LimitPolygonSeeder + +# Build rule for target. +LimitPolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 LimitPolygonSeeder +.PHONY : LimitPolygonSeeder + +# fast build rule for target. +LimitPolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/LimitPolygonSeeder.dir/build.make objects/CMakeFiles/LimitPolygonSeeder.dir/build +.PHONY : LimitPolygonSeeder/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlFlatMap + +# Build rule for target. +isis3_unit_test_PvlFlatMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlFlatMap +.PHONY : isis3_unit_test_PvlFlatMap + +# fast build rule for target. +isis3_unit_test_PvlFlatMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlFlatMap.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlFlatMap.dir/build +.PHONY : isis3_unit_test_PvlFlatMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlFormat + +# Build rule for target. +isis3_unit_test_PvlFormat: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlFormat +.PHONY : isis3_unit_test_PvlFormat + +# fast build rule for target. +isis3_unit_test_PvlFormat/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlFormat.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlFormat.dir/build +.PHONY : isis3_unit_test_PvlFormat/fast + +#============================================================================= +# Target rules for targets named vikfixtrx_app + +# Build rule for target. +vikfixtrx_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vikfixtrx_app +.PHONY : vikfixtrx_app + +# fast build rule for target. +vikfixtrx_app/fast: + $(MAKE) -f objects/CMakeFiles/vikfixtrx_app.dir/build.make objects/CMakeFiles/vikfixtrx_app.dir/build +.PHONY : vikfixtrx_app/fast + +#============================================================================= +# Target rules for targets named NoNormalization + +# Build rule for target. +NoNormalization: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NoNormalization +.PHONY : NoNormalization + +# fast build rule for target. +NoNormalization/fast: + $(MAKE) -f objects/CMakeFiles/NoNormalization.dir/build.make objects/CMakeFiles/NoNormalization.dir/build +.PHONY : NoNormalization/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RingPlaneProjection + +# Build rule for target. +isis3_unit_test_RingPlaneProjection: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RingPlaneProjection +.PHONY : isis3_unit_test_RingPlaneProjection + +# fast build rule for target. +isis3_unit_test_RingPlaneProjection/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RingPlaneProjection.dir/build.make objects/CMakeFiles/isis3_unit_test_RingPlaneProjection.dir/build +.PHONY : isis3_unit_test_RingPlaneProjection/fast + +#============================================================================= +# Target rules for targets named nocam2map_app + +# Build rule for target. +nocam2map_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 nocam2map_app +.PHONY : nocam2map_app + +# fast build rule for target. +nocam2map_app/fast: + $(MAKE) -f objects/CMakeFiles/nocam2map_app.dir/build.make objects/CMakeFiles/nocam2map_app.dir/build +.PHONY : nocam2map_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlGroup + +# Build rule for target. +isis3_unit_test_PvlGroup: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlGroup +.PHONY : isis3_unit_test_PvlGroup + +# fast build rule for target. +isis3_unit_test_PvlGroup/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlGroup.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlGroup.dir/build +.PHONY : isis3_unit_test_PvlGroup/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AbstractPlate + +# Build rule for target. +isis3_unit_test_AbstractPlate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AbstractPlate +.PHONY : isis3_unit_test_AbstractPlate + +# fast build rule for target. +isis3_unit_test_AbstractPlate/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AbstractPlate.dir/build.make objects/CMakeFiles/isis3_unit_test_AbstractPlate.dir/build +.PHONY : isis3_unit_test_AbstractPlate/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlKeyword + +# Build rule for target. +isis3_unit_test_PvlKeyword: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlKeyword +.PHONY : isis3_unit_test_PvlKeyword + +# fast build rule for target. +isis3_unit_test_PvlKeyword/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlKeyword.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlKeyword.dir/build +.PHONY : isis3_unit_test_PvlKeyword/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlObject + +# Build rule for target. +isis3_unit_test_PvlObject: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlObject +.PHONY : isis3_unit_test_PvlObject + +# fast build rule for target. +isis3_unit_test_PvlObject/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlObject.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlObject.dir/build +.PHONY : isis3_unit_test_PvlObject/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlToPvlTranslationManager + +# Build rule for target. +isis3_unit_test_PvlToPvlTranslationManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlToPvlTranslationManager +.PHONY : isis3_unit_test_PvlToPvlTranslationManager + +# fast build rule for target. +isis3_unit_test_PvlToPvlTranslationManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlToPvlTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlToPvlTranslationManager.dir/build +.PHONY : isis3_unit_test_PvlToPvlTranslationManager/fast + +#============================================================================= +# Target rules for targets named sharpen_app + +# Build rule for target. +sharpen_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 sharpen_app +.PHONY : sharpen_app + +# fast build rule for target. +sharpen_app/fast: + $(MAKE) -f objects/CMakeFiles/sharpen_app.dir/build.make objects/CMakeFiles/sharpen_app.dir/build +.PHONY : sharpen_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlToXmlTranslationManager + +# Build rule for target. +isis3_unit_test_PvlToXmlTranslationManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlToXmlTranslationManager +.PHONY : isis3_unit_test_PvlToXmlTranslationManager + +# fast build rule for target. +isis3_unit_test_PvlToXmlTranslationManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlToXmlTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlToXmlTranslationManager.dir/build +.PHONY : isis3_unit_test_PvlToXmlTranslationManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LunarAzimuthalEqualArea + +# Build rule for target. +isis3_unit_test_LunarAzimuthalEqualArea: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarAzimuthalEqualArea +.PHONY : isis3_unit_test_LunarAzimuthalEqualArea + +# fast build rule for target. +isis3_unit_test_LunarAzimuthalEqualArea/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarAzimuthalEqualArea.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarAzimuthalEqualArea.dir/build +.PHONY : isis3_unit_test_LunarAzimuthalEqualArea/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlToken + +# Build rule for target. +isis3_unit_test_PvlToken: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlToken +.PHONY : isis3_unit_test_PvlToken + +# fast build rule for target. +isis3_unit_test_PvlToken/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlToken.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlToken.dir/build +.PHONY : isis3_unit_test_PvlToken/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BulletWorldManager + +# Build rule for target. +isis3_unit_test_BulletWorldManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletWorldManager +.PHONY : isis3_unit_test_BulletWorldManager + +# fast build rule for target. +isis3_unit_test_BulletWorldManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletWorldManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletWorldManager.dir/build +.PHONY : isis3_unit_test_BulletWorldManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PvlTranslationTable + +# Build rule for target. +isis3_unit_test_PvlTranslationTable: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlTranslationTable +.PHONY : isis3_unit_test_PvlTranslationTable + +# fast build rule for target. +isis3_unit_test_PvlTranslationTable/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlTranslationTable.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlTranslationTable.dir/build +.PHONY : isis3_unit_test_PvlTranslationTable/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SurfaceModel + +# Build rule for target. +isis3_unit_test_SurfaceModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SurfaceModel +.PHONY : isis3_unit_test_SurfaceModel + +# fast build rule for target. +isis3_unit_test_SurfaceModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SurfaceModel.dir/build.make objects/CMakeFiles/isis3_unit_test_SurfaceModel.dir/build +.PHONY : isis3_unit_test_SurfaceModel/fast + +#============================================================================= +# Target rules for targets named Albedo + +# Build rule for target. +Albedo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Albedo +.PHONY : Albedo + +# fast build rule for target. +Albedo/fast: + $(MAKE) -f objects/CMakeFiles/Albedo.dir/build.make objects/CMakeFiles/Albedo.dir/build +.PHONY : Albedo/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_InterestOperator + +# Build rule for target. +isis3_unit_test_InterestOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InterestOperator +.PHONY : isis3_unit_test_InterestOperator + +# fast build rule for target. +isis3_unit_test_InterestOperator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InterestOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_InterestOperator.dir/build +.PHONY : isis3_unit_test_InterestOperator/fast + +#============================================================================= +# Target rules for targets named desmile_app + +# Build rule for target. +desmile_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 desmile_app +.PHONY : desmile_app + +# fast build rule for target. +desmile_app/fast: + $(MAKE) -f objects/CMakeFiles/desmile_app.dir/build.make objects/CMakeFiles/desmile_app.dir/build +.PHONY : desmile_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_QtImporter + +# Build rule for target. +isis3_unit_test_QtImporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_QtImporter +.PHONY : isis3_unit_test_QtImporter + +# fast build rule for target. +isis3_unit_test_QtImporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_QtImporter.dir/build.make objects/CMakeFiles/isis3_unit_test_QtImporter.dir/build +.PHONY : isis3_unit_test_QtImporter/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_QuickFilter + +# Build rule for target. +isis3_unit_test_QuickFilter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_QuickFilter +.PHONY : isis3_unit_test_QuickFilter + +# fast build rule for target. +isis3_unit_test_QuickFilter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_QuickFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_QuickFilter.dir/build +.PHONY : isis3_unit_test_QuickFilter/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadarPulseMap + +# Build rule for target. +isis3_unit_test_RadarPulseMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarPulseMap +.PHONY : isis3_unit_test_RadarPulseMap + +# fast build rule for target. +isis3_unit_test_RadarPulseMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarPulseMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarPulseMap.dir/build +.PHONY : isis3_unit_test_RadarPulseMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Reduce + +# Build rule for target. +isis3_unit_test_Reduce: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Reduce +.PHONY : isis3_unit_test_Reduce + +# fast build rule for target. +isis3_unit_test_Reduce/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Reduce.dir/build.make objects/CMakeFiles/isis3_unit_test_Reduce.dir/build +.PHONY : isis3_unit_test_Reduce/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlNetFilter + +# Build rule for target. +isis3_unit_test_ControlNetFilter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetFilter +.PHONY : isis3_unit_test_ControlNetFilter + +# fast build rule for target. +isis3_unit_test_ControlNetFilter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetFilter.dir/build +.PHONY : isis3_unit_test_ControlNetFilter/fast + +#============================================================================= +# Target rules for targets named cubefunc_app + +# Build rule for target. +cubefunc_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cubefunc_app +.PHONY : cubefunc_app + +# fast build rule for target. +cubefunc_app/fast: + $(MAKE) -f objects/CMakeFiles/cubefunc_app.dir/build.make objects/CMakeFiles/cubefunc_app.dir/build +.PHONY : cubefunc_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadarSkyMap + +# Build rule for target. +isis3_unit_test_RadarSkyMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarSkyMap +.PHONY : isis3_unit_test_RadarSkyMap + +# fast build rule for target. +isis3_unit_test_RadarSkyMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarSkyMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarSkyMap.dir/build +.PHONY : isis3_unit_test_RadarSkyMap/fast + +#============================================================================= +# Target rules for targets named barscale_app + +# Build rule for target. +barscale_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 barscale_app +.PHONY : barscale_app + +# fast build rule for target. +barscale_app/fast: + $(MAKE) -f objects/CMakeFiles/barscale_app.dir/build.make objects/CMakeFiles/barscale_app.dir/build +.PHONY : barscale_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_OriginalXmlLabel + +# Build rule for target. +isis3_unit_test_OriginalXmlLabel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OriginalXmlLabel +.PHONY : isis3_unit_test_OriginalXmlLabel + +# fast build rule for target. +isis3_unit_test_OriginalXmlLabel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OriginalXmlLabel.dir/build.make objects/CMakeFiles/isis3_unit_test_OriginalXmlLabel.dir/build +.PHONY : isis3_unit_test_OriginalXmlLabel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadarSlantRangeMap + +# Build rule for target. +isis3_unit_test_RadarSlantRangeMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarSlantRangeMap +.PHONY : isis3_unit_test_RadarSlantRangeMap + +# fast build rule for target. +isis3_unit_test_RadarSlantRangeMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarSlantRangeMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarSlantRangeMap.dir/build +.PHONY : isis3_unit_test_RadarSlantRangeMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ReseauDistortionMap + +# Build rule for target. +isis3_unit_test_ReseauDistortionMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ReseauDistortionMap +.PHONY : isis3_unit_test_ReseauDistortionMap + +# fast build rule for target. +isis3_unit_test_ReseauDistortionMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ReseauDistortionMap.dir/build.make objects/CMakeFiles/isis3_unit_test_ReseauDistortionMap.dir/build +.PHONY : isis3_unit_test_ReseauDistortionMap/fast + +#============================================================================= +# Target rules for targets named rgb2hsv_app + +# Build rule for target. +rgb2hsv_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 rgb2hsv_app +.PHONY : rgb2hsv_app + +# fast build rule for target. +rgb2hsv_app/fast: + $(MAKE) -f objects/CMakeFiles/rgb2hsv_app.dir/build.make objects/CMakeFiles/rgb2hsv_app.dir/build +.PHONY : rgb2hsv_app/fast + +#============================================================================= +# Target rules for targets named enlarge_app + +# Build rule for target. +enlarge_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 enlarge_app +.PHONY : enlarge_app + +# fast build rule for target. +enlarge_app/fast: + $(MAKE) -f objects/CMakeFiles/enlarge_app.dir/build.make objects/CMakeFiles/enlarge_app.dir/build +.PHONY : enlarge_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_AbstractShape + +# Build rule for target. +isis3_unit_test_AbstractShape: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AbstractShape +.PHONY : isis3_unit_test_AbstractShape + +# fast build rule for target. +isis3_unit_test_AbstractShape/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AbstractShape.dir/build.make objects/CMakeFiles/isis3_unit_test_AbstractShape.dir/build +.PHONY : isis3_unit_test_AbstractShape/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SerialNumber + +# Build rule for target. +isis3_unit_test_SerialNumber: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SerialNumber +.PHONY : isis3_unit_test_SerialNumber + +# fast build rule for target. +isis3_unit_test_SerialNumber/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SerialNumber.dir/build.make objects/CMakeFiles/isis3_unit_test_SerialNumber.dir/build +.PHONY : isis3_unit_test_SerialNumber/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ShadeAtm + +# Build rule for target. +isis3_unit_test_ShadeAtm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ShadeAtm +.PHONY : isis3_unit_test_ShadeAtm + +# fast build rule for target. +isis3_unit_test_ShadeAtm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ShadeAtm.dir/build.make objects/CMakeFiles/isis3_unit_test_ShadeAtm.dir/build +.PHONY : isis3_unit_test_ShadeAtm/fast + +#============================================================================= +# Target rules for targets named reduce_app + +# Build rule for target. +reduce_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 reduce_app +.PHONY : reduce_app + +# fast build rule for target. +reduce_app/fast: + $(MAKE) -f objects/CMakeFiles/reduce_app.dir/build.make objects/CMakeFiles/reduce_app.dir/build +.PHONY : reduce_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ShapeModelFactory + +# Build rule for target. +isis3_unit_test_ShapeModelFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ShapeModelFactory +.PHONY : isis3_unit_test_ShapeModelFactory + +# fast build rule for target. +isis3_unit_test_ShapeModelFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ShapeModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_ShapeModelFactory.dir/build +.PHONY : isis3_unit_test_ShapeModelFactory/fast + +#============================================================================= +# Target rules for targets named isis2raw_app + +# Build rule for target. +isis2raw_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis2raw_app +.PHONY : isis2raw_app + +# fast build rule for target. +isis2raw_app/fast: + $(MAKE) -f objects/CMakeFiles/isis2raw_app.dir/build.make objects/CMakeFiles/isis2raw_app.dir/build +.PHONY : isis2raw_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProcessByLine + +# Build rule for target. +isis3_unit_test_ProcessByLine: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByLine +.PHONY : isis3_unit_test_ProcessByLine + +# fast build rule for target. +isis3_unit_test_ProcessByLine/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByLine.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByLine.dir/build +.PHONY : isis3_unit_test_ProcessByLine/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Sinusoidal + +# Build rule for target. +isis3_unit_test_Sinusoidal: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Sinusoidal +.PHONY : isis3_unit_test_Sinusoidal + +# fast build rule for target. +isis3_unit_test_Sinusoidal/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Sinusoidal.dir/build.make objects/CMakeFiles/isis3_unit_test_Sinusoidal.dir/build +.PHONY : isis3_unit_test_Sinusoidal/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SmtkMatcher + +# Build rule for target. +isis3_unit_test_SmtkMatcher: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SmtkMatcher +.PHONY : isis3_unit_test_SmtkMatcher + +# fast build rule for target. +isis3_unit_test_SmtkMatcher/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SmtkMatcher.dir/build.make objects/CMakeFiles/isis3_unit_test_SmtkMatcher.dir/build +.PHONY : isis3_unit_test_SmtkMatcher/fast + +#============================================================================= +# Target rules for targets named translate_app + +# Build rule for target. +translate_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 translate_app +.PHONY : translate_app + +# fast build rule for target. +translate_app/fast: + $(MAKE) -f objects/CMakeFiles/translate_app.dir/build.make objects/CMakeFiles/translate_app.dir/build +.PHONY : translate_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SparseBlockMatrix + +# Build rule for target. +isis3_unit_test_SparseBlockMatrix: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SparseBlockMatrix +.PHONY : isis3_unit_test_SparseBlockMatrix + +# fast build rule for target. +isis3_unit_test_SparseBlockMatrix/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SparseBlockMatrix.dir/build.make objects/CMakeFiles/isis3_unit_test_SparseBlockMatrix.dir/build +.PHONY : isis3_unit_test_SparseBlockMatrix/fast + +#============================================================================= +# Target rules for targets named spiceserver_app + +# Build rule for target. +spiceserver_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 spiceserver_app +.PHONY : spiceserver_app + +# fast build rule for target. +spiceserver_app/fast: + $(MAKE) -f objects/CMakeFiles/spiceserver_app.dir/build.make objects/CMakeFiles/spiceserver_app.dir/build +.PHONY : spiceserver_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Color + +# Build rule for target. +isis3_unit_test_Color: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Color +.PHONY : isis3_unit_test_Color + +# fast build rule for target. +isis3_unit_test_Color/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Color.dir/build.make objects/CMakeFiles/isis3_unit_test_Color.dir/build +.PHONY : isis3_unit_test_Color/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpecialPixel + +# Build rule for target. +isis3_unit_test_SpecialPixel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpecialPixel +.PHONY : isis3_unit_test_SpecialPixel + +# fast build rule for target. +isis3_unit_test_SpecialPixel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpecialPixel.dir/build.make objects/CMakeFiles/isis3_unit_test_SpecialPixel.dir/build +.PHONY : isis3_unit_test_SpecialPixel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Statistics + +# Build rule for target. +isis3_unit_test_Statistics: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Statistics +.PHONY : isis3_unit_test_Statistics + +# fast build rule for target. +isis3_unit_test_Statistics/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Statistics.dir/build.make objects/CMakeFiles/isis3_unit_test_Statistics.dir/build +.PHONY : isis3_unit_test_Statistics/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SampleManager + +# Build rule for target. +isis3_unit_test_SampleManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SampleManager +.PHONY : isis3_unit_test_SampleManager + +# fast build rule for target. +isis3_unit_test_SampleManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SampleManager.dir/build.make objects/CMakeFiles/isis3_unit_test_SampleManager.dir/build +.PHONY : isis3_unit_test_SampleManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Strategy + +# Build rule for target. +isis3_unit_test_Strategy: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Strategy +.PHONY : isis3_unit_test_Strategy + +# fast build rule for target. +isis3_unit_test_Strategy/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Strategy.dir/build.make objects/CMakeFiles/isis3_unit_test_Strategy.dir/build +.PHONY : isis3_unit_test_Strategy/fast + +#============================================================================= +# Target rules for targets named mar10nonoise_app + +# Build rule for target. +mar10nonoise_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mar10nonoise_app +.PHONY : mar10nonoise_app + +# fast build rule for target. +mar10nonoise_app/fast: + $(MAKE) -f objects/CMakeFiles/mar10nonoise_app.dir/build.make objects/CMakeFiles/mar10nonoise_app.dir/build +.PHONY : mar10nonoise_app/fast + +#============================================================================= +# Target rules for targets named Isotropic2 + +# Build rule for target. +Isotropic2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Isotropic2 +.PHONY : Isotropic2 + +# fast build rule for target. +Isotropic2/fast: + $(MAKE) -f objects/CMakeFiles/Isotropic2.dir/build.make objects/CMakeFiles/Isotropic2.dir/build +.PHONY : Isotropic2/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_StreamExporter + +# Build rule for target. +isis3_unit_test_StreamExporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StreamExporter +.PHONY : isis3_unit_test_StreamExporter + +# fast build rule for target. +isis3_unit_test_StreamExporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StreamExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_StreamExporter.dir/build +.PHONY : isis3_unit_test_StreamExporter/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SurfacePoint + +# Build rule for target. +isis3_unit_test_SurfacePoint: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SurfacePoint +.PHONY : isis3_unit_test_SurfacePoint + +# fast build rule for target. +isis3_unit_test_SurfacePoint/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SurfacePoint.dir/build.make objects/CMakeFiles/isis3_unit_test_SurfacePoint.dir/build +.PHONY : isis3_unit_test_SurfacePoint/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Table + +# Build rule for target. +isis3_unit_test_Table: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Table +.PHONY : isis3_unit_test_Table + +# fast build rule for target. +isis3_unit_test_Table/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Table.dir/build.make objects/CMakeFiles/isis3_unit_test_Table.dir/build +.PHONY : isis3_unit_test_Table/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpiceRotation + +# Build rule for target. +isis3_unit_test_SpiceRotation: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpiceRotation +.PHONY : isis3_unit_test_SpiceRotation + +# fast build rule for target. +isis3_unit_test_SpiceRotation/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpiceRotation.dir/build.make objects/CMakeFiles/isis3_unit_test_SpiceRotation.dir/build +.PHONY : isis3_unit_test_SpiceRotation/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TableField + +# Build rule for target. +isis3_unit_test_TableField: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TableField +.PHONY : isis3_unit_test_TableField + +# fast build rule for target. +isis3_unit_test_TableField/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TableField.dir/build.make objects/CMakeFiles/isis3_unit_test_TableField.dir/build +.PHONY : isis3_unit_test_TableField/fast + +#============================================================================= +# Target rules for targets named seedgrid_app + +# Build rule for target. +seedgrid_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 seedgrid_app +.PHONY : seedgrid_app + +# fast build rule for target. +seedgrid_app/fast: + $(MAKE) -f objects/CMakeFiles/seedgrid_app.dir/build.make objects/CMakeFiles/seedgrid_app.dir/build +.PHONY : seedgrid_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ProjectionFactory + +# Build rule for target. +isis3_unit_test_ProjectionFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProjectionFactory +.PHONY : isis3_unit_test_ProjectionFactory + +# fast build rule for target. +isis3_unit_test_ProjectionFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProjectionFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_ProjectionFactory.dir/build +.PHONY : isis3_unit_test_ProjectionFactory/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TextFile + +# Build rule for target. +isis3_unit_test_TextFile: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TextFile +.PHONY : isis3_unit_test_TextFile + +# fast build rule for target. +isis3_unit_test_TextFile/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TextFile.dir/build.make objects/CMakeFiles/isis3_unit_test_TextFile.dir/build +.PHONY : isis3_unit_test_TextFile/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_TiffExporter + +# Build rule for target. +isis3_unit_test_TiffExporter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TiffExporter +.PHONY : isis3_unit_test_TiffExporter + +# fast build rule for target. +isis3_unit_test_TiffExporter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TiffExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_TiffExporter.dir/build +.PHONY : isis3_unit_test_TiffExporter/fast + +#============================================================================= +# Target rules for targets named mro_unit_test_HiEqualization + +# Build rule for target. +mro_unit_test_HiEqualization: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_HiEqualization +.PHONY : mro_unit_test_HiEqualization + +# fast build rule for target. +mro_unit_test_HiEqualization/fast: + $(MAKE) -f objects/CMakeFiles/mro_unit_test_HiEqualization.dir/build.make objects/CMakeFiles/mro_unit_test_HiEqualization.dir/build +.PHONY : mro_unit_test_HiEqualization/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_InterestOperatorFactory + +# Build rule for target. +isis3_unit_test_InterestOperatorFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InterestOperatorFactory +.PHONY : isis3_unit_test_InterestOperatorFactory + +# fast build rule for target. +isis3_unit_test_InterestOperatorFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InterestOperatorFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_InterestOperatorFactory.dir/build +.PHONY : isis3_unit_test_InterestOperatorFactory/fast + +#============================================================================= +# Target rules for targets named gllssi2isis_app + +# Build rule for target. +gllssi2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gllssi2isis_app +.PHONY : gllssi2isis_app + +# fast build rule for target. +gllssi2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/gllssi2isis_app.dir/build.make objects/CMakeFiles/gllssi2isis_app.dir/build +.PHONY : gllssi2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LineScanCameraGroundMap + +# Build rule for target. +isis3_unit_test_LineScanCameraGroundMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCameraGroundMap +.PHONY : isis3_unit_test_LineScanCameraGroundMap + +# fast build rule for target. +isis3_unit_test_LineScanCameraGroundMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCameraGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCameraGroundMap.dir/build +.PHONY : isis3_unit_test_LineScanCameraGroundMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_IsisAml + +# Build rule for target. +isis3_unit_test_IsisAml: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IsisAml +.PHONY : isis3_unit_test_IsisAml + +# fast build rule for target. +isis3_unit_test_IsisAml/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IsisAml.dir/build.make objects/CMakeFiles/isis3_unit_test_IsisAml.dir/build +.PHONY : isis3_unit_test_IsisAml/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Transform + +# Build rule for target. +isis3_unit_test_Transform: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Transform +.PHONY : isis3_unit_test_Transform + +# fast build rule for target. +isis3_unit_test_Transform/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Transform.dir/build.make objects/CMakeFiles/isis3_unit_test_Transform.dir/build +.PHONY : isis3_unit_test_Transform/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_UniqueIOCachingAlgorithm + +# Build rule for target. +isis3_unit_test_UniqueIOCachingAlgorithm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UniqueIOCachingAlgorithm +.PHONY : isis3_unit_test_UniqueIOCachingAlgorithm + +# fast build rule for target. +isis3_unit_test_UniqueIOCachingAlgorithm/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UniqueIOCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_UniqueIOCachingAlgorithm.dir/build +.PHONY : isis3_unit_test_UniqueIOCachingAlgorithm/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_UniversalGroundMap + +# Build rule for target. +isis3_unit_test_UniversalGroundMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UniversalGroundMap +.PHONY : isis3_unit_test_UniversalGroundMap + +# fast build rule for target. +isis3_unit_test_UniversalGroundMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UniversalGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_UniversalGroundMap.dir/build +.PHONY : isis3_unit_test_UniversalGroundMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_VariableLineScanCameraDetectorMap + +# Build rule for target. +isis3_unit_test_VariableLineScanCameraDetectorMap: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_VariableLineScanCameraDetectorMap +.PHONY : isis3_unit_test_VariableLineScanCameraDetectorMap + +# fast build rule for target. +isis3_unit_test_VariableLineScanCameraDetectorMap/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_VariableLineScanCameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_VariableLineScanCameraDetectorMap.dir/build +.PHONY : isis3_unit_test_VariableLineScanCameraDetectorMap/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_VecFilter + +# Build rule for target. +isis3_unit_test_VecFilter: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_VecFilter +.PHONY : isis3_unit_test_VecFilter + +# fast build rule for target. +isis3_unit_test_VecFilter/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_VecFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_VecFilter.dir/build +.PHONY : isis3_unit_test_VecFilter/fast + +#============================================================================= +# Target rules for targets named fakecube_app + +# Build rule for target. +fakecube_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fakecube_app +.PHONY : fakecube_app + +# fast build rule for target. +fakecube_app/fast: + $(MAKE) -f objects/CMakeFiles/fakecube_app.dir/build.make objects/CMakeFiles/fakecube_app.dir/build +.PHONY : fakecube_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_XmlStackedHandler + +# Build rule for target. +isis3_unit_test_XmlStackedHandler: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_XmlStackedHandler +.PHONY : isis3_unit_test_XmlStackedHandler + +# fast build rule for target. +isis3_unit_test_XmlStackedHandler/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_XmlStackedHandler.dir/build.make objects/CMakeFiles/isis3_unit_test_XmlStackedHandler.dir/build +.PHONY : isis3_unit_test_XmlStackedHandler/fast + +#============================================================================= +# Target rules for targets named isis2ascii_app + +# Build rule for target. +isis2ascii_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis2ascii_app +.PHONY : isis2ascii_app + +# fast build rule for target. +isis2ascii_app/fast: + $(MAKE) -f objects/CMakeFiles/isis2ascii_app.dir/build.make objects/CMakeFiles/isis2ascii_app.dir/build +.PHONY : isis2ascii_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_XmlStackedHandlerReader + +# Build rule for target. +isis3_unit_test_XmlStackedHandlerReader: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_XmlStackedHandlerReader +.PHONY : isis3_unit_test_XmlStackedHandlerReader + +# fast build rule for target. +isis3_unit_test_XmlStackedHandlerReader/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_XmlStackedHandlerReader.dir/build.make objects/CMakeFiles/isis3_unit_test_XmlStackedHandlerReader.dir/build +.PHONY : isis3_unit_test_XmlStackedHandlerReader/fast + +#============================================================================= +# Target rules for targets named mapgrid_app + +# Build rule for target. +mapgrid_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mapgrid_app +.PHONY : mapgrid_app + +# fast build rule for target. +mapgrid_app/fast: + $(MAKE) -f objects/CMakeFiles/mapgrid_app.dir/build.make objects/CMakeFiles/mapgrid_app.dir/build +.PHONY : mapgrid_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_StripPolygonSeeder + +# Build rule for target. +isis3_unit_test_StripPolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StripPolygonSeeder +.PHONY : isis3_unit_test_StripPolygonSeeder + +# fast build rule for target. +isis3_unit_test_StripPolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StripPolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_StripPolygonSeeder.dir/build +.PHONY : isis3_unit_test_StripPolygonSeeder/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_XmlToPvlTranslationManager + +# Build rule for target. +isis3_unit_test_XmlToPvlTranslationManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_XmlToPvlTranslationManager +.PHONY : isis3_unit_test_XmlToPvlTranslationManager + +# fast build rule for target. +isis3_unit_test_XmlToPvlTranslationManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_XmlToPvlTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_XmlToPvlTranslationManager.dir/build +.PHONY : isis3_unit_test_XmlToPvlTranslationManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Progress + +# Build rule for target. +isis3_unit_test_Progress: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Progress +.PHONY : isis3_unit_test_Progress + +# fast build rule for target. +isis3_unit_test_Progress/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Progress.dir/build.make objects/CMakeFiles/isis3_unit_test_Progress.dir/build +.PHONY : isis3_unit_test_Progress/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_iTime + +# Build rule for target. +isis3_unit_test_iTime: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_iTime +.PHONY : isis3_unit_test_iTime + +# fast build rule for target. +isis3_unit_test_iTime/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_iTime.dir/build.make objects/CMakeFiles/isis3_unit_test_iTime.dir/build +.PHONY : isis3_unit_test_iTime/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_KernelDb + +# Build rule for target. +isis3_unit_test_KernelDb: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_KernelDb +.PHONY : isis3_unit_test_KernelDb + +# fast build rule for target. +isis3_unit_test_KernelDb/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_KernelDb.dir/build.make objects/CMakeFiles/isis3_unit_test_KernelDb.dir/build +.PHONY : isis3_unit_test_KernelDb/fast + +#============================================================================= +# Target rules for targets named gllnims2isis_app + +# Build rule for target. +gllnims2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gllnims2isis_app +.PHONY : gllnims2isis_app + +# fast build rule for target. +gllnims2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/gllnims2isis_app.dir/build.make objects/CMakeFiles/gllnims2isis_app.dir/build +.PHONY : gllnims2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Database + +# Build rule for target. +isis3_unit_test_Database: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Database +.PHONY : isis3_unit_test_Database + +# fast build rule for target. +isis3_unit_test_Database/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Database.dir/build.make objects/CMakeFiles/isis3_unit_test_Database.dir/build +.PHONY : isis3_unit_test_Database/fast + +#============================================================================= +# Target rules for targets named mdisddr_app + +# Build rule for target. +mdisddr_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mdisddr_app +.PHONY : mdisddr_app + +# fast build rule for target. +mdisddr_app/fast: + $(MAKE) -f objects/CMakeFiles/mdisddr_app.dir/build.make objects/CMakeFiles/mdisddr_app.dir/build +.PHONY : mdisddr_app/fast + +#============================================================================= +# Target rules for targets named HapkeAtm2 + +# Build rule for target. +HapkeAtm2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 HapkeAtm2 +.PHONY : HapkeAtm2 + +# fast build rule for target. +HapkeAtm2/fast: + $(MAKE) -f objects/CMakeFiles/HapkeAtm2.dir/build.make objects/CMakeFiles/HapkeAtm2.dir/build +.PHONY : HapkeAtm2/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_DbProfile + +# Build rule for target. +isis3_unit_test_DbProfile: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DbProfile +.PHONY : isis3_unit_test_DbProfile + +# fast build rule for target. +isis3_unit_test_DbProfile/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DbProfile.dir/build.make objects/CMakeFiles/isis3_unit_test_DbProfile.dir/build +.PHONY : isis3_unit_test_DbProfile/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SpectralDefinitionFactory + +# Build rule for target. +isis3_unit_test_SpectralDefinitionFactory: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinitionFactory +.PHONY : isis3_unit_test_SpectralDefinitionFactory + +# fast build rule for target. +isis3_unit_test_SpectralDefinitionFactory/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinitionFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinitionFactory.dir/build +.PHONY : isis3_unit_test_SpectralDefinitionFactory/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_SqlQuery + +# Build rule for target. +isis3_unit_test_SqlQuery: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SqlQuery +.PHONY : isis3_unit_test_SqlQuery + +# fast build rule for target. +isis3_unit_test_SqlQuery/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SqlQuery.dir/build.make objects/CMakeFiles/isis3_unit_test_SqlQuery.dir/build +.PHONY : isis3_unit_test_SqlQuery/fast + +#============================================================================= +# Target rules for targets named mgs + +# Build rule for target. +mgs: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mgs +.PHONY : mgs + +# fast build rule for target. +mgs/fast: + $(MAKE) -f objects/CMakeFiles/mgs.dir/build.make objects/CMakeFiles/mgs.dir/build +.PHONY : mgs/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_RadarCamera + +# Build rule for target. +isis3_unit_test_RadarCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarCamera +.PHONY : isis3_unit_test_RadarCamera + +# fast build rule for target. +isis3_unit_test_RadarCamera/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarCamera.dir/build +.PHONY : isis3_unit_test_RadarCamera/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BundleAdjust + +# Build rule for target. +isis3_unit_test_BundleAdjust: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleAdjust +.PHONY : isis3_unit_test_BundleAdjust + +# fast build rule for target. +isis3_unit_test_BundleAdjust/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleAdjust.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleAdjust.dir/build +.PHONY : isis3_unit_test_BundleAdjust/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ForstnerOperator + +# Build rule for target. +isis3_unit_test_ForstnerOperator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ForstnerOperator +.PHONY : isis3_unit_test_ForstnerOperator + +# fast build rule for target. +isis3_unit_test_ForstnerOperator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ForstnerOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_ForstnerOperator.dir/build +.PHONY : isis3_unit_test_ForstnerOperator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_BundleResults + +# Build rule for target. +isis3_unit_test_BundleResults: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleResults +.PHONY : isis3_unit_test_BundleResults + +# fast build rule for target. +isis3_unit_test_BundleResults/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleResults.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleResults.dir/build +.PHONY : isis3_unit_test_BundleResults/fast + +#============================================================================= +# Target rules for targets named mgs_unit_test_MocNarrowAngleCamera + +# Build rule for target. +mgs_unit_test_MocNarrowAngleCamera: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocNarrowAngleCamera +.PHONY : mgs_unit_test_MocNarrowAngleCamera + +# fast build rule for target. +mgs_unit_test_MocNarrowAngleCamera/fast: + $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocNarrowAngleCamera.dir/build.make objects/CMakeFiles/mgs_unit_test_MocNarrowAngleCamera.dir/build +.PHONY : mgs_unit_test_MocNarrowAngleCamera/fast + +#============================================================================= +# Target rules for targets named apollopanstitcher_app + +# Build rule for target. +apollopanstitcher_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 apollopanstitcher_app +.PHONY : apollopanstitcher_app + +# fast build rule for target. +apollopanstitcher_app/fast: + $(MAKE) -f objects/CMakeFiles/apollopanstitcher_app.dir/build.make objects/CMakeFiles/apollopanstitcher_app.dir/build +.PHONY : apollopanstitcher_app/fast + +#============================================================================= +# Target rules for targets named bandnorm_app + +# Build rule for target. +bandnorm_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 bandnorm_app +.PHONY : bandnorm_app + +# fast build rule for target. +bandnorm_app/fast: + $(MAKE) -f objects/CMakeFiles/bandnorm_app.dir/build.make objects/CMakeFiles/bandnorm_app.dir/build +.PHONY : bandnorm_app/fast + +#============================================================================= +# Target rules for targets named mdis2isis_app + +# Build rule for target. +mdis2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mdis2isis_app +.PHONY : mdis2isis_app + +# fast build rule for target. +mdis2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/mdis2isis_app.dir/build.make objects/CMakeFiles/mdis2isis_app.dir/build +.PHONY : mdis2isis_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_MultivariateStatistics + +# Build rule for target. +isis3_unit_test_MultivariateStatistics: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MultivariateStatistics +.PHONY : isis3_unit_test_MultivariateStatistics + +# fast build rule for target. +isis3_unit_test_MultivariateStatistics/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MultivariateStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_MultivariateStatistics.dir/build +.PHONY : isis3_unit_test_MultivariateStatistics/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlMeasure + +# Build rule for target. +isis3_unit_test_ControlMeasure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlMeasure +.PHONY : isis3_unit_test_ControlMeasure + +# fast build rule for target. +isis3_unit_test_ControlMeasure/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlMeasure.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlMeasure.dir/build +.PHONY : isis3_unit_test_ControlMeasure/fast + +#============================================================================= +# Target rules for targets named marciflip_app + +# Build rule for target. +marciflip_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 marciflip_app +.PHONY : marciflip_app + +# fast build rule for target. +marciflip_app/fast: + $(MAKE) -f objects/CMakeFiles/marciflip_app.dir/build.make objects/CMakeFiles/marciflip_app.dir/build +.PHONY : marciflip_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlMeasureLogData + +# Build rule for target. +isis3_unit_test_ControlMeasureLogData: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlMeasureLogData +.PHONY : isis3_unit_test_ControlMeasureLogData + +# fast build rule for target. +isis3_unit_test_ControlMeasureLogData/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlMeasureLogData.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlMeasureLogData.dir/build +.PHONY : isis3_unit_test_ControlMeasureLogData/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlNet + +# Build rule for target. +isis3_unit_test_ControlNet: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNet +.PHONY : isis3_unit_test_ControlNet + +# fast build rule for target. +isis3_unit_test_ControlNet/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNet.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNet.dir/build +.PHONY : isis3_unit_test_ControlNet/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_Mercator + +# Build rule for target. +isis3_unit_test_Mercator: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Mercator +.PHONY : isis3_unit_test_Mercator + +# fast build rule for target. +isis3_unit_test_Mercator/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Mercator.dir/build.make objects/CMakeFiles/isis3_unit_test_Mercator.dir/build +.PHONY : isis3_unit_test_Mercator/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_NaifDskPlateModel + +# Build rule for target. +isis3_unit_test_NaifDskPlateModel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifDskPlateModel +.PHONY : isis3_unit_test_NaifDskPlateModel + +# fast build rule for target. +isis3_unit_test_NaifDskPlateModel/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifDskPlateModel.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifDskPlateModel.dir/build +.PHONY : isis3_unit_test_NaifDskPlateModel/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlNetDiff + +# Build rule for target. +isis3_unit_test_ControlNetDiff: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetDiff +.PHONY : isis3_unit_test_ControlNetDiff + +# fast build rule for target. +isis3_unit_test_ControlNetDiff/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetDiff.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetDiff.dir/build +.PHONY : isis3_unit_test_ControlNetDiff/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_LabelTranslationManager + +# Build rule for target. +isis3_unit_test_LabelTranslationManager: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LabelTranslationManager +.PHONY : isis3_unit_test_LabelTranslationManager + +# fast build rule for target. +isis3_unit_test_LabelTranslationManager/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LabelTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_LabelTranslationManager.dir/build +.PHONY : isis3_unit_test_LabelTranslationManager/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlNetValidMeasure + +# Build rule for target. +isis3_unit_test_ControlNetValidMeasure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetValidMeasure +.PHONY : isis3_unit_test_ControlNetValidMeasure + +# fast build rule for target. +isis3_unit_test_ControlNetValidMeasure/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetValidMeasure.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetValidMeasure.dir/build +.PHONY : isis3_unit_test_ControlNetValidMeasure/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_GridPolygonSeeder + +# Build rule for target. +isis3_unit_test_GridPolygonSeeder: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GridPolygonSeeder +.PHONY : isis3_unit_test_GridPolygonSeeder + +# fast build rule for target. +isis3_unit_test_GridPolygonSeeder/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GridPolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_GridPolygonSeeder.dir/build +.PHONY : isis3_unit_test_GridPolygonSeeder/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_ControlPoint + +# Build rule for target. +isis3_unit_test_ControlPoint: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlPoint +.PHONY : isis3_unit_test_ControlPoint + +# fast build rule for target. +isis3_unit_test_ControlPoint/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlPoint.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlPoint.dir/build +.PHONY : isis3_unit_test_ControlPoint/fast + +#============================================================================= +# Target rules for targets named ascii2isis_app + +# Build rule for target. +ascii2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ascii2isis_app +.PHONY : ascii2isis_app + +# fast build rule for target. +ascii2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/ascii2isis_app.dir/build.make objects/CMakeFiles/ascii2isis_app.dir/build +.PHONY : ascii2isis_app/fast + +#============================================================================= +# Target rules for targets named hist_app + +# Build rule for target. +hist_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 hist_app +.PHONY : hist_app + +# fast build rule for target. +hist_app/fast: + $(MAKE) -f objects/CMakeFiles/hist_app.dir/build.make objects/CMakeFiles/hist_app.dir/build +.PHONY : hist_app/fast + +#============================================================================= +# Target rules for targets named isis3_unit_test_PushFrameCameraCcdLayout + +# Build rule for target. +isis3_unit_test_PushFrameCameraCcdLayout: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCameraCcdLayout +.PHONY : isis3_unit_test_PushFrameCameraCcdLayout + +# fast build rule for target. +isis3_unit_test_PushFrameCameraCcdLayout/fast: + $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCameraCcdLayout.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCameraCcdLayout.dir/build +.PHONY : isis3_unit_test_PushFrameCameraCcdLayout/fast + +#============================================================================= +# Target rules for targets named automos_app + +# Build rule for target. +automos_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 automos_app +.PHONY : automos_app + +# fast build rule for target. +automos_app/fast: + $(MAKE) -f objects/CMakeFiles/automos_app.dir/build.make objects/CMakeFiles/automos_app.dir/build +.PHONY : automos_app/fast + +#============================================================================= +# Target rules for targets named autoregtemplate_app + +# Build rule for target. +autoregtemplate_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 autoregtemplate_app +.PHONY : autoregtemplate_app + +# fast build rule for target. +autoregtemplate_app/fast: + $(MAKE) -f objects/CMakeFiles/autoregtemplate_app.dir/build.make objects/CMakeFiles/autoregtemplate_app.dir/build +.PHONY : autoregtemplate_app/fast + +#============================================================================= +# Target rules for targets named bandtrim_app + +# Build rule for target. +bandtrim_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 bandtrim_app +.PHONY : bandtrim_app + +# fast build rule for target. +bandtrim_app/fast: + $(MAKE) -f objects/CMakeFiles/bandtrim_app.dir/build.make objects/CMakeFiles/bandtrim_app.dir/build +.PHONY : bandtrim_app/fast + +#============================================================================= +# Target rules for targets named msi2isis_app + +# Build rule for target. +msi2isis_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 msi2isis_app +.PHONY : msi2isis_app + +# fast build rule for target. +msi2isis_app/fast: + $(MAKE) -f objects/CMakeFiles/msi2isis_app.dir/build.make objects/CMakeFiles/msi2isis_app.dir/build +.PHONY : msi2isis_app/fast + +#============================================================================= +# Target rules for targets named butterworth_app + +# Build rule for target. +butterworth_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 butterworth_app +.PHONY : butterworth_app + +# fast build rule for target. +butterworth_app/fast: + $(MAKE) -f objects/CMakeFiles/butterworth_app.dir/build.make objects/CMakeFiles/butterworth_app.dir/build +.PHONY : butterworth_app/fast + +#============================================================================= +# Target rules for targets named mapsize_app + +# Build rule for target. +mapsize_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mapsize_app +.PHONY : mapsize_app + +# fast build rule for target. +mapsize_app/fast: + $(MAKE) -f objects/CMakeFiles/mapsize_app.dir/build.make objects/CMakeFiles/mapsize_app.dir/build +.PHONY : mapsize_app/fast + +#============================================================================= +# Target rules for targets named cam2cam_app + +# Build rule for target. +cam2cam_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cam2cam_app +.PHONY : cam2cam_app + +# fast build rule for target. +cam2cam_app/fast: + $(MAKE) -f objects/CMakeFiles/cam2cam_app.dir/build.make objects/CMakeFiles/cam2cam_app.dir/build +.PHONY : cam2cam_app/fast + +#============================================================================= +# Target rules for targets named campt_app + +# Build rule for target. +campt_app: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 campt_app +.PHONY : campt_app + +# fast build rule for target. +campt_app/fast: + $(MAKE) -f objects/CMakeFiles/campt_app.dir/build.make objects/CMakeFiles/campt_app.dir/build +.PHONY : campt_app/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/strip" + @echo "... install" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... edit_cache" + @echo "... docs" + @echo "... ContinuousSubmit" + @echo "... ContinuousCoverage" + @echo "... ContinuousTest" + @echo "... ContinuousBuild" + @echo "... ContinuousMemCheck" + @echo "... Nightly" + @echo "... NightlyTest" + @echo "... NightlyUpdate" + @echo "... install/local" + @echo "... Continuous" + @echo "... NightlyBuild" + @echo "... NightlyStart" + @echo "... NightlyMemoryCheck" + @echo "... NightlyMemCheck" + @echo "... clean_source" + @echo "... ExperimentalStart" + @echo "... ContinuousConfigure" + @echo "... NightlyCoverage" + @echo "... ExperimentalUpdate" + @echo "... test" + @echo "... ExperimentalConfigure" + @echo "... ExperimentalCoverage" + @echo "... ExperimentalBuild" + @echo "... NightlyConfigure" + @echo "... ExperimentalTest" + @echo "... ExperimentalMemCheck" + @echo "... Experimental" + @echo "... NightlySubmit" + @echo "... ExperimentalSubmit" + @echo "... ContinuousStart" + @echo "... ContinuousUpdate" + @echo "... VoyagerCamera" + @echo "... viknonoodle_app" + @echo "... vikcal_app" + @echo "... vik2isis_app" + @echo "... rososiris2isis_app" + @echo "... RosettaVirtisCamera" + @echo "... thmvisflat_app" + @echo "... ThemisVisCamera" + @echo "... mroctx2isis_app" + @echo "... marcical_app" + @echo "... marci2isis_app" + @echo "... histitch_app" + @echo "... histat_app" + @echo "... hirdrgen_app" + @echo "... hinoise_app" + @echo "... hisharpen_app" + @echo "... hijitter_app" + @echo "... hifringe_app" + @echo "... hidtmgen_app" + @echo "... hicrop_app" + @echo "... hiccdstitch_app" + @echo "... hicalproc_app" + @echo "... hical_app" + @echo "... ctxcal_app" + @echo "... crism2isis_app" + @echo "... mro_unit_test_MarciCamera" + @echo "... mro_unit_test_HiriseCamera" + @echo "... mro_unit_test_CTXCamera" + @echo "... mro" + @echo "... HiriseCamera" + @echo "... CrismCamera" + @echo "... mocuncompress_app" + @echo "... mocproc_app" + @echo "... mocnoise50_app" + @echo "... mocgap_app" + @echo "... moccal_app" + @echo "... mgs_unit_test_MocWideAngleCamera" + @echo "... mgs_unit_test_MocLabels" + @echo "... mdisedrinfo_app" + @echo "... mdis2pds_app" + @echo "... mer2isis_app" + @echo "... mar10restore_app" + @echo "... mar10cal_app" + @echo "... lrowacpho_app" + @echo "... lrowaccal_app" + @echo "... lronacpho_app" + @echo "... lronac2pds_app" + @echo "... lromakeflat_app" + @echo "... hicalbeta_app" + @echo "... MiniRF" + @echo "... LroWideAngleCamera" + @echo "... lo_unit_test_LoMediumCamera" + @echo "... lo_unit_test_LoHighCamera" + @echo "... lo_unit_test_LoCameraFiducialMap" + @echo "... lo" + @echo "... kaguyatc2isis_app" + @echo "... kaguyasp2isis_app" + @echo "... nirs2isis_app" + @echo "... HayabusaNirsCamera" + @echo "... voyramp_app" + @echo "... gllssical_app" + @echo "... dawnfc2isis_app" + @echo "... clemnircal_app" + @echo "... clem2isis_app" + @echo "... LwirCamera" + @echo "... vimscal_app" + @echo "... vims2isis_app" + @echo "... cisscal_app" + @echo "... cassini_unit_test_IssWACamera" + @echo "... vikclean_app" + @echo "... cassini" + @echo "... IssNACamera" + @echo "... apollowarp_app" + @echo "... lorri2isis_app" + @echo "... apolloremrx_app" + @echo "... apollopaninit_app" + @echo "... apollofindrx_app" + @echo "... apollo2isis_app" + @echo "... apollo_unit_test_CentroidApolloPan" + @echo "... ApolloPanoramicCamera" + @echo "... ApolloMetricCamera" + @echo "... kerneldbgen_app" + @echo "... isiscomplete_app" + @echo "... dempack_app" + @echo "... hi2isis_app" + @echo "... csspckgen_app" + @echo "... qtie_app" + @echo "... qnet_app" + @echo "... qmos_app" + @echo "... warp_app" + @echo "... sumspice_app" + @echo "... slither_app" + @echo "... prtloganalyzer_app" + @echo "... jigsaw_app" + @echo "... fplanemap_app" + @echo "... findfeatures_app" + @echo "... coreg_app" + @echo "... cnetwinnow_app" + @echo "... cnetthinner_app" + @echo "... cnetpvl2bin_app" + @echo "... MsiCamera" + @echo "... cnetmerge_app" + @echo "... cnetnewradii_app" + @echo "... cnethist_app" + @echo "... cnetcombinept_app" + @echo "... cnetbin2pvl_app" + @echo "... cnet2mat_app" + @echo "... cnet2dem_app" + @echo "... vicar2isis_app" + @echo "... NewHorizonsMvicFrameCamera" + @echo "... uncrop_app" + @echo "... trim_app" + @echo "... tonematch_app" + @echo "... tabledump_app" + @echo "... cassini_unit_test_VimsCamera" + @echo "... table2cube_app" + @echo "... hideal2pds_app" + @echo "... stretch_app" + @echo "... lrowac2isis_app" + @echo "... apollo" + @echo "... spicefit_app" + @echo "... speclowpass_app" + @echo "... chan1m32isis_app" + @echo "... spechighpass_app" + @echo "... specadd_app" + @echo "... smtk_app" + @echo "... slpmap_app" + @echo "... skypt_app" + @echo "... skymap_app" + @echo "... clemuvviscal_app" + @echo "... sigmastretch_app" + @echo "... shadow_app" + @echo "... shade_app" + @echo "... mar102isis_app" + @echo "... segment_app" + @echo "... pointreg_app" + @echo "... rotate_app" + @echo "... ringspt_app" + @echo "... ringscam2map_app" + @echo "... cnetstats_app" + @echo "... ringsautomos_app" + @echo "... raw2isis_app" + @echo "... autoseed_app" + @echo "... pixel2map_app" + @echo "... thmproc_app" + @echo "... photomet_app" + @echo "... clemnirclean_app" + @echo "... photemplate_app" + @echo "... phohillier_app" + @echo "... thm2isis_app" + @echo "... phoempglobal_app" + @echo "... viknobutter_app" + @echo "... phocube_app" + @echo "... pca_app" + @echo "... pad_app" + @echo "... outline_app" + @echo "... cneteditor_app" + @echo "... noseam_app" + @echo "... mocevenodd_app" + @echo "... mosrange_app" + @echo "... mode_app" + @echo "... minmax_app" + @echo "... median_app" + @echo "... maptrim_app" + @echo "... mappt_app" + @echo "... mapmos_app" + @echo "... socetframesettings_app" + @echo "... apollo_unit_test_ApolloMetricCamera" + @echo "... maplab_app" + @echo "... amicacal_app" + @echo "... map2map_app" + @echo "... hiequal_app" + @echo "... map2cam_app" + @echo "... lowpass_app" + @echo "... lineeq_app" + @echo "... kernfilter_app" + @echo "... isisui_app" + @echo "... isisminer_app" + @echo "... interestcube_app" + @echo "... CTXCamera" + @echo "... ifft_app" + @echo "... hifurrows_app" + @echo "... histmatch_app" + @echo "... highpass_app" + @echo "... mro_unit_test_HiLab" + @echo "... grid_app" + @echo "... greyscale_app" + @echo "... IssWACamera" + @echo "... isis2std_app" + @echo "... gradient_app" + @echo "... getsn_app" + @echo "... getkey_app" + @echo "... footprintmerge_app" + @echo "... thmdriftcor_app" + @echo "... lronaccal_app" + @echo "... footprintinit_app" + @echo "... HiresCamera" + @echo "... fits2isis_app" + @echo "... findimageoverlaps_app" + @echo "... findgaps_app" + @echo "... errors_app" + @echo "... higlob_app" + @echo "... skyrange_app" + @echo "... equalizer_app" + @echo "... edrget_app" + @echo "... VikingCamera" + @echo "... phoemplocal_app" + @echo "... editlab_app" + @echo "... poly_app" + @echo "... dstripe_app" + @echo "... dsk2isis_app" + @echo "... divfilter_app" + @echo "... MdisCamera" + @echo "... desmear_app" + @echo "... demprep_app" + @echo "... ddd2isis_app" + @echo "... cubeit_app" + @echo "... cubeavg_app" + @echo "... messckgen_app" + @echo "... cropspecial_app" + @echo "... KaguyaMiCamera" + @echo "... svfilter_app" + @echo "... crop_app" + @echo "... copylabel_app" + @echo "... circle_app" + @echo "... catlab_app" + @echo "... camtrim_app" + @echo "... isis3_unit_test_MaximumCorrelation" + @echo "... isis3_unit_test_Gruen" + @echo "... isis3_unit_test_LunarLambertMcEwen" + @echo "... isis3_unit_test_Mixed" + @echo "... isis3_unit_test_LunarLambertEmpirical" + @echo "... isis3_unit_test_PolygonSeederFactory" + @echo "... HayabusaAmicaCamera" + @echo "... deltack_app" + @echo "... isis3_unit_test_Longitude" + @echo "... isis3_unit_test_Matrix" + @echo "... isis3_unit_test_CubeInfixToPostfix" + @echo "... qview_app" + @echo "... isis3_unit_test_LineEquation" + @echo "... cosi_app" + @echo "... isis3_unit_test_LambertAzimuthalEqualArea" + @echo "... isis3_unit_test_LineScanCameraSkyMap" + @echo "... isis3_unit_test_JP2Importer" + @echo "... isis3_unit_test_ControlPointList" + @echo "... mimap2isis_app" + @echo "... kaguyami2isis_app" + @echo "... remrx_app" + @echo "... isis3_unit_test_JP2Exporter" + @echo "... cnettable_app" + @echo "... isis3_unit_test_JP2Error" + @echo "... leisa2isis_app" + @echo "... isis3_unit_test_Isis" + @echo "... spkwriter_app" + @echo "... isis3_unit_test_MinnaertEmpirical" + @echo "... isis3_unit_test_Intercept" + @echo "... ringsmappt_app" + @echo "... isis3_unit_test_BandManager" + @echo "... isis3_unit_test_InfixToPostfix" + @echo "... isis3_unit_test_Planar" + @echo "... isis3_unit_test_ImportPdsTable" + @echo "... mro_unit_test_CrismCamera" + @echo "... isis3_unit_test_Resource" + @echo "... UvvisCamera" + @echo "... cnetdiff_app" + @echo "... cubeatt_app" + @echo "... isis3_unit_test_ImageImporter" + @echo "... makecube_app" + @echo "... isis2fits_app" + @echo "... Mercator" + @echo "... UpturnedEllipsoidTransverseAzimuthal" + @echo "... isis3_unit_test_SerialNumberList" + @echo "... isis3_unit_test_ImageExporter" + @echo "... DawnFcCamera" + @echo "... apollocal_app" + @echo "... isis3_unit_test_ImageOverlapSet" + @echo "... isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal" + @echo "... hirdr2isis_app" + @echo "... isis3_unit_test_IdealCamera" + @echo "... isis3_unit_test_ProcessExportPds" + @echo "... isis3_unit_test_IException" + @echo "... isis3_unit_test_HapkeAtm1" + @echo "... mar10clean_app" + @echo "... isis3_unit_test_Gui" + @echo "... thmnoseam_app" + @echo "... fx_app" + @echo "... isis3_unit_test_Ransac" + @echo "... RosettaOsirisCamera" + @echo "... isis3_unit_test_Histogram" + @echo "... isis3_unit_test_GroupedStatistics" + @echo "... apollo_unit_test_Apollo" + @echo "... isis3_unit_test_GaussianStretch" + @echo "... isis3_unit_test_GroundGrid" + @echo "... isis3_unit_test_GSLUtility" + @echo "... isis3_unit_test_FramingCamera" + @echo "... isis3_unit_test_Stretch" + @echo "... isis3_unit_test_FileName" + @echo "... SsiCamera" + @echo "... isis3_unit_test_Isotropic2" + @echo "... NewHorizonsMvicTdiCamera" + @echo "... mrf2pds_app" + @echo "... isis3_unit_test_Pipeline" + @echo "... mask_app" + @echo "... isis3_unit_test_FileList" + @echo "... isis3_unit_test_HapkeAtm2" + @echo "... algebra_app" + @echo "... isis3_unit_test_Isotropic1" + @echo "... isis3_unit_test_InlineInfixToPostfix" + @echo "... bit2bit_app" + @echo "... isis3_unit_test_ExportPdsTable" + @echo "... isis3_unit_test_PrincipalComponentAnalysis" + @echo "... isis3_unit_test_Equirectangular" + @echo "... isis3_unit_test_TopoAtm" + @echo "... isis3_unit_test_Environment" + @echo "... isis3_unit_test_Enlarge" + @echo "... isis3_unit_test_OverlapNormalization" + @echo "... himos_app" + @echo "... StandardDeviationOperator" + @echo "... isis3_unit_test_SessionLog" + @echo "... makeflat_app" + @echo "... isis3_unit_test_LunarLambert" + @echo "... isis3_unit_test_Distance" + @echo "... isis3_unit_test_Displacement" + @echo "... isis3_unit_test_JP2Encoder" + @echo "... cassini_unit_test_CisscalFile" + @echo "... isis3_unit_test_ImageOverlap" + @echo "... isis3_unit_test_DemShape" + @echo "... trimfilter_app" + @echo "... MoonAlbedo" + @echo "... isis3_unit_test_GisBlob" + @echo "... noisefilter_app" + @echo "... isis3_unit_test_CubeManager" + @echo "... lo2isis_app" + @echo "... isis3_unit_test_AutoReg" + @echo "... isis3_unit_test_Stereo" + @echo "... LunarLambertEmpirical" + @echo "... isis3_unit_test_Latitude" + @echo "... isis3_unit_test_MaximumLikelihoodWFunctions" + @echo "... LoMediumCamera" + @echo "... isis3_unit_test_Constants" + @echo "... isis3_unit_test_EmbreeShapeModel" + @echo "... NoOperator" + @echo "... isis3_unit_test_IString" + @echo "... ThemisIrCamera" + @echo "... isis3_unit_test_Column" + @echo "... MarciCamera" + @echo "... cnetadd_app" + @echo "... isis3_unit_test_CollectorMap" + @echo "... HrscCamera" + @echo "... MoravecOperator" + @echo "... hicolormos_app" + @echo "... isis3_unit_test_CSVReader" + @echo "... isis3_unit_test_Interpolator" + @echo "... isis3_unit_test_SpectralDefinition" + @echo "... StripPolygonSeeder" + @echo "... isis3_unit_test_MosaicSceneWidget" + @echo "... explode_app" + @echo "... ObliqueCylindrical" + @echo "... LunarLambertMcEwen" + @echo "... PolarStereographic" + @echo "... MocNarrowAngleCamera" + @echo "... PointPerspective" + @echo "... mical_app" + @echo "... isis3_unit_test_TransverseMercator" + @echo "... LoHighCamera" + @echo "... AdaptiveGruen" + @echo "... isis3_unit_test_Spice" + @echo "... LambertAzimuthalEqualArea" + @echo "... mirror_app" + @echo "... isis3_unit_test_History" + @echo "... rosvirtis2isis_app" + @echo "... isis3_unit_test_MinimumDifference" + @echo "... isis3_unit_test_ProcessByTile" + @echo "... isis3_unit_test_PvlTokenizer" + @echo "... thmvistrim_app" + @echo "... MocWideAngleCamera" + @echo "... mdisproc_app" + @echo "... Planar" + @echo "... hijitreg_app" + @echo "... MaximumCorrelation" + @echo "... Hapke" + @echo "... isis3_unit_test_PvlFormatPds" + @echo "... cnetsplit_app" + @echo "... TransverseMercator" + @echo "... ciss2isis_app" + @echo "... isis3_unit_test_Cube" + @echo "... isis3_unit_test_AdaptiveGruen" + @echo "... cubenorm_app" + @echo "... isis3_unit_test_Chip" + @echo "... isis3_unit_test_ExportDescription" + @echo "... appjit_app" + @echo "... ckwriter_app" + @echo "... ForstnerOperator" + @echo "... Lambert" + @echo "... mrf2isis_app" + @echo "... isis3_unit_test_Spectel" + @echo "... isis3_unit_test_Topo" + @echo "... isis3_unit_test_Equalization" + @echo "... isis3_unit_test_Hillshade" + @echo "... DawnVirCamera" + @echo "... Sinusoidal" + @echo "... isis3_unit_test_Projection" + @echo "... isis3_unit_test_RadarGroundMap" + @echo "... cathist_app" + @echo "... LommelSeeliger" + @echo "... isis3_unit_test_SimpleCylindrical" + @echo "... isis3_unit_test_GisTopology" + @echo "... HapkeAtm1" + @echo "... isis3_unit_test_Message" + @echo "... isis3_unit_test_DatabaseFactory" + @echo "... rolo2isis_app" + @echo "... LroNarrowAngleCamera" + @echo "... isis3_unit_test_FunctionTools" + @echo "... noproj_app" + @echo "... isis3_unit_test_Minnaert" + @echo "... mat2cnet_app" + @echo "... camrange_app" + @echo "... Orthographic" + @echo "... camstats_app" + @echo "... isis3_unit_test_ObliqueCylindrical" + @echo "... NirCamera" + @echo "... RingCylindrical" + @echo "... isis3_unit_test_LimitPolygonSeeder" + @echo "... clemnirnoise_app" + @echo "... isis3_unit_test_CameraDistortionMap" + @echo "... isis3_unit_test_SpectralDefinition1D" + @echo "... lronacecho_app" + @echo "... overlapstats_app" + @echo "... isis3_unit_test_ControlGraph" + @echo "... vdcomp_app" + @echo "... isis3_unit_test_ProcessImport" + @echo "... messspkgen_app" + @echo "... isis3_unit_test_Endian" + @echo "... isis3_unit_test_Application" + @echo "... isis3_unit_test_QtExporter" + @echo "... isis3_unit_test_Kernels" + @echo "... isis3_unit_test_TiffImporter" + @echo "... isis3_unit_test_CubeCalculator" + @echo "... isis3_unit_test_CameraDetectorMap" + @echo "... flip_app" + @echo "... LambertConformal" + @echo "... lrowac2pds_app" + @echo "... isis3_unit_test_GisGeometry" + @echo "... amica2isis_app" + @echo "... isis3_unit_test_PvlSequence" + @echo "... isis3_unit_test_Quaternion" + @echo "... isis3_unit_test_EllipsoidShape" + @echo "... GridPolygonSeeder" + @echo "... maptemplate_app" + @echo "... decorstretch_app" + @echo "... isis3_unit_test_LineScanCamera" + @echo "... cassini_unit_test_CissLabels" + @echo "... isis3_unit_test_FilterCachingAlgorithm" + @echo "... SimpleCylindrical" + @echo "... isis3_unit_test_AtmosModel" + @echo "... mvic2isis_app" + @echo "... lronac2isis_app" + @echo "... isis3_unit_test_BasisFunction" + @echo "... AlbedoAtm" + @echo "... catoriglab_app" + @echo "... isis3_unit_test_AlphaCube" + @echo "... isis3_unit_test_JP2Decoder" + @echo "... Topo" + @echo "... Equirectangular" + @echo "... Shade" + @echo "... isis3_unit_test_InlineCalculator" + @echo "... isis3_unit_test_Process" + @echo "... viknopepper_app" + @echo "... isis3_unit_test_UserInterface" + @echo "... isis3_unit_test_ID" + @echo "... GradientOperator" + @echo "... isis3_unit_test_PolygonSeeder" + @echo "... pds2isis_app" + @echo "... IdealCamera" + @echo "... isis3_unit_test_LambertConformal" + @echo "... isis3_unit_test_Shade" + @echo "... isis3_unit_test_EmbreeTargetShape" + @echo "... voy2isis_app" + @echo "... Mixed" + @echo "... isis3_unit_test_CameraPointInfo" + @echo "... isis3_unit_test_StandardDeviationOperator" + @echo "... isis3_unit_test_LommelSeeliger" + @echo "... ShadeAtm" + @echo "... thmbasemap1_app" + @echo "... isis3_unit_test_NaifStatus" + @echo "... handmos_app" + @echo "... isis3_unit_test_BundleUtilities" + @echo "... isis3_unit_test_EmbreeTargetManager" + @echo "... pvldiff_app" + @echo "... isis3_unit_test_CorrelationMatrix" + @echo "... isis3_unit_test_ImagePolygon" + @echo "... LunarAzimuthalEqualArea" + @echo "... isis3_unit_test_LinearAlgebra" + @echo "... isis3_unit_test_CameraFactory" + @echo "... LunarLambert" + @echo "... hrsc2isis_app" + @echo "... isis3_unit_test_BoxcarManager" + @echo "... TopoAtm" + @echo "... hsv2rgb_app" + @echo "... Isotropic1" + @echo "... isis3_unit_test_PolygonTools" + @echo "... mgs_unit_test_MocNarrowAngleSumming" + @echo "... isis3_unit_test_CameraSkyMap" + @echo "... moc2isis_app" + @echo "... isis3_unit_test_CubeDataThread" + @echo "... isis3_unit_test_LineManager" + @echo "... isis3_unit_test_CameraFocalPlaneMap" + @echo "... isis3_unit_test_StatCumProbDistDynCalc" + @echo "... isis3_unit_test_RadarGroundRangeMap" + @echo "... isis3_unit_test_CameraGroundMap" + @echo "... voycal_app" + @echo "... isis3_unit_test_Affine" + @echo "... isis3_unit_test_ControlCubeGraphNode" + @echo "... isis3_unit_test_Albedo" + @echo "... isis3_unit_test_CameraStatistics" + @echo "... pds2hideal_app" + @echo "... isis3_unit_test_NaifDskApi" + @echo "... isis2pds_app" + @echo "... isis3_unit_test_Selection" + @echo "... isis3_unit_test_Angle" + @echo "... Mariner10Camera" + @echo "... isis3_unit_test_GaussianDistribution" + @echo "... MinimumDifference" + @echo "... isis3_unit_test_Anisotropic2" + @echo "... isis3_unit_test_Area3D" + @echo "... isis3_unit_test_GradientOperator" + @echo "... cnetcheck_app" + @echo "... percent_app" + @echo "... isis3_unit_test_AlbedoAtm" + @echo "... isis3" + @echo "... NewHorizonsLeisaCamera" + @echo "... isis3_unit_test_PushFrameCameraGroundMap" + @echo "... isis3_unit_test_BufferManager" + @echo "... isis3_unit_test_CubeAttribute" + @echo "... gaussstretch_app" + @echo "... MinnaertEmpirical" + @echo "... hicubeit_app" + @echo "... lopdsgen_app" + @echo "... cnetedit_app" + @echo "... isis3_unit_test_Kernel" + @echo "... fillgap_app" + @echo "... isis3_unit_test_Basis1VariableFunction" + @echo "... cassini_unit_test_IssNACamera" + @echo "... isis3_unit_test_Blobber" + @echo "... VimsCamera" + @echo "... cnetref_app" + @echo "... specpix_app" + @echo "... isis3_unit_test_BoxcarCachingAlgorithm" + @echo "... ctxevenodd_app" + @echo "... isis3_unit_test_Calculator" + @echo "... isis3_unit_test_EquatorialCylindricalShape" + @echo "... spiceinit_app" + @echo "... photrim_app" + @echo "... Robinson" + @echo "... deriv_app" + @echo "... isis3_unit_test_Brick" + @echo "... isis3_unit_test_Buffer" + @echo "... isis3_unit_test_ControlNetVersioner" + @echo "... isis3_unit_test_Anisotropic1" + @echo "... isis3_unit_test_LineScanCameraDetectorMap" + @echo "... shadowtau_app" + @echo "... Anisotropic1" + @echo "... isis3_unit_test_AtmosModelFactory" + @echo "... isis3_unit_test_Blob" + @echo "... isis3_unit_test_SpicePosition" + @echo "... isis3_unit_test_BundleSolutionInfo" + @echo "... gauss_app" + @echo "... isis3_unit_test_BulletDskShape" + @echo "... cubediff_app" + @echo "... Minnaert" + @echo "... isis3_unit_test_BulletShapeModel" + @echo "... std2isis_app" + @echo "... isis3_unit_test_TileManager" + @echo "... isis3_unit_test_BulletTargetShape" + @echo "... caminfo_app" + @echo "... isis3_unit_test_Camera" + @echo "... Mollweide" + @echo "... isis3_unit_test_Centroid" + @echo "... isis3_unit_test_PixelFOV" + @echo "... isis3_unit_test_Mollweide" + @echo "... isis3_unit_test_MoonAlbedo" + @echo "... isis3_unit_test_FourierTransform" + @echo "... isis3_unit_test_NaifDskShape" + @echo "... isis3_unit_test_SpectralDefinition2D" + @echo "... dawnvir2isis_app" + @echo "... Chandrayaan1M3Camera" + @echo "... ratio_app" + @echo "... isis3_unit_test_NoNormalization" + @echo "... isis3_unit_test_NoOperator" + @echo "... isis3_unit_test_TProjection" + @echo "... apollo_unit_test_ApolloPanoramicCamera" + @echo "... isis3_unit_test_NormModel" + @echo "... isis3_unit_test_NormModelFactory" + @echo "... stats_app" + @echo "... isis3_unit_test_LeastSquares" + @echo "... isis3_unit_test_Sensor" + @echo "... isis3_unit_test_NumericalApproximation" + @echo "... hicubenorm_app" + @echo "... isis3_unit_test_Lambert" + @echo "... isis3_unit_test_PixelType" + @echo "... isis3_unit_test_TableRecord" + @echo "... isis3_unit_test_SubArea" + @echo "... socetlinescankeywords_app" + @echo "... blobdump_app" + @echo "... isis3_unit_test_ObservationNumber" + @echo "... isis3_unit_test_ObservationNumberList" + @echo "... isis3_unit_test_Orthographic" + @echo "... NewHorizonsLorriCamera" + @echo "... mdiscal_app" + @echo "... isis3_unit_test_OverlapStatistics" + @echo "... isis3_unit_test_Parabola" + @echo "... isis3_unit_test_PhotoModel" + @echo "... isis3_unit_test_RadialDistortionMap" + @echo "... viknosalt_app" + @echo "... isis3_unit_test_PhotoModelFactory" + @echo "... cnetextract_app" + @echo "... isis3_unit_test_ProcessByQuickFilter" + @echo "... isis3_unit_test_SqlRecord" + @echo "... isis3_unit_test_Photometry" + @echo "... isis3_unit_test_Pixel" + @echo "... isis3_unit_test_PlaneShape" + @echo "... isis3_unit_test_Plugin" + @echo "... isis3_unit_test_PointPerspective" + @echo "... isis3_unit_test_ControlNetStatistics" + @echo "... isis3_unit_test_ShapeModel" + @echo "... isis3_unit_test_CubeCachingAlgorithm" + @echo "... isis3_unit_test_ProcessRubberSheet" + @echo "... isis3_unit_test_EndianSwapper" + @echo "... isis3_unit_test_PolynomialBivariate" + @echo "... isis3_unit_test_Robinson" + @echo "... isis3_unit_test_PolynomialUnivariate" + @echo "... isis3_unit_test_Target" + @echo "... isis3_unit_test_BundleSettings" + @echo "... isis3_unit_test_RingCylindrical" + @echo "... Anisotropic2" + @echo "... isis3_unit_test_Portal" + @echo "... isis3_unit_test_Preference" + @echo "... isis3_unit_test_ProcessByBoxcar" + @echo "... histeq_app" + @echo "... isis3_unit_test_ProcessByBrick" + @echo "... isis3_unit_test_ProcessBySample" + @echo "... isis2gml_app" + @echo "... isis3_unit_test_ProcessBySpectra" + @echo "... blend_app" + @echo "... findrx_app" + @echo "... isis3_unit_test_ProcessExport" + @echo "... cam2map_app" + @echo "... isis3_unit_test_Hapke" + @echo "... isis3_unit_test_ProcessExportPds4" + @echo "... kuwahara_app" + @echo "... isis3_unit_test_ProcessGroundPolygons" + @echo "... isis3_unit_test_ProcessImportFits" + @echo "... isis3_unit_test_OriginalLabel" + @echo "... isis3_unit_test_PolarStereographic" + @echo "... isis3_unit_test_ProcessImportPds" + @echo "... specdivfilter_app" + @echo "... isis3_unit_test_WorldMapper" + @echo "... clemhirescal_app" + @echo "... isis3_unit_test_ProcessImportVicar" + @echo "... isis3_unit_test_DbAccess" + @echo "... isis3_unit_test_ProcessMapMosaic" + @echo "... isis3_unit_test_ProcessMosaic" + @echo "... isis3_unit_test_ProcessPolygons" + @echo "... isis3_unit_test_ProgramLauncher" + @echo "... kaguyasp2ascii_app" + @echo "... mvstats_app" + @echo "... isis3_unit_test_PushFrameCamera" + @echo "... isis3_unit_test_TriangularPlate" + @echo "... hidestripe_app" + @echo "... center_app" + @echo "... isis3_unit_test_AutoRegFactory" + @echo "... isis3_unit_test_MoravecOperator" + @echo "... isis3_unit_test_PushFrameCameraDetectorMap" + @echo "... isis3_unit_test_Pvl" + @echo "... isis3_unit_test_PvlContainer" + @echo "... fft_app" + @echo "... isis3_unit_test_PvlEditDialog" + @echo "... LimitPolygonSeeder" + @echo "... isis3_unit_test_PvlFlatMap" + @echo "... isis3_unit_test_PvlFormat" + @echo "... vikfixtrx_app" + @echo "... NoNormalization" + @echo "... isis3_unit_test_RingPlaneProjection" + @echo "... nocam2map_app" + @echo "... isis3_unit_test_PvlGroup" + @echo "... isis3_unit_test_AbstractPlate" + @echo "... isis3_unit_test_PvlKeyword" + @echo "... isis3_unit_test_PvlObject" + @echo "... isis3_unit_test_PvlToPvlTranslationManager" + @echo "... sharpen_app" + @echo "... isis3_unit_test_PvlToXmlTranslationManager" + @echo "... isis3_unit_test_LunarAzimuthalEqualArea" + @echo "... isis3_unit_test_PvlToken" + @echo "... isis3_unit_test_BulletWorldManager" + @echo "... isis3_unit_test_PvlTranslationTable" + @echo "... isis3_unit_test_SurfaceModel" + @echo "... Albedo" + @echo "... isis3_unit_test_InterestOperator" + @echo "... desmile_app" + @echo "... isis3_unit_test_QtImporter" + @echo "... isis3_unit_test_QuickFilter" + @echo "... isis3_unit_test_RadarPulseMap" + @echo "... isis3_unit_test_Reduce" + @echo "... isis3_unit_test_ControlNetFilter" + @echo "... cubefunc_app" + @echo "... isis3_unit_test_RadarSkyMap" + @echo "... barscale_app" + @echo "... isis3_unit_test_OriginalXmlLabel" + @echo "... isis3_unit_test_RadarSlantRangeMap" + @echo "... isis3_unit_test_ReseauDistortionMap" + @echo "... rgb2hsv_app" + @echo "... enlarge_app" + @echo "... isis3_unit_test_AbstractShape" + @echo "... isis3_unit_test_SerialNumber" + @echo "... isis3_unit_test_ShadeAtm" + @echo "... reduce_app" + @echo "... isis3_unit_test_ShapeModelFactory" + @echo "... isis2raw_app" + @echo "... isis3_unit_test_ProcessByLine" + @echo "... isis3_unit_test_Sinusoidal" + @echo "... isis3_unit_test_SmtkMatcher" + @echo "... translate_app" + @echo "... isis3_unit_test_SparseBlockMatrix" + @echo "... spiceserver_app" + @echo "... isis3_unit_test_Color" + @echo "... isis3_unit_test_SpecialPixel" + @echo "... isis3_unit_test_Statistics" + @echo "... isis3_unit_test_SampleManager" + @echo "... isis3_unit_test_Strategy" + @echo "... mar10nonoise_app" + @echo "... Isotropic2" + @echo "... isis3_unit_test_StreamExporter" + @echo "... isis3_unit_test_SurfacePoint" + @echo "... isis3_unit_test_Table" + @echo "... isis3_unit_test_SpiceRotation" + @echo "... isis3_unit_test_TableField" + @echo "... seedgrid_app" + @echo "... isis3_unit_test_ProjectionFactory" + @echo "... isis3_unit_test_TextFile" + @echo "... isis3_unit_test_TiffExporter" + @echo "... mro_unit_test_HiEqualization" + @echo "... isis3_unit_test_InterestOperatorFactory" + @echo "... gllssi2isis_app" + @echo "... isis3_unit_test_LineScanCameraGroundMap" + @echo "... isis3_unit_test_IsisAml" + @echo "... isis3_unit_test_Transform" + @echo "... isis3_unit_test_UniqueIOCachingAlgorithm" + @echo "... isis3_unit_test_UniversalGroundMap" + @echo "... isis3_unit_test_VariableLineScanCameraDetectorMap" + @echo "... isis3_unit_test_VecFilter" + @echo "... fakecube_app" + @echo "... isis3_unit_test_XmlStackedHandler" + @echo "... isis2ascii_app" + @echo "... isis3_unit_test_XmlStackedHandlerReader" + @echo "... mapgrid_app" + @echo "... isis3_unit_test_StripPolygonSeeder" + @echo "... isis3_unit_test_XmlToPvlTranslationManager" + @echo "... isis3_unit_test_Progress" + @echo "... isis3_unit_test_iTime" + @echo "... isis3_unit_test_KernelDb" + @echo "... gllnims2isis_app" + @echo "... isis3_unit_test_Database" + @echo "... mdisddr_app" + @echo "... HapkeAtm2" + @echo "... isis3_unit_test_DbProfile" + @echo "... isis3_unit_test_SpectralDefinitionFactory" + @echo "... isis3_unit_test_SqlQuery" + @echo "... mgs" + @echo "... isis3_unit_test_RadarCamera" + @echo "... isis3_unit_test_BundleAdjust" + @echo "... isis3_unit_test_ForstnerOperator" + @echo "... isis3_unit_test_BundleResults" + @echo "... mgs_unit_test_MocNarrowAngleCamera" + @echo "... apollopanstitcher_app" + @echo "... bandnorm_app" + @echo "... mdis2isis_app" + @echo "... isis3_unit_test_MultivariateStatistics" + @echo "... isis3_unit_test_ControlMeasure" + @echo "... marciflip_app" + @echo "... isis3_unit_test_ControlMeasureLogData" + @echo "... isis3_unit_test_ControlNet" + @echo "... isis3_unit_test_Mercator" + @echo "... isis3_unit_test_NaifDskPlateModel" + @echo "... isis3_unit_test_ControlNetDiff" + @echo "... isis3_unit_test_LabelTranslationManager" + @echo "... isis3_unit_test_ControlNetValidMeasure" + @echo "... isis3_unit_test_GridPolygonSeeder" + @echo "... isis3_unit_test_ControlPoint" + @echo "... ascii2isis_app" + @echo "... hist_app" + @echo "... isis3_unit_test_PushFrameCameraCcdLayout" + @echo "... automos_app" + @echo "... autoregtemplate_app" + @echo "... bandtrim_app" + @echo "... msi2isis_app" + @echo "... butterworth_app" + @echo "... mapsize_app" + @echo "... cam2cam_app" + @echo "... campt_app" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake new file mode 100644 index 0000000000..8c3d369fd7 --- /dev/null +++ b/isis/cmake/AddIsisModule.cmake @@ -0,0 +1,296 @@ +#=============================================================================== +# Functions to add ISIS modules to the CMake build +#=============================================================================== + +include(CodeGeneration) + + +# Incorporate an application folder +function(add_isis_app folder libDependencies) + + # The internal build name will be different than the output name + # - This deals with problems compiling same-named targets on case-insensitive machines. + get_filename_component(appName ${folder} NAME) + set(internalAppName ${appName}_app) + + # Get the source and header files + file(GLOB headers "${folder}/*.h" "${folder}/*.hpp") + file(GLOB sources "${folder}/*.c" "${folder}/*.cpp") + file(GLOB xmlFiles "${folder}/*.xml") + + # All the XML files need to be copied to the install directory + # - They also need be put in the source folder for the app tests + install(FILES ${xmlFiles} DESTINATION "${CMAKE_INSTALL_PREFIX}/bin/xml") + if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin/xml) + execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/bin/xml) + endif() + + foreach(xml ${xmlFiles}) + get_filename_component(folder ${xml} DIRECTORY) + get_filename_component(name ${folder} NAME) + if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin/xml/${name}.xml) + execute_process(COMMAND ln -s "${xml}" "${name}.xml" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin/xml) + endif() + endforeach() + + # Generate required QT files + generate_moc_files(mocFiles ${folder}) + set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + + # Set up the executable + add_executable(${internalAppName} ${headers} ${sources} ${mocFiles}) + set_target_properties(${internalAppName} PROPERTIES LINKER_LANGUAGE CXX) + + # Have the app install with the real name, not the internal name. + target_link_libraries(${internalAppName} ${libDependencies}) + set_target_properties(${internalAppName} PROPERTIES OUTPUT_NAME ${appName}) + install(TARGETS ${internalAppName} DESTINATION bin) + + if(${buildTests}) + # Set up the app tests + # - There may be multiple test folders in the /tsts directory, each + # with its own Makefile describing the test. + set(testFolder ${folder}/tsts) + file(GLOB tests "${testFolder}/*") + foreach(f ${tests}) + add_makefile_test_folder(${f} ${appName}_app) + endforeach() + endif() + +endfunction(add_isis_app) + + + + +# Set up the lone unit test in an obj folder +function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) + + # Get the object name (last folder part) + get_filename_component(folder ${testFile} DIRECTORY) + get_filename_component(filename ${folder} NAME) + + # See if there are any plugin libraries that match the name + # - If there are, we need to link to them! + set(matchedLibs) + foreach (f ${pluginLibs}) + if(${f} STREQUAL ${filename}) + set(matchedLibs ${f}) + endif() + endforeach() + + # Generate a name for the executable + set(executableName "${moduleName}_unit_test_${filename}") + + # Create the executable and link it to the module library + add_executable( ${executableName} ${testFile} ) + set(depLibs "${reqLibs};${matchedLibs}") + target_link_libraries(${executableName} ${moduleName} ${depLibs}) + + # Call function to add the test + add_unit_test_target(${executableName} ${truthFile}) + +endfunction(make_obj_unit_test) + + + + +# Incorporate a single obj folder +function(add_isis_obj folder reqLibs) + + get_filename_component(folderName ${folder} NAME) + + # Look inside this folder for include files + + # Find the source and header files + file(GLOB headers "${folder}/*.h" "${folder}/*.hpp") + file(GLOB sources "${folder}/*.c" "${folder}/*.cpp") + file(GLOB truths "${folder}/*.truth") + file(GLOB plugins "${folder}/*.plugin") + + # Generate protobuf, ui, and moc files if needed. + generate_protobuf_files(protoFiles ${folder}) + generate_ui_files(uiFiles ${folder}) + generate_moc_files(mocFiles ${folder}) + + # Don't include the unit test in the main source list + set(unitTest ${folder}/unitTest.cpp) + list(REMOVE_ITEM sources "${unitTest}") + + # Add the unit test file for this folder if it exists. + if(EXISTS "${unitTest}") + set(thisTestFiles ${unitTest}) + else() + set(thisTestFiles) + endif() + + set(thisSourceFiles ${headers} ${sources} ${protoFiles} ${uiFiles} ${mocFiles}) + set(thisTruthFiles ${truths} ) + + # If there are multiple truth files, select based on the OS. + list(LENGTH thisTestFiles numTest) + list(LENGTH thisTruthFiles numTruth) + if(NOT (${numTest} EQUAL ${numTruth}) ) + + # Look for a truth file that contains the OS string + set(matchedTruth "NONE") + foreach(truthFile ${thisTruthFiles}) + + # If the truth file contains the OS string, use it. + string(FIND ${truthFile} ${osVersionString} position) + if(NOT ${position} EQUAL -1) + set(matchedTruth ${truthFile}) + break() + endif() + + endforeach() + + # If no OS matched, use the default truth file. + if(${matchedTruth} STREQUAL "NONE") + set(matchedTruth "${folder}/${folderName}.truth") + endif() + set(thisTruthFiles ${matchedTruth}) + endif() + + # Always pass the test and truth files to the caller + set(newTestFiles ${thisTestFiles} PARENT_SCOPE) + set(newTruthFiles ${thisTruthFiles} PARENT_SCOPE) + + list(LENGTH plugins numPlugins) + if(${numPlugins} EQUAL 0) + # No plugins, pass the source files back to the caller to add to the larger library. + set(newSourceFiles ${thisSourceFiles} PARENT_SCOPE) + else() + # Folder with a plugin means that this is a separate library! + # Add it here and then we are done with the source files. + + if(NOT (${numPlugins} EQUAL 1)) + message( FATAL_ERROR "Error: Multiple plugins found in folder!" ) + endif() + + get_filename_component(libName ${folder} NAME) + get_filename_component(pluginName ${plugins} NAME) + message("Adding plugin library: ${libName}") + + add_library_wrapper(${libName} "${thisSourceFiles}" "${reqLibs}") + + # Append the plugin file to a single file in the build directory + # where the .so files will be created. During installation copy these + # plugin files to the installation library folder. + set(pluginPath ${CMAKE_BINARY_DIR}/lib/${pluginName}) + cat(${plugins} ${pluginPath}) + install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) + + # Record this library name for the caller + set(newPluginLib ${libName} PARENT_SCOPE) + endif() + + +endfunction(add_isis_obj) + + + + +# Adds an entire module folder. +# - This includes the "base" folder and all the mission specific folders. +# - Each call of this function generates one library. +function(add_isis_module name) + + # First argument is the module name. + # Arguments after the first are the folders to look in. + set(topFolders ${ARGN}) + + message("Adding ISIS module with folders: ${topFolders}") + + set(objFolders) + set(appFolders) + set(tstFolders) + foreach(f ${topFolders}) + + # Folders: apps, lib, tests + set(objsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/objs") + set(appsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/apps") + set(tstsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/tsts") + + # Start with the objs folder + get_subdirectory_list(${objsDir} thisObjFolders) + get_subdirectory_list(${appsDir} thisAppFolders) + get_subdirectory_list(${tstsDir} thisTstFolders) + + set(objFolders ${objFolders} ${thisObjFolders}) + set(appFolders ${appFolders} ${thisAppFolders}) + set(tstFolders ${tstFolders} ${thisTstFolders}) + + endforeach() + + # Now that we have the library info, call function to add it to the build! + # - Base module depends on 3rd party libs, other libs also depend on base. + # - Only the base module gets both a static and shared library. + if(${name} STREQUAL ${CORE_LIB_NAME}) + set(reqLibs ${ALLLIBS}) + set(alsoStatic ON) + else() + set(reqLibs "${CORE_LIB_NAME};${ALLLIBS}") + set(alsoStatic OFF) + endif() + + set(sourceFiles) + set(unitTestFiles) + set(truthFiles) + set(pluginLibs) + foreach(f ${objFolders}) + set(newSourceFiles) + set(newTestFiles) + set(newTruthFiles) + set(newPluginLib) + add_isis_obj(${f} "${reqLibs}") # Library add function + set(sourceFiles ${sourceFiles} ${newSourceFiles}) + set(unitTestFiles ${unitTestFiles} ${newTestFiles}) + set(truthFiles ${truthFiles} ${newTruthFiles}) + set(pluginLibs ${pluginLibs} ${newPluginLib}) + + endforeach(f) + + # Some modules don't generate a library + list(LENGTH sourceFiles temp) + if (NOT ${temp} EQUAL 0) + message("Adding library: ${name}") + add_library_wrapper(${name} "${sourceFiles}" "${reqLibs}" ${alsoStatic}) + + # Have the plugin libraries depend on the module library + foreach(plug ${pluginLibs}) + target_link_libraries(${plug} ${name}) + endforeach() + + # For everything beyond the module library, require the module library. + set(reqLibs "${reqLibs};${name}") + + if(${buildTests}) + set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/unitTest) + + # Now that the library is added, add all the unit tests for it. + list(LENGTH unitTestFiles temp) + math(EXPR numTests "${temp} - 1") + foreach(val RANGE ${numTests}) + list(GET unitTestFiles ${val} testFile ) + list(GET truthFiles ${val} truthFile) + make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") + endforeach() + endif() + + endif() + + # Process the apps (core library always required) + foreach(f ${appFolders}) + add_isis_app(${f} "${reqLibs}") + endforeach() + + if(${buildTests}) + # Process the tests + # - The test suite in qisis/SquishTests are not properly located or handled by this code! + foreach(f ${tstFolders}) + add_makefile_test_folder(${f} ${name}_module) + endforeach() + endif() + +endfunction(add_isis_module) diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake new file mode 100644 index 0000000000..98ddb27faa --- /dev/null +++ b/isis/cmake/BuildDocs.cmake @@ -0,0 +1,507 @@ +#============================================================================== +# File for building the ISIS documentation. +# - This is one of the most complicated parts of the build system! +# It makes heavy use of the Xalan XML tool and also requires Latex and Doxygen. +# - This file is called as a stand-alone script when "make docs" is executed. +#============================================================================== + + +cmake_minimum_required(VERSION 3.3) + +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") +list(APPEND CMAKE_PREFIX_PATH "${PROJECT_SOURCE_DIR}/cmake") +include(Utilities) + +# Set up Xalan's command-line option names. +set(XALAN_VALIDATE_OPTION "-v") +set(XALAN_OUTFILE_OPTION "-o") +set(XALAN_PARAM_OPTION "-p") +set(XALAN_INFILE_OPTION "" ) +set(XALAN_XSL_OPTION "" ) + +# TODO: How should this be set? +set(MODE "") + + +#------------------------------------------------------------------------ + + +# Populate application doc files into "isis/doc/Application/presentation" +function(copy_app_docs_info) + + # Go through all application folders, copy .xml and assets + get_subdirectory_list("${PROJECT_SOURCE_DIR}/src" moduleFolders) + foreach(f ${moduleFolders}) + get_filename_component(moduleName ${f} NAME_WE) + + # Only need to process app folders, not obj folders. + if ((${moduleName} STREQUAL "docsys") OR (NOT EXISTS "${f}/apps")) + continue() # Skip this folder + endif() + + file(MAKE_DIRECTORY ${appDataFolder}/${moduleName}) + + get_subdirectory_list(${f}/apps appFolders) + foreach(appF ${appFolders}) + # Each app gets its own folder in the build directory + get_filename_component(appName ${appF} NAME_WE) + set(thisDataFolder ${appDataFolder}/${moduleName}/${appName}) + file(MAKE_DIRECTORY ${thisDataFolder}) + + # Copy the .xml file and the asset folder if it exists. + copy_file(${appF}/${appName}.xml ${thisDataFolder}/${appName}.xml) + if(EXISTS ${appF}/assets) + copy_folder(${appF}/assets ${thisDataFolder}) + endif() + endforeach() # End loop through apps + + endforeach() # End loop through modules + +endfunction(copy_app_docs_info) + + + + + +# Build the top level of the documents directory +function(build_upper_level) + + # Copy existing folders to the install directory + copy_folder(${docBuildFolder}/assets ${docInstallFolder}) + copy_folder(${docBuildFolder}/w3c ${docInstallFolder}) + + # Make new (empty) output folders + set(newFolders UserDocs AboutIsis General Guides Installation TechnicalInfo) + foreach(f ${newFolders}) + file(MAKE_DIRECTORY "${docInstallFolder}/${f}") + endforeach() + + # These folders are populated inside "build_documents_folder" + + # Create index.html file + execute_process(COMMAND ${XALAN} ${XALAN_VALIDATE_OPTION} ${XALAN_PARAM_OPTION} menuPath \"\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/index.html ${XALAN_INFILE_OPTION} ${docBuildFolder}/build/homepage.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/main.xsl) + + # This folder just gets copied as-is + execute_process(COMMAND cp -r ${PROJECT_SOURCE_DIR}/src/docsys/Schemas ${docInstallFolder}/Schemas) + +endfunction(build_upper_level) + + + + + +# Build src/docsys/documents folder. +function(build_documents_folder) + + message("Building documents folder...") + message(" Building table of contents XML...") + + # Get list of folders of interest + get_subdirectory_list(${docBuildFolder}/documents docFolders) + set(blacklistFolders ${docBuildFolder}/documents/ReleaseNotes # Folders we don't want + ${docBuildFolder}/documents/ParameterChanges + ${docBuildFolder}/documents/ApiChanges) + list(REMOVE_ITEM docFolders ${blacklistFolders}) + + # Build doctoc.xml, the documents table of contents file. + set(doctocPath ${docBuildFolder}/build/doctoc.xml) + file(REMOVE ${doctocPath}) + cat(${docBuildFolder}/build/doctoc_header.xml ${doctocPath}) + foreach(f ${docFolders}) + # Each folder in documents gets a section added to doctoc + get_filename_component(docName ${f} NAME_WE) + + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} dirParam \"${docName}\" ${XALAN_INFILE_OPTION} ${f}/${docName}.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/build/IsisDocumentTOCbuild.xsl OUTPUT_VARIABLE result) + file(APPEND ${doctocPath} ${result}) + + endforeach() + cat(${docBuildFolder}/build/doctoc_footer.xml ${doctocPath}) + + # Write out a modified .xsl file with the correct location of the Xalan executable. + set(modDocBuildXslFile ${docBuildFolder}/build/IsisInlineDocumentBuild_mod.xsl) + file(READ ${PROJECT_SOURCE_DIR}/scripts/IsisInlineDocumentBuild_mod.xsl xslContents) + string(REPLACE XALAN_BIN_LOCATION ${XALAN} xslContents "${xslContents}") + file(WRITE ${modDocBuildXslFile} "${xslContents}") + + # Build individual documents folders + message(" Building individual documents...") + file(MAKE_DIRECTORY ${docInstallFolder}/documents) + foreach(f ${docFolders}) + + message("Building documents folder: ${f}") + + # Handle paths for this folder + get_filename_component(docName ${f} NAME_WE) + set(thisOutputFolder ${docInstallFolder}/documents/${docName}) + file(MAKE_DIRECTORY ${thisOutputFolder}) + + # Use Xalan to generate an intermediate makefile, then execute that makefile + # to generate the output documentation files. + + set(xalanCommand ${XALAN} ${XALAN_PARAM_OPTION} menuPath "../../" ${XALAN_PARAM_OPTION} dirParam "'${docName}'" ${XALAN_OUTFILE_OPTION} ${f}/Makefile_temp ${XALAN_INFILE_OPTION} ${docName}.xml ${XALAN_XSL_OPTION} ${modDocBuildXslFile}) + execute_process(COMMAND ${xalanCommand} WORKING_DIRECTORY ${f}) + + execute_process(COMMAND make -f Makefile_temp docs WORKING_DIRECTORY ${f}) + execute_process(COMMAND rm -f ${f}/Makefile_temp) # Clean up + + # Copy all generated html files and any assets to the install folder + file(GLOB htmlFiles ${f}/*.html) + file(COPY ${htmlFiles} DESTINATION ${thisOutputFolder}) + if(EXISTS "${f}/assets") + copy_folder(${f}/assets ${thisOutputFolder}/assets) + endif() + if(EXISTS "${f}/images") + copy_folder(${f}/images ${thisOutputFolder}/images) + endif() + + endforeach() + + message(" Building table of contents files...") + # These go in top level folders in /doc/ + + # ABOUT ISIS TOC + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/AboutIsis/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/AboutIsis.xsl) + + # GENERAL TOC + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/General/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/General.xsl) + + # GUIDES TOC + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/Guides/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/Guides.xsl) + + # INSTALLATION TOC + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/Installation/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/Installation.xsl) + + # TECHNICAL INFO TOC + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/TechnicalInfo/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/TechnicalInfo.xsl) + + # USER DOCS TOC + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${docInstallFolder}/UserDocs/index.html ${XALAN_INFILE_OPTION} ${doctocPath} ${XALAN_XSL_OPTION} ${docBuildFolder}/build/UserDocs.xsl) + +endfunction(build_documents_folder) + + + + + +# Supporting files should already be in /src/docsys/Application +function(build_application_docs) + + # Is there any reason not to just generate all these files from their original + # locations instead of copying them to a temporary build directory? + + set(appFolder "${docBuildFolder}/Application") + set(printerStyleFolder "${appFolder}/presentation/PrinterFriendly/styles") + set(tabbedStyleFolder "${appFolder}/presentation/Tabbed/styles") + + set(installAppFolder "${docInstallFolder}/Application") + set(installPrinterFolder "${installAppFolder}/presentation/PrinterFriendly") + set(installTabbedFolder "${installAppFolder}/presentation/Tabbed") + + # Make output directories and copy the styles + file(MAKE_DIRECTORY "${installPrinterFolder}") + file(MAKE_DIRECTORY "${installTabbedFolder}") + file(MAKE_DIRECTORY "${installPrinterFolder}/styles") + file(MAKE_DIRECTORY "${installTabbedFolder}/styles") + copy_wildcard("${printerStyleFolder}/*.css" ${installPrinterFolder}/styles/) + copy_wildcard("${tabbedStyleFolder}/*.css" ${installTabbedFolder}/styles/ ) + + # Loop through module folders + get_subdirectory_list(${appDataFolder} moduleFolders) + foreach(mod ${moduleFolders}) + get_filename_component(moduleName ${mod} NAME) + + # Loop through application folders + get_subdirectory_list(${mod} appDataFolders) + foreach(f ${appDataFolders}) + get_filename_component(appName ${f} NAME) + + # Get printer-friendly and tabbed output folders + set(pfAppFolder ${installPrinterFolder}/${appName}) + set(tbAppFolder ${installTabbedFolder}/${appName}) + file(MAKE_DIRECTORY "${pfAppFolder}") + file(MAKE_DIRECTORY "${tbAppFolder}") + + if(EXISTS ${f}/assets) + copy_folder(${f}/assets ${pfAppFolder}) + copy_folder(${f}/assets ${tbAppFolder}) + endif() + + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../../../../\" ${XALAN_OUTFILE_OPTION} ${pfAppFolder}/${appName}.html ${XALAN_INFILE_OPTION} ${f}/${appName}.xml ${XALAN_XSL_OPTION} ${printerStyleFolder}/IsisApplicationDocStyle.xsl) + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../../../../\" ${XALAN_OUTFILE_OPTION} ${tbAppFolder}/${appName}.html ${XALAN_INFILE_OPTION} ${f}/${appName}.xml ${XALAN_XSL_OPTION} ${tabbedStyleFolder}/IsisApplicationDocStyle.xsl) + + endforeach() # End loop through app folders + + endforeach() # End loop through module folders + + # Make the table of contents that goes in the /bin/xml folder + + # Set up the file + set(appTocPath "${CMAKE_INSTALL_PREFIX}/bin/xml/applicationTOC.xml") + file(REMOVE ${appTocPath}) + cat(${docBuildFolder}/Application/build/toc_header.xml ${appTocPath}) + get_subdirectory_list(${appDataFolder} moduleFolders) + + # Loop through module folders + foreach(mod ${moduleFolders}) + get_filename_component(moduleName ${mod} NAME_WE) + + # Loop through application folders + get_subdirectory_list(${mod} appDataFolders) + foreach(f ${appDataFolders}) + + get_filename_component(docName ${f} NAME_WE) + + # Use Xalan to generate a piece of the TOC and append it to the file + execute_process(COMMAND ${XALAN} ${XALAN_INFILE_OPTION} ${f}/${docName}.xml ${XALAN_XSL_OPTION} ${docBuildFolder}/Application/build/IsisApplicationTOCbuild.xsl OUTPUT_VARIABLE result) + file(APPEND ${appTocPath} ${result}) + endforeach() + endforeach() + + # Append the footer to complete the TOC file! + cat(${docBuildFolder}/Application/build/toc_footer.xml ${appTocPath}) + +endfunction(build_application_docs) + + + + + +# Use the application TOC file to build some other TOCs +function(add_extra_tocs) + + set(TOCDIR "${docInstallFolder}/Application") + set(buildFolder "${docBuildFolder}/Application/build") + set(tocXml "${CMAKE_INSTALL_PREFIX}/bin/xml/applicationTOC.xml") + + # Build alpha.html + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${TOCDIR}/alpha.html ${XALAN_INFILE_OPTION} ${tocXml} ${XALAN_XSL_OPTION} ${buildFolder}/TOCindex_alpha.xsl) + + # Build index.html + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${TOCDIR}/index.html ${XALAN_INFILE_OPTION} ${tocXml} ${XALAN_XSL_OPTION} ${buildFolder}/TOCindex_category.xsl) + + # Build oldvnew.html + execute_process(COMMAND ${XALAN} ${XALAN_PARAM_OPTION} menuPath \"../\" ${XALAN_OUTFILE_OPTION} ${TOCDIR}/oldvnew.html ${XALAN_INFILE_OPTION} ${tocXml} ${XALAN_XSL_OPTION} ${buildFolder}/TOCindex_oldvnew.xsl) + + # Build applicationCategories.xml + execute_process(COMMAND ${XALAN} ${XALAN_OUTFILE_OPTION} ${CMAKE_INSTALL_PREFIX}/bin/xml/applicationCategories.xml ${XALAN_INFILE_OPTION} ${docBuildFolder}/Schemas/Application/application.xsd ${XALAN_XSL_OPTION} ${buildFolder}/IsisApplicationCategoriesbuild.xsl) + +endfunction(add_extra_tocs) + + + + + +# Set up three Doxygen configuration files +function(build_object_conf) + + message("Building apps configuration...") + + # Make a list of each object folder with an assets folder + get_subdirectory_list(moduleFolders ${PROJECT_SOURCE_DIR}) + set(OBJECTASSETS) + foreach(mod ${moduleFolders}) + get_subdirectory_list(objFolders ${mod}/objs) + foreach(obj ${objFolders}) + if(EXISTS ${obj}/assets) + set(OBJECTASSETS ${OBJECTASSETS} ${obj}/assets) + endif() + endforeach() # End obj loop + endforeach() # End module loop + + set(objConfDir ${docBuildFolder}/src/docsys/Object/build) + file(MAKE_DIRECTORY ${objConfDir}/apps) + + # The three conf files start from an input base file and append more options + set(appsConf ${objConfDir}/apps_tag_temp.conf ) + set(programmerConf ${objConfDir}/Programmer_temp.conf) + set(developerConf ${objConfDir}/Developer_temp.conf ) + set(docInstallDir ${docInstallFolder}/Object ) + + # Copy settings files from the source folder to the build folder + copy_wildcard("${PROJECT_SOURCE_DIR}/src/docsys/Object/build/*" ${objConfDir}) + + # Append to the app conf file + # apps_tag.conf doesnt exist? + cat(${objConfDir}/apps_tag.conf ${appsConf}) + file(APPEND ${appsConf} "LATEX_CMD_NAME = ${LATEX}\n") + file(APPEND ${appsConf} "OUTPUT_DIRECTORY = ${docInstallDir}\n") + file(APPEND ${appsConf} "STRIP_FROM_PATH = ${PROJECT_SOURCE_DIR}/\n") + file(APPEND ${appsConf} "INPUT = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n") + file(APPEND ${appsConf} "HTML_HEADER = ${objConfDir}/IsisObjectHeader.html\n") + file(APPEND ${appsConf} "HTML_FOOTER = ${objConfDir}/IsisObjectFooter.html\n") + file(APPEND ${appsConf} "PROJECT_LOGO = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n") + file(APPEND ${appsConf} "HTML_OUTPUT = apps\n") + + if(NOT ${DOT_PATH} STREQUAL "") + file(APPEND ${appsConf} "DOT_PATH = /opt/local/bin\n") + endif() + + # Append to the programmer conf file + cat(${objConfDir}/Programmer.conf ${programmerConf}) + file(APPEND ${programmerConf} "OUTPUT_DIRECTORY = ${docInstallDir}\n") + file(APPEND ${programmerConf} "FILE_PATTERNS = *objs*.h") + file(APPEND ${programmerConf} " *objs*.cpp") + file(APPEND ${programmerConf} " *build/isisDoxyDefs.doxydef\n") + file(APPEND ${programmerConf} "STRIP_FROM_PATH = ${PROJECT_SOURCE_DIR}/\n") + file(APPEND ${programmerConf} "INPUT = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n") + file(APPEND ${programmerConf} "HTML_HEADER = ${objConfDir}/IsisObjectHeader.html\n") + file(APPEND ${programmerConf} "HTML_FOOTER = ${objConfDir}/IsisObjectFooter.html\n") + file(APPEND ${programmerConf} "PROJECT_LOGO = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n") + file(APPEND ${programmerConf} "HTML_OUTPUT = Programmer\n") + file(APPEND ${programmerConf} "IMAGE_PATH = \n") + + string(FIND "${MODE}" "LOUD" pos) + if (NOT ${pos} STREQUAL "-1") + file(APPEND ${programmerConf} "QUIET = NO\n") + file(APPEND ${programmerConf} "WARNINGS = YES\n") + file(APPEND ${programmerConf} "WARN_IF_UNDOCUMENTED = NO\n") + file(APPEND ${programmerConf} "WARN_IF_DOC_ERROR = YES\n") + file(APPEND ${programmerConf} "WARN_NO_PARAMDOC = YES\n") + else() + file(APPEND ${programmerConf} "QUIET = YES\n") + file(APPEND ${programmerConf} "WARN_IF_UNDOCUMENTED = NO\n") + file(APPEND ${programmerConf} "WARN_IF_DOC_ERROR = YES\n") + file(APPEND ${programmerConf} "WARN_NO_PARAMDOC = YES\n") + endif() + + if (NOT ${DOT_PATH} STREQUAL "") + file(APPEND ${programmerConf} "DOT_PATH = /opt/local/bin\n") + endif() + + foreach(dirname ${OBJECTASSETS}) + file(APPEND ${programmerConf} "${dirname} \\\n") + endforeach() + + # Append to the developer conf file + cat(${objConfDir}/Developer.conf ${developerConf}) + file(APPEND ${developerConf} "LATEX_CMD_NAME = ${LATEX}\n") + file(APPEND ${developerConf} "OUTPUT_DIRECTORY = ${docInstallDir}\n") + file(APPEND ${developerConf} "STRIP_FROM_PATH = ${CMAKE_INSTALL_PREFIX}/\n") + file(APPEND ${developerConf} "INPUT = ${PROJECT_SOURCE_DIR}/src/ ${objConfDir}/isisDoxyDefs.doxydef\n") + file(APPEND ${developerConf} "HTML_HEADER = ${objConfDir}/IsisObjectHeader.html\n") + file(APPEND ${developerConf} "HTML_FOOTER = ${objConfDir}/IsisObjectFooter.html\n") + file(APPEND ${developerConf} "PROJECT_LOGO = ${docBuildFolder}/assets/icons/USGS_logo55h.png\n") + file(APPEND ${developerConf} "HTML_OUTPUT = Developer\n") + file(APPEND ${developerConf} "IMAGE_PATH = \n") + string(FIND "${MODE}" "LOUD" pos) + if (NOT ${pos} STREQUAL "-1") + file(APPEND ${developerConf} "QUIET = NO\n") + file(APPEND ${developerConf} "WARNINGS = YES\n") + file(APPEND ${developerConf} "WARN_IF_UNDOCUMENTED = NO\n") + file(APPEND ${developerConf} "WARN_IF_DOC_ERROR = YES\n") + file(APPEND ${developerConf} "WARN_NO_PARAMDOC = YES\n") + else() + file(APPEND ${developerConf} "QUIET = YES\n") + file(APPEND ${developerConf} "WARNINGS = NO\n") + file(APPEND ${developerConf} "WARN_IF_UNDOCUMENTED = NO\n") + file(APPEND ${developerConf} "WARN_IF_DOC_ERROR = NO\n") + file(APPEND ${developerConf} "WARN_NO_PARAMDOC = NO\n") + endif() + + foreach(dirname ${OBJECTASSETS}) + file(APPEND ${developerConf} "${dirname} \\\n") + endforeach() + +endfunction(build_object_conf) + + + + +# Build doxygen output for ISIS code +function(build_object_docs) + + # Create app, developer, and programmer Doxygen configuration files. + build_object_conf() + + # TODO: Do prog_tester conf here as well? + + set(objConfDir ${docBuildFolder}/src/docsys/Object/build) + + message("Copying object assets...") + file(MAKE_DIRECTORY "${docInstallFolder}/Object") + execute_process(COMMAND cp -r ${docBuildFolder}/Object/assets ${docInstallFolder}/Object/) + + + message("Creating Object Documentation") + file(MAKE_DIRECTORY ${docInstallFolder}/Object/apps) + file(MAKE_DIRECTORY ${docInstallFolder}/Object/Developer) + file(MAKE_DIRECTORY ${docInstallFolder}/Object/Programmer) + file(MAKE_DIRECTORY ${docInstallFolder}/documents/DocStyle/assets) + copy_wildcard("${docBuildFolder}/Object/*.html" ${docInstallFolder}/Object/) + #copy_file(${objBuildDir}/isisDoxyDefs.doxydef ${docInstallFolder}/documents/DocStyle/assets/isisDoxyDefs.doxydef) + + + message("Building Apps documentation..") + execute_process(COMMAND ${DOXYGEN} "${objConfDir}/apps_tag_temp.conf" + WORKING_DIRECTORY ${docBuildFolder}/src/docsys/Object/) + message("Finished building Apps documentation.") + + message("Building Programmer documentation...") + execute_process(COMMAND ${DOXYGEN} "${objConfDir}/Programmer_temp.conf" + WORKING_DIRECTORY ${docBuildFolder}/src/docsys/Object/) + message("Finished building Programmer documentation.") + + message("Building Developer documentation...") + execute_process(COMMAND ${DOXYGEN} "${objConfDir}/Developer_temp.conf" + WORKING_DIRECTORY ${docBuildFolder}/src/docsys/Object/) + message("Finished building Developer documentation.") + +endfunction(build_object_docs) + + + + + +# Build all the documentation +function(build_docs) + + message("Building Isis Documentation...") + + # Set up output directory and a temporary directory for building + set(docBuildFolder ${CMAKE_BINARY_DIR}/docBuild) + set(appDataFolder ${docBuildFolder}/Application/data) + set(docInstallFolder ${CMAKE_INSTALL_PREFIX}/doc) # Final output documentation + + # Clean up existing files + execute_process(COMMAND rm -rf ${docBuildFolder}) + execute_process(COMMAND rm -rf ${docInstallFolder}) + + message("XALAN = ${XALAN}") + message("DOXYGEN = ${DOXYGEN}") + message("LATEX = ${LATEX}") + + # Copy everything from src/docsys to docBuildFolder + execute_process(COMMAND cp -r ${PROJECT_SOURCE_DIR}/src/docsys ${docBuildFolder}) + + file(MAKE_DIRECTORY "${docBuildFolder}/Application") + file(MAKE_DIRECTORY "${docBuildFolder}/Application/data") + file(MAKE_DIRECTORY "${docInstallFolder}") + + message("Copying application information...") + copy_app_docs_info() + + message("Building upper level directories...") + build_upper_level() + + build_documents_folder() + + message("Building application docs...") + build_application_docs() + + message("Building additional TOCs...") + add_extra_tocs() + + # This step requires Latex and Doxygen + message("Building object documentation") + build_object_docs() + + message("Finished building object documentation!") + +endfunction(build_docs) + + + + +# This file gets called as a script, so call this function to run +# all the code in the file. +build_docs() diff --git a/isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake b/isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000000..6756580626 --- /dev/null +++ b/isis/cmake/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.9 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/scratch/isiscmake/isis") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/scratch/isiscmake/isis") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/isis/cmake/CMakeFiles/progress.marks b/isis/cmake/CMakeFiles/progress.marks new file mode 100644 index 0000000000..573541ac97 --- /dev/null +++ b/isis/cmake/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/isis/cmake/CMakeLists.txt b/isis/cmake/CMakeLists.txt new file mode 100644 index 0000000000..4bb9e778d4 --- /dev/null +++ b/isis/cmake/CMakeLists.txt @@ -0,0 +1,30 @@ + +# This file contains everything that should be exectuted AFTER the installation +# step has completed. + +message("Setting up post-install behavior...") + +# Set up format version numbers for the main shared library on install +install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_BINARY_DIR}/lib/libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis${SO})") + + + +# On OSX, need to correct all the paths encoded in each of the distributed library files so +# that they properly find the distruted files using relative paths. +if (APPLE) + # Call the correction script on each folder containing libraries + install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/lib)") + install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/lib resetRpath)") + install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/bin)") + + # Also need to get the plugin folders + get_subdirectory_list(${CMAKE_SOURCE_DIR}/3rdParty/plugins pluginFolders) + foreach(f ${pluginFolders}) + get_filename_component(name ${f} NAME) + install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/plugins/${name} resetRpath)") + endforeach() + +endif() diff --git a/isis/cmake/CTestTestfile.cmake b/isis/cmake/CTestTestfile.cmake new file mode 100644 index 0000000000..d19043d1b2 --- /dev/null +++ b/isis/cmake/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /scratch/isiscmake/isis/cmake +# Build directory: /scratch/isiscmake/isis/cmake +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/isis/cmake/CodeGeneration.cmake b/isis/cmake/CodeGeneration.cmake new file mode 100644 index 0000000000..9f48041afc --- /dev/null +++ b/isis/cmake/CodeGeneration.cmake @@ -0,0 +1,138 @@ +#================================================================== +# Contains functions for generating code files +#================================================================== + +# TODO: Can we consolidate the following three functions? + + +# Generate ui_*.h files from *.ui files using QT tool uic. +# - ${UIC} must point to the uic tool +function( generate_ui_files uiGenOut folder) + + # Finds all .ui files in the current dir + file(GLOB uiInput "${folder}/*.ui") + + # If no .ui files in this folder we are finished. + list(LENGTH uiInput numFiles) + if (${numFiles} EQUAL 0) + set(${uiGenOut} "" PARENT_SCOPE) + return() + endif() + + # Set where generated files go to and add that directory to the include path + get_code_gen_dir(${folder} uiGenDir) + + # For each input ui file + foreach(uiFile ${uiInput}) + # Get the name of the file without extension + get_filename_component(uiName ${uiFile} NAME_WE) + + # Add the generated file to UI_GEN variable + set(outUiFile "${uiGenDir}/ui_${uiName}.h") + set(uiGen ${uiGen} ${outUiFile}) + + # Add the custom command that will generate this file + # - The generated files will be put in the CMake build directory, + # not the source tree + add_custom_command(OUTPUT ${outUiFile} + COMMAND ${UIC} ${uiFile} -o ${outUiFile} && cp ${outUiFile} ${CMAKE_BINARY_DIR}/inc + DEPENDS ${uiFile} + WORKING_DIRECTORY ${folder} + COMMENT "Generating UI headers...") + endforeach() + + + set(${uiGenOut} ${uiGen} PARENT_SCOPE) # Set up output variable + +endfunction() + + + + +# Generate moc_*.cpp files from *.h files using Q_OBJECT using the moc tool. +# - ${MOC} must point to the moc tool +function( generate_moc_files mocGenOut folder) + + # Finds all .h files in the current dir including the text Q_OBJECT + file(GLOB candidateFiles "${folder}/*.h") + set(mocInput) + foreach(f ${candidateFiles}) + execute_process(COMMAND grep Q_OBJECT ${f} + OUTPUT_VARIABLE result + RESULT_VARIABLE code) + if("${code}" STREQUAL "0") + set(mocInput ${mocInput} ${f}) + endif() + endforeach() + + # If no Q_OBJECT files in this folder we are finished. + list(LENGTH mocInput numFiles) + if (${numFiles} EQUAL 0) + set(${mocGenOut} "" PARENT_SCOPE) + return() + endif() + + # Set where generated files go to and add that directory to the include path + get_code_gen_dir(${folder} mocGenDir) + + # For each input moc file + foreach(mocFile ${mocInput}) + # Get the name of the file without extension + get_filename_component(mocName ${mocFile} NAME_WE) + + # Add the generated file to mocGen variable + set(outMocFile "${mocGenDir}/moc_${mocName}.cpp") + set(mocGen ${mocGen} ${outMocFile}) + + # Add the custom command that will generate this file + # - The generated files will be put in the CMake build directory, + # not the source tree + add_custom_command(OUTPUT ${outMocFile} + COMMAND ${MOC} ${mocFile} -o ${outMocFile} + DEPENDS ${mocFile} + WORKING_DIRECTORY ${folder} + COMMENT "Generating MOC files...") + endforeach() + set(${mocGenOut} ${mocGen} PARENT_SCOPE) # Set up output variable +endfunction() + +# Generate ProtoBuf output files for an obj folder. +# - ${PROTOC} must point to the protobuf tool +function(generate_protobuf_files protoGenOut folder) + + # Finds all .proto files in the current dir + file(GLOB protoInput "${folder}/*.proto") + + # If no .proto files in this folder we are finished. + list(LENGTH protoInput numFiles) + if (${numFiles} EQUAL 0) + set(${protoGenOut} "" PARENT_SCOPE) + return() + endif() + + # Set where generated files go to and add that directory to the include path + get_code_gen_dir(${folder} protoGenDir) + + # For each input protobuf file + foreach(protoFile ${protoInput}) + # Get the name of the file without extension + get_filename_component(protoName ${protoFile} NAME_WE) + + # Add the two generated files to PROTO_GEN variable + set(protoGen ${protoGen} + ${protoGenDir}/${protoName}.pb.h + ${protoGenDir}/${protoName}.pb.cc) + + set(PROTO_HEADERS ${PROTO_HEADERS} ${protoGenDir}/${protoName}.pb.h) + endforeach() + + # Add the custom command that will generate all the files + # - The generated files will be put in the CMake build directory, not the source tree. + add_custom_command(OUTPUT ${protoGen} + COMMAND ${PROTOC} --proto_path ${folder} --cpp_out ${protoGenDir} ${protoInput} && cp ${PROTO_HEADERS} ${CMAKE_BINARY_DIR}/inc + DEPENDS ${protoInput} + WORKING_DIRECTORY ${folder} + COMMENT "Generating Protocol Buffers...") + + set(${protoGenOut} ${protoGen} PARENT_SCOPE) # Set up output variable +endfunction() diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake new file mode 100644 index 0000000000..74b22e224d --- /dev/null +++ b/isis/cmake/FindAllDependencies.cmake @@ -0,0 +1,342 @@ +#=============================================================================== +# 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/v007") +set(INCLUDE_DIR "${thirdPartyDir}/include") +set(LIB_DIR "${thirdPartyDir}/lib") +set(PLUGIN_DIR "${thirdPartyDir}/plugins") +set(BIN_DIR "${thirdPartyDir}/bin") +set(LIC_DIR "${thirdPartyDir}/license") + +# Set up plugin dir for OSX to correctly find qt5 plugins for installing +if(APPLE) + set(thirdPartyDir "/opt/usgs/v007") + set(PLUGIN_DIR "${thirdPartyDir}/ports/libexec/qt5/plugins") +endif(APPLE) + +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 NAME doxygen PATH_SUFFIXES 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.7.1/QtCore/) + find_path(QT5_CONCURRENT_INCLUDE_DIR NAMES qtconcurrentmap.h PATH_SUFFIXES qt/qt5.7.1/QtConcurrent) + find_path(QT5_DBUS_INCLUDE_DIR NAMES qdbusmacros.h PATH_SUFFIXES qt/qt5.7.1/QtDBus) + find_path(QT5_GUI_INCLUDE_DIR NAMES qpainter.h PATH_SUFFIXES qt/qt5.7.1/QtGui) + find_path(QT5_MULTIMEDIA_INCLUDE_DIR NAMES qmediacontent.h PATH_SUFFIXES qt/qt5.7.1/QtMultimedia) + find_path(QT5_MULTIMEDIAWIDGETS_INCLUDE_DIR NAMES qvideowidget.h PATH_SUFFIXES qt/qt5.7.1/QtMultimediaWidgets) + find_path(QT5_NETWORK_INCLUDE_DIR NAMES qsslsocket.h PATH_SUFFIXES qt/qt5.7.1/QtNetwork) + find_path(QT5_OPENGL_INCLUDE_DIR NAMES qtopenglglobal.h PATH_SUFFIXES qt/qt5.7.1/QtOpenGL) + find_path(QT5_POSITIONING_INCLUDE_DIR NAMES qgeocoordinate.h PATH_SUFFIXES qt/qt5.7.1/QtPositioning) + find_path(QT5_PRINTSUPPORT_INCLUDE_DIR NAMES qprinter.h PATH_SUFFIXES qt/qt5.7.1/QtPrintSupport) + find_path(QT5_QML_INCLUDE_DIR NAMES qqmlinfo.h PATH_SUFFIXES qt/qt5.7.1/QtQml) + find_path(QT5_QUICK_INCLUDE_DIR NAMES qquickview.h PATH_SUFFIXES qt/qt5.7.1/QtQuick) +# find_path(QT5_SCRIPT_INCLUDE_DIR NAMES qscriptengine.h PATH_SUFFIXES qt/qt5.7.1/QtScript) +#find_path(QT5_SCRIPTTOOLS_INCLUDE_DIR NAMES qtscripttoolsversion.h PATH_SUFFIXES qt/qt5.7.1/QtScriptTools) + find_path(QT5_SENSORS_INCLUDE_DIR NAMES qgyroscope.h PATH_SUFFIXES qt/qt5.7.1/QtSensors) + find_path(QT5_SQL_INCLUDE_DIR NAMES qsql.h PATH_SUFFIXES qt/qt5.7.1/QtSql) + find_path(QT5_SVG_INCLUDE_DIR NAMES qsvgwidget.h PATH_SUFFIXES qt/qt5.7.1/QtSvg) + find_path(QT5_TEST_INCLUDE_DIR NAMES qtest.h PATH_SUFFIXES qt/qt5.7.1/QtTest) + find_path(QT5_WEBCHANNEL_INCLUDE_DIR NAMES qwebchannel.h PATH_SUFFIXES qt/qt5.7.1/QtWebChannel) + find_path(QT5_WEBENGINE_INCLUDE_DIR NAMES qtwebengineglobal.h PATH_SUFFIXES qt/qt5.7.1/QtWebEngine) + find_path(QT5_WEBENGINEWIDGETS_INCLUDE_DIR NAMES qwebenginescript.h PATH_SUFFIXES qt/qt5.7.1/QtWebEngineWidgets) + find_path(QT5_WIDGETS_INCLUDE_DIR NAMES qwidget.h PATH_SUFFIXES qt/qt5.7.1/QtWidgets) + find_path(QT5_XML_INCLUDE_DIR NAMES qxml.h PATH_SUFFIXES qt/qt5.7.1/QtXml) + find_path(QT5_XMLPATTERNS_INCLUDE_DIR NAMES qtxmlpatternsglobal.h PATH_SUFFIXES qt/qt5.7.1/QtXmlPatterns) + + get_filename_component(QT5_ROOT_INCLUDE_DIR "${QT5_CORE_INCLUDE_DIR}" DIRECTORY) + + 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_WEBENGINECORE_LIBRARY NAMES Qt5WebEngineCore) + 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 6 REQUIRED) +find_package(XercesC 3.1 REQUIRED) +find_package(GeoTIFF 2 REQUIRED) +find_package(TIFF 5 REQUIRED) +find_package(CSPICE 65 REQUIRED) +find_package(TNT 1.2.6 REQUIRED) +find_package(Geos 3.5.0 REQUIRED) +find_package(GSL 19 REQUIRED) +find_package(Protobuf 9 REQUIRED) +find_package(Boost 1.59 REQUIRED) +find_package(X11 6 REQUIRED) +find_package(GSL 19 REQUIRED) +find_package(GMM REQUIRED) +find_package(HDF5 1.8.15 REQUIRED) +find_package(SuperLU 4.3 REQUIRED) +find_package(Cholmod 4.4.5 REQUIRED) +find_package(Embree 2.15.0 REQUIRED) +find_package(PCL 1.8.0 REQUIRED) +find_package(Eigen REQUIRED) +find_package(Bullet 2.86 REQUIRED) +find_package(OpenCV 3.1.0 REQUIRED) +find_package(NN REQUIRED) +find_package(Jama 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}) +#message("VAR=${_variableName}") + 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/v007/ports/include/" "/opt/usgs/v007/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() + +#list(APPEND ALLLIBDIRS "/usr/lib64") +list(REMOVE_DUPLICATES ALLLIBDIRS) +list(REMOVE_DUPLICATES ALLLIBS) +list(REMOVE_DUPLICATES ALLINCDIRS) + +# 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}") diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake new file mode 100644 index 0000000000..a12e1661a0 --- /dev/null +++ b/isis/cmake/FindBoost.cmake @@ -0,0 +1,138 @@ +# CMake module for find_package(Boost) +# Finds include directory and all applicable libraries +# +# Sets the following: +# BOOST_INCLUDE_DIR + +find_path(BOOST_INCLUDE_DIR + NAME flyweight.hpp + PATH_SUFFIXES boost/boost1.59.0/boost/ boost +) + +message("BOOST_INCLUDE_DIR = ${BOOST_INCLUDE_DIR}") + + +get_filename_component(BOOST_ROOT_INCLUDE_DIR "${BOOST_INCLUDE_DIR}" DIRECTORY) + +find_library(BOOST_ATOMIC_MT_LIBRARY + NAMES boost_atomic-mt boost_atomic +) +find_library(BOOST_LOG_MT_LIBRARY + NAMES boost_log-mt boost_log +) +find_library(BOOST_REGEX_MT_LIBRARY + NAMES boost_regex-mt boost_regex +) +find_library(BOOST_LOG_SETUP_MT_LIBRARY + NAMES boost_log_setup-mt boost_log_setup +) +find_library(BOOST_SERIALIZATION_MT_LIBRARY + NAMES boost_serialization-mt boost_serialization +) +find_library(BOOST_CHRONO_MT_LIBRARY + NAMES boost_chrono-mt boost_chrono +) +find_library(BOOST_MATH_C99_MT_LIBRARY + NAMES boost_math_c99-mt boost_math_c99 +) +find_library(BOOST_SIGNALS_MT_LIBRARY + NAMES boost_signals-mt boost_signals +) +find_library(BOOST_CONTAINER_MT_LIBRARY + NAMES boost_container-mt boost_container +) +find_library(BOOST_MATH_C99F_MT_LIBRARY + NAMES boost_math_c99f-mt boost_math_c99f +) +find_library(BOOST_CONTEXT_MT_LIBRARY + NAMES boost_context-mt boost_context +) +find_library(BOOST_MATH_C99L_MT_LIBRARY + NAMES boost_math_c99l-mt boost_math_c99l +) +find_library(BOOST_SYSTEM_MT_LIBRARY + NAMES boost_system-mt boost_system +) +find_library(BOOST_COROUTINE_MT_LIBRARY + NAMES boost_coroutine-mt boost_coroutine +) +find_library(BOOST_MATH_TR1_MT_LIBRARY + NAMES boost_math_tr1-mt boost_math_tr1 +) +find_library(BOOST_MATH_TR1F_MT_LIBRARY + NAMES boost_math_tr1f-mt boost_math_tr1f +) +find_library(BOOST_MATH_TR1L_MT_LIBRARY + NAMES boost_math_tr1l-mt boost_math_tr1l +) +find_library(BOOST_TEST_EXEC_MONITOR_MT_LIBRARY + NAMES boost_test_exec_monitor-mt boost_test_exec_monitor +) +find_library(BOOST_DATE_TIME_MT_LIBRARY + NAMES boost_date_time-mt boost_date_time +) +find_library(BOOST_THREAD_MT_LIBRARY + NAMES boost_thread-mt boost_thread +) +find_library(BOOST_EXCEPTION_MT_LIBRARY + NAMES boost_exception-mt boost_exception +) +find_library(BOOST_TIMER_MT_LIBRARY + NAMES boost_timer-mt boost_timer +) +find_library(BOOST_FILESYSTEM_MT_LIBRARY + NAMES boost_filesystem-mt boost_filesystem +) +find_library(BOOST_PRG_EXEC_MONITOR_MT_LIBRARY + NAMES boost_prg_exec_monitor-mt boost_prg_exec_monitor +) +find_library(BOOST_PROGRAM_OPTIONS_MT_LIBRARY + NAMES boost_program_options-mt boost_program_options +) +find_library(BOOST_UNIT_TEST_FRAMEWORK_MT_LIBRARY + NAMES boost_unit_test_framework-mt boost_unit_test_framework +) +find_library(BOOST_IOSTREAMS_MT_LIBRARY + NAMES boost_iostreams-mt boost_iostreams +) + +#message("BOOST_IOSTREAMS_MT_LIBRARY = ${BOOST_IOSTREAMS_MT_LIBRARY}") +#tjw: Not sure if needed...commenting out because library is missing +#find_library(BOOST_PYTHON_MT_LIBRARY +# NAMES boost_python-mt boost_python +#) +find_library(BOOST_WAVE_MT_LIBRARY + NAMES boost_wave-mt boost_wave +) +#tjw: not being linked against by ISIS presently +#find_library(BOOST_LOCAL_MT_LIBRARY +# NAMES boost_locale-mt boost_locale +#) +find_library(BOOST_RANDOM_MT_LIBRARY + NAMES boost_random-mt boost_random +) +find_library(BOOST_WSERIALIZATION_MT_LIBRARY + NAMES boost_wserialization-mt boost_wserialization +) +find_library(PYTHON_LIBRARY + NAMES python2 python2.7 python3 +) +find_library(C_LIBRARY + NAMES c +) + +#tjw +#if(APPLE) +# file(READ "${BOOST_INCLUDE_DIR}/version.hpp" EXTRACT LIMIT 4 OFFSET 1103) +# string(SUBSTRING ${EXTRACT} 0 1 VERSION_MAJOR) +# string(SUBSTRING ${EXTRACT} 2 2 VERSION_MINOR) +# string(CONCAT VERSION_NUM ${VERSION_MAJOR} "." ${VERSION_MINOR}) +#else(APPLE) +# get_version(${BOOST_ATOMIC_MT_LIBRARY} VERSION_NUM) +#endif(APPLE) + +#message("BOOST FOUND VERSION = ${VERSION_NUM}") + +#if(VERSION_NUM VERSION_LESS Boost_FIND_VERSION) +# message(FATAL_ERROR "Boost version is too old (${VERSION_NUM}). Use ${Boost_FIND_VERSION} or higher.") +#endif(VERSION_NUM VERSION_LESS Boost_FIND_VERSION) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake new file mode 100644 index 0000000000..d6390d8615 --- /dev/null +++ b/isis/cmake/FindBullet.cmake @@ -0,0 +1,24 @@ +# CMake module for find_package(Bullet) +# Finds include directory and all applicable libraries +# +# Sets the following: +# BULLET_INCLUDE_DIR +# BULLET_LIBRARY + +find_path(BULLET_INCLUDE_DIR + NAME btBulletCollisionCommon.h + PATH_SUFFIXES bullet +) + +find_library(BULLET_OPENCL_LIBRARY NAMES Bullet3OpenCL_clew) +find_library(BULLET_SOFTBODY_LIBRARY NAMES BulletSoftBody) +find_library(BULLET_INVERSEDYNAMICS_LIBRARY NAMES BulletInverseDynamics) +find_library(BULLET_DYNAMICS_LIBRARY NAMES Bullet3Common) +find_library(BULLET_COLLISION_LIBRARY NAMES BulletDynamics) +find_library(BULLET3_GEOMETRY_LIBRARY NAMES BulletCollision) +find_library(BULLET3_DYNAMICS_LIBRARY NAMES Bullet3Geometry) +find_library(BULLET3_COLLISION_LIBRARY NAMES Bullet3Dynamics) +find_library(BULLET3_COMMON_LIBRARY NAMES Bullet3Collision) +find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) + +get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake new file mode 100644 index 0000000000..e7b390f05f --- /dev/null +++ b/isis/cmake/FindCSPICE.cmake @@ -0,0 +1,23 @@ +# CMake module for find_package(CSPICE) +# Finds include directory and all applicable libraries +# +# Sets the following: +# CSPICE_INCLUDE_DIR +# CSPICE_LIBRARY + +find_path(CSPICE_INCLUDE_DIR + NAME SpiceUsr.h + PATH_SUFFIXES naif +) + +find_library(CSPICE_LIBRARY + NAMES cspice +) + +string(REGEX MATCH "^(/([a-z or A-Z or 0-9])*)*" MY_PATH ${CSPICE_LIBRARY}}) +file(GLOB FOUND_FILES + "${MY_PATH}.*[0-9]**.a" +) +get_filename_component(VERSION_FILE "${FOUND_FILES}" NAME) + +get_filename_component(CSPICE_ROOT_INCLUDE_DIR "${CSPICE_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake new file mode 100644 index 0000000000..8ace8619f6 --- /dev/null +++ b/isis/cmake/FindCholmod.cmake @@ -0,0 +1,34 @@ +# CMake module for find_package(Cholmod) +# Finds include directory and all applicable libraries +# +# Sets the following: +# CHOLMOD_INCLUDE_DIR +# CHOLMOD_LIBLIST + +find_path(CHOLMOD_INCLUDE_DIR + NAME cholmod.h + PATH_SUFFIXES SuiteSparse/SuiteSparse4.4.5/SuiteSparse/ SuiteSparse +) + +find_library(CHOLMOD_LIBRARY NAMES cholmod) +find_library(CCOLAMD_LIBRARY NAMES ccolamd) +find_library(COLAMD_LIBRARY NAMES colamd) +find_library(CAMD_LIBRARY NAMES camd) +find_library(AMD_LIBRARY NAMES amd) +find_library(SUITESPARSE_LIBRARY NAMES suitesparseconfig) +# OSX does not link against lapack +if(NOT APPLE) + find_library(LAPACK_LIBRARY NAMES lapack) +endif() + +# Dependencies for lapack + +# add gcc location for MacOS +find_library(FORTRAN_LIBRARY NAMES gfortran + NAMES gfortran + PATHS /opt/usgs/v007/ports/lib/gcc5/ +) + +find_library(BLAS_LIBRARY NAMES blas) + +get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake new file mode 100644 index 0000000000..78110b9671 --- /dev/null +++ b/isis/cmake/FindEigen.cmake @@ -0,0 +1,17 @@ +# CMake module for find_package(PCL) +# Finds include directory and all applicable libraries +# +# Sets the following: +# PCL_INCLUDE_DIR + +#find_path(EIGEN_INCLUDE_DIR +# NAME Core +# PATH_SUFFIXES eigen/Eigen eigen3/Eigen +#) + +find_path(EIGEN_ROOT_INCLUDE_DIR + NAME Eigen + PATH_SUFFIXES eigen eigen3 +) + +message("Eigen FOUND") diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake new file mode 100644 index 0000000000..a424265047 --- /dev/null +++ b/isis/cmake/FindEmbree.cmake @@ -0,0 +1,17 @@ +# CMake module for find_package(Embree) +# Finds include directory and all applicable libraries +# +# Sets the following: +# EMBREE_INCLUDE_DIR +# EMBREE_LIBRARY + +find_path(EMBREE_INCLUDE_DIR + NAME rtcore.h + PATH_SUFFIXES embree2 +) + +find_library(EMBREE_LIBRARY + NAMES embree +) + +get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake new file mode 100644 index 0000000000..31b556041a --- /dev/null +++ b/isis/cmake/FindGMM.cmake @@ -0,0 +1,14 @@ +# CMake module for find_package(GMM) +# Finds include directory and all applicable libraries +# +# Sets the following: +# GMM_INCLUDE_DIR + +find_path(GMM_INCLUDE_DIR + NAMES gmm.h + PATH_SUFFIXES /gmm/gmm-5.0/gmm/ gmm +) + +get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) + +message("GMM FOUND VERSION = UNABLE TO VERSION") diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake new file mode 100644 index 0000000000..377ac2f98e --- /dev/null +++ b/isis/cmake/FindGSL.cmake @@ -0,0 +1,34 @@ +# CMake module for find_package(GSL) +# Finds include directory and all applicable libraries +# +# Sets the following: +# GSL_INCLUDE_DIR +# GSL_LIBLIST + +find_path(GSL_INCLUDE_DIR + NAMES gsl_math.h + PATH_SUFFIXES gsl +) + +find_library(GSL_LIBRARY + NAMES gsl +) + +find_library(GSL_CBLAS_LIBRARY + NAMES gslcblas +) + +if(APPLE) + string(REGEX MATCH "^(/([a-z or A-Z or 0-9])*)*" MY_PATH ${GSL_LIBRARY}}) + file(GLOB FOUND_FILES + "${MY_PATH}.*[0-9]**.dylib" + ) + get_filename_component(VERSION_FILE ${FOUND_FILES} NAME) + string(REGEX MATCH "[0-9][0-9]" VERSION_NUM ${VERSION_FILE}) +else(APPLE) + get_version(${GSL_LIBRARY} VERSION_NUM) +endif(APPLE) +message("GSL FOUND VERSION = ${VERSION_NUM}") +set(GSL LIBLIST ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY}) + +get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake new file mode 100644 index 0000000000..b5e97609c6 --- /dev/null +++ b/isis/cmake/FindGeoTIFF.cmake @@ -0,0 +1,34 @@ +# CMake module for find_package(GeoTIFF) +# Finds include directory and all applicable libraries +# +# Sets the following: +# GEOTIFF_INCLUDE_DIR +# GEOTIFF_LIBRARY + +find_path(GEOTIFF_INCLUDE_DIR + NAMES geotiff.h + PATH_SUFFIXES geotiff +) + +find_library(GEOTIFF_LIBRARY + NAMES geotiff +) + +# DO SOMETHING DIFFERENT FOR APPLE +if(APPLE) + string(REGEX MATCH "^(/([a-z or A-Z or 0-9])*)*" MY_PATH ${GEOTIFF_LIBRARY}}) + file(GLOB FOUND_FILES + "${MY_PATH}.*[0-9]**.dylib" + ) + get_filename_component(VERSION_FILE ${FOUND_FILES} NAME) + string(REGEX MATCH "[0-9]" VERSION_NUM ${VERSION_FILE}) +else(APPLE) + get_version(${GEOTIFF_LIBRARY} VERSION_NUM) +endif(APPLE) +message("GEOTIFF FOUND VERSION = ${VERSION_NUM}") + +get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) + +if(VERSION_NUM VERSION_LESS GeoTIFF_FIND_VERSION) + message(FATAL_ERROR "GeoTIFF version is too old (${VERSION_NUM}). Use ${GeoTIFF_FIND_VERSION} or higher.") +endif(VERSION_NUM VERSION_LESS GeoTIFF_FIND_VERSION) diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake new file mode 100644 index 0000000000..51a1bf146d --- /dev/null +++ b/isis/cmake/FindGeos.cmake @@ -0,0 +1,37 @@ +# CMake module for find_package(Geos) +# Finds include directory and all applicable libraries +# +# Sets the following: +# GEOS_INCLUDE_DIR +# GEOS_LIBRARY + + +if(APPLE) + find_path(GEOS_INCLUDE_DIR + NAME geos + PATH_SUFFIXES geos/geos3.5.0/ + ) + find_library(GEOS_LIBRARY + NAMES geos-3.5.0 + ) + find_library(GEOS_C_LIBRARY + NAMES geos_c + ) +else() + #changing to 3.5.1 for v007 + find_path(GEOS_INCLUDE_DIR + NAME geos + PATH_SUFFIXES geos/geos3.5.1/ + ) + #tjw: Changing to 3.5.1 for v007 + find_library(GEOS_LIBRARY + NAMES geos-3.5.1 + ) + + find_library(GEOS_C_LIBRARY + NAMES geos_c + ) + +endif(APPLE) + +get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindHDF5.cmake b/isis/cmake/FindHDF5.cmake new file mode 100644 index 0000000000..2fc9f7328e --- /dev/null +++ b/isis/cmake/FindHDF5.cmake @@ -0,0 +1,18 @@ +# CMake module for find_package(HDF5) +# Finds include directory and all applicable libraries +# +# Sets the following: +# HDF5_INCLUDE_DIR +# HDF5_LIBRARY + +find_path(HDF5_INCLUDE_DIR + NAME hdf5.h + PATH_SUFFIXES hdf5 +) + +find_library(HDF5_LIBRARY NAMES hdf5) +find_library(HDF5_CPP_LIBRARY NAMES hdf5_cpp) +find_library(HDF5_HL_LIBRARY NAMES hdf5_hl) +find_library(HDF5_HLCPP_LIBRARY NAMES hdf5_hl_cpp) + +get_filename_component(HDF5_ROOT_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake new file mode 100644 index 0000000000..4bb46183fd --- /dev/null +++ b/isis/cmake/FindJama.cmake @@ -0,0 +1,16 @@ +# CMake module for find_package(Jama) +# Finds include directory and all applicable libraries +# +# Sets the following: +# JAMA_INCLUDE_DIR + +find_path(JAMA_INCLUDE_DIR + NAMES jama_cholesky.h + PATH_SUFFIXES + jama/jama125/jama + /jama +) + +get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY) + +message("JAMA FOUND") diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake new file mode 100644 index 0000000000..68bea713af --- /dev/null +++ b/isis/cmake/FindKakadu.cmake @@ -0,0 +1,33 @@ +# CMake module for find_package(Kakadu) +# Finds include directory and all applicable libraries +# +# Sets the following: +# KAKADU_INCLUDE_DIR +# KAKADU_A_LIBRARY +# KAKADU_V_LIBRARY + +find_path(KAKADU_INCLUDE_DIR + NAME kdu_kernels.h + PATH_SUFFIXES + kakadu/v7_9_1-01762L/ +) + +find_library(KAKADU_A_LIBRARY + NAMES kdu_a79R +) + +find_library(KAKADU_V_LIBRARY + NAMES kdu_v79R +) + +# message("KAKADU_LIBRARY = ${KAKADU_INCLUDE_DIR}") +get_filename_component(VERSION_FILE ${KAKADU_A_LIBRARY} NAME_WE) +# message("VERSION_FILE = ${VERSION_FILE}") +string(REGEX MATCH "[0-9][0-9]" VERSION_NUM ${VERSION_FILE}) +message("KAKADU FOUND VERSION = ${VERSION_NUM}") + +get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) + +if(VERSION_NUM VERSION_LESS Kakadu_FIND_VERSION) + message(FATAL_ERROR "Kakadu version is too old (${VERSION_NUM}). Use ${Kakadu_FIND_VERSION} or higher.") +endif(VERSION_NUM VERSION_LESS Kakadu_FIND_VERSION) diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake new file mode 100644 index 0000000000..24dc3f02da --- /dev/null +++ b/isis/cmake/FindNN.cmake @@ -0,0 +1,15 @@ +# CMake module for find_package(TNT) +# Finds include directory and all applicable libraries +# +# Sets the following: +# TNT_INCLUDE_DIR + +find_path(NN_INCLUDE_DIR + NAMES nn.h + PATH_SUFFIXES nn +) + +get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) + +find_library(NN_LIBRARY NAMES nn) +message("NN FOUND VERSION = UNABLE TO VERSION") diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake new file mode 100644 index 0000000000..ecfe007fe2 --- /dev/null +++ b/isis/cmake/FindOpenCV.cmake @@ -0,0 +1,29 @@ +# CMake module for find_package(OpenCV) +# Finds include directory and all applicable libraries +# +# Sets the following: +# OPENCV_INCLUDE_DIR +# OPENCV_LIBLSIT + +find_path(OPENCV_INCLUDE_DIR + NAMES cv.h + PATH_SUFFIXES opencv +) + +find_library(OPENCV_CORE_LIBRARY NAMES opencv_core) +find_library(OPENCV_VIDEOSTAB_LIBRARY NAMES opencv_videostab) +find_library(OPENCV_VIDEO_LIBRARY NAMES opencv_video) +find_library(OPENCV_SUPERRES_LIBRARY NAMES opencv_superres) +find_library(OPENCV_STITCHING_LIBRARY NAMES opencv_stitching) +find_library(OPENCV_PHOTO_LIBRARY NAMES opencv_photo) +find_library(OPENCV_OBJDETECT_LIBRARY NAMES opencv_objdetect) +find_library(OPENCV_ML_LIBRARY NAMES opencv_ml) +find_library(OPENCV_IMGCODECS_LIBRARY NAMES opencv_imgcodecs) +find_library(OPENCV_IMGPROC_LIBRARY NAMES opencv_imgproc) +find_library(OPENCV_CALIB3D_LIBRARY NAMES opencv_calib3d) +find_library(OPENCV_FEATURES2D_LIBRARY NAMES opencv_features2d) +find_library(OPENCV_XFEATURES2D_LIBRARY NAMES opencv_xfeatures2d) +find_library(OPENCV_HIGHGUI_LIBRARY NAMES opencv_highgui) +find_library(OPENCV_FLANN_LIBRARY NAMES opencv_flann) + +get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake new file mode 100644 index 0000000000..729a742aa1 --- /dev/null +++ b/isis/cmake/FindPCL.cmake @@ -0,0 +1,23 @@ +# CMake module for find_package(PCL) +# Finds include directory and all applicable libraries +# +# Sets the following: +# PCL_INCLUDE_DIR +# PCL_LIBRARY + +find_path(PCL_ROOT_INCLUDE_DIR + NAME pcl + PATH_SUFFIXES pcl-1.8 +) + +find_path(PCL_INCLUDE_DIR + NAME pcl_base.h + PATH_SUFFIXES pcl-1.8/pcl +) + +find_library(PCL_COMMON_LIBRARY NAMES pcl_common) +find_library(PCL_OCTREE_LIBRARY NAMES pcl_octree) +find_library(PCL_IO_LIBRARY NAMES pcl_io) + +get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) +message("PCL FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake new file mode 100644 index 0000000000..ab33d9b23f --- /dev/null +++ b/isis/cmake/FindProtobuf.cmake @@ -0,0 +1,10 @@ +find_path(PROTOBUF_INCLUDE_DIR + NAMES google/ + PATH_SUFFIXES google-protobuf/protobuf2.6.1/ +) + +find_library(PROTOBUF_LIBRARY NAMES protobuf) + +get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) +get_version(${PROTOBUF_LIBRARY} VERSION_NUM) +message("PROTOBUF FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake new file mode 100644 index 0000000000..6cb5ac9cd8 --- /dev/null +++ b/isis/cmake/FindQwt.cmake @@ -0,0 +1,28 @@ +# CMake module for find_package(Qwt) +# Finds include directory and all applicable libraries +# +# Sets the following: +# QWT_INCLUDE_DIR +# QWT_LIBRARY + +FIND_PATH(QWT_INCLUDE_DIR + NAMES qwt.h + PATH_SUFFIXES qwt-qt5 qwt qwt6 +) + +find_library(QWT_LIBRARY + NAMES qwt +) + +if(APPLE) + set(VERSION_PATH "${QWT_LIBRARY}/Versions/") + file(GLOB FOUND_FILES + "${VERSION_PATH}[0-9]" + ) + string(SUBSTRING ${FOUND_FILES} 63 64 VERSION_NUM) +else(APPLE) + get_version(${QWT_LIBRARY} VERSION_NUM) +endif(APPLE) +message("QWT FOUND VERSION = ${VERSION_NUM}") + +get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake new file mode 100644 index 0000000000..24a0b2c83f --- /dev/null +++ b/isis/cmake/FindSuperLU.cmake @@ -0,0 +1,23 @@ +# CMake module for find_package(SuperLU) +# Finds include directory and all applicable libraries +# +# Sets the following: +# SUPERLU_INCLUDE_DIR +# SUPERLU_LIBRARY + +find_path(SUPERLU_INCLUDE_DIR + NAME supermatrix.h + PATH_SUFFIXES superlu/superlu5.0/superlu/ superlu +) + +find_library(SUPERLU_LIBRARY + NAMES superlu_4.3 +) + +# message("SUPERLU_LIBRARY = ${SUPERLU_INCLUDE_DIR}") +get_filename_component(VERSION_FILE ${SUPERLU_LIBRARY} NAME) +# message("VERSION_FILE = ${VERSION_FILE}") +string(REGEX MATCH "[0-9]\\.[0-9]" VERSION_NUM ${VERSION_FILE}) +message("SUPERLU FOUND VERSION = ${VERSION_NUM}") + +get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake new file mode 100644 index 0000000000..b35f0d5945 --- /dev/null +++ b/isis/cmake/FindTIFF.cmake @@ -0,0 +1,11 @@ +find_path(TIFF_INCLUDE_DIR + NAMES tiff.h + PATH_SUFFIXES tiff/tiff-4.0.5 +) +# message("TIFF_INCLUDE_DIR = ${TIFF_INCLUDE_DIR}") + +find_library(TIFF_LIBRARY NAMES tiff) +# message("TIFF_LIBRARY = ${TIFF_LIBRARY}") + +get_version(${TIFF_LIBRARY} VERSION_NUM) +message("TIFF FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake new file mode 100644 index 0000000000..f35a71962b --- /dev/null +++ b/isis/cmake/FindTNT.cmake @@ -0,0 +1,17 @@ +# CMake module for find_package(TNT) +# Finds include directory and all applicable libraries +# +# Sets the following: +# TNT_INCLUDE_DIR + +find_path(TNT_INCLUDE_DIR + NAMES tnt.h + PATH_SUFFIXES + tnt/tnt126/tnt + tnt/ +) + +get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) +file(READ "${TNT_INCLUDE_DIR}/tnt_version.h" EXTRACT LIMIT 6 OFFSET 1006) +string(SUBSTRING ${EXTRACT} 0 5 VERSION_NUM) +message("TNT FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake new file mode 100644 index 0000000000..b9c6b23681 --- /dev/null +++ b/isis/cmake/FindX11.cmake @@ -0,0 +1,14 @@ +# CMake module for find_package(X11) +# Finds include directory and all applicable libraries +# +# Sets the following: +# X11_LIBRARY + +find_library(X11_LIBRARY + NAMES X11 +) + +# message("X11_LIBRARY = ${X11_LIBRARY}") +set(VERSION_NUM "") +get_version(${X11_LIBRARY} VERSION_NUM) +message("X11 FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake new file mode 100644 index 0000000000..a979813e41 --- /dev/null +++ b/isis/cmake/FindXercesC.cmake @@ -0,0 +1,10 @@ +find_path(XERCESC_INCLUDE_DIR + NAMES xercesc/ + PATH_SUFFIXES xercesc/xercesc-3.1.2/ +) +# message("XERCESC_INCLUDE_DIR = ${XERCESC_INCLUDE_DIR}") + +find_library(XercesC_LIBRARY NAMES xerces-c) +# message("XercesC lib = ${XercesC_LIBRARY}") +get_version(${XercesC_LIBRARY} VERSION_NUM) +message("XercesC FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake new file mode 100644 index 0000000000..2650a19d62 --- /dev/null +++ b/isis/cmake/InstallThirdParty.cmake @@ -0,0 +1,126 @@ +#=========================================================================== +# Code for installing the third part libraries to the output folder. +#=========================================================================== + +# Library portion of the installation +function(install_third_party_libs) + + + + # Where all the library files will go + set(installLibFolder "${CMAKE_INSTALL_PREFIX}/3rdParty/lib") + + # TEMPORARY CODE TO INSTALL ALL FILES FROM V007/lib into 3rdParty/lib + if(APPLE) + install(DIRECTORY "/opt/usgs/v007/3rdParty/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) + install(DIRECTORY "/opt/usgs/v007/ports/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) + install(DIRECTORY "/opt/usgs/v007/proprietary/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) + else() + install(DIRECTORY "/usgs/pkgs/local/v007/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) + endif() + + # Loop through all the library files in our list + foreach(library ${ALLLIBS}) + get_filename_component(extension ${library} EXT) + if ("${extension}" STREQUAL ".so" OR "${extension}" STREQUAL ".dylib" ) + #get path to library in libararypath + get_filename_component(librarypath ${library} PATH) + + # Copy file to output directory + file(RELATIVE_PATH relPath "${thirdPartyDir}/lib" ${library}) + + # Check if the file is a symlink + execute_process(COMMAND readlink ${library} OUTPUT_VARIABLE link) + + message(STATUS "${library}") + if ("${link}" STREQUAL "") + # Copy original files and framework folders + if(IS_DIRECTORY ${library}) + install(DIRECTORY ${library} DESTINATION ${installLibFolder}) + else() + install(PROGRAMS ${library} DESTINATION ${installLibFolder}) + endif() + + else() + # Loop through possible chains of namelinks (i.e. lib.so -> lib.so.3.5 -> lib.so.3.5.1) + while (NOT "${link}" STREQUAL "") + # Recreate symlinks + string(REGEX REPLACE "\n$" "" link "${link}") # Strip trailing newline + #There are a few cases where directory information is contained inside the link variable. + #The line below handles those cases (ie. /usr/lib64/libblas.so.3) + execute_process(COMMAND basename ${link} OUTPUT_VARIABLE baselink) + + #install(CODE "EXECUTE_PROCESS(COMMAND ln -fs ${baselink} ${installLibFolder}/${relPath})") + install(CODE "EXECUTE_PROCESS(COMMAND ln -fs ${librarypath}/${baselink} ${installLibFolder}/${baselink} )") + #message("librarypath= ${librarypath}") + #message ("baselink=${baselink}") + #message("installlibFolder/relPath = ${installLibFolder} / ${relPath}") + if (EXISTS "${librarypath}/${baselink}") + install(PROGRAMS "${librarypath}/${baselink}" DESTINATION ${installLibFolder}) + endif() + # Set next iteration of possible symlinks + set(library "${librarypath}/${baselink}") + file(RELATIVE_PATH relPath "${thirdPartyDir}/lib" ${library}) + execute_process(COMMAND readlink ${library} OUTPUT_VARIABLE link) + endwhile() + endif() + endif() + endforeach() + + # Copy over QT Frameworks + if(APPLE) + # execute_process(COMMAND cp -Lr ${library} ${installLibFolder}) + endif(APPLE) +endfunction() + + + +# Plugin portion of the installation +function(install_third_party_plugins) + + # Where all the plugin files will go + set(installPluginFolder "${CMAKE_INSTALL_PREFIX}/3rdParty/plugins") + + # Copy all of the plugin files + foreach(plugin ${THIRDPARTYPLUGINS}) + file(RELATIVE_PATH relPath "${PLUGIN_DIR}" ${plugin}) + get_filename_component(relPath ${relPath} DIRECTORY) # Strip filename + install(PROGRAMS ${plugin} DESTINATION ${installPluginFolder}/${relPath}) + endforeach() + +endfunction() + +# License portion of the installation +function(install_third_party_license) + # Specify top level directories + if(APPLE) + set(LIC_DIR "/opt/usgs/v007/3rdParty/license") + else() + set(LIC_DIR "/usgs/pkgs/local/v007/license") + endif() + if(NOT EXISTS ${CMAKE_INSTALL_PREFIX}/3rdParty) + install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/3rdParty/)") + endif() + install(CODE "execute_process(COMMAND cp -r ${LIC_DIR} ${CMAKE_INSTALL_PREFIX}/3rdParty/license)") + +endfunction() + + +# Install all third party libraries and plugins +function(install_third_party) + + # The files are available pre-build but are not copied until make-install is called. + message("Setting up 3rd party lib installation...") + install_third_party_libs() + + message("Setting up 3rd party plugin installation...") + install_third_party_plugins() + + message("Obtaining licenses...") + install_third_party_license() + + # Finish miscellaneous file installation + install(FILES "${CMAKE_SOURCE_DIR}/3rdParty/lib/README" + DESTINATION ${CMAKE_INSTALL_PREFIX}/3rdParty/lib) + +endfunction() diff --git a/isis/cmake/MacPlistMacros.cmake b/isis/cmake/MacPlistMacros.cmake new file mode 100644 index 0000000000..b123872771 --- /dev/null +++ b/isis/cmake/MacPlistMacros.cmake @@ -0,0 +1,12 @@ +# Mac Plist Macros + +FUNCTION (GET_VERSION_PLIST PLISTFILE OUTVAR) + SET (PVERSION "") + IF (EXISTS ${PLISTFILE}) + FILE (READ "${PLISTFILE}" info_plist) + STRING (REGEX REPLACE "\n" "" info_plist "${info_plist}") + STRING (REGEX MATCH "CFBundleShortVersionString[ \t]*([0-9\\.]*)" PLISTVERSION "${info_plist}") + STRING (REGEX REPLACE "CFBundleShortVersionString[ \t]*([0-9\\.]*)" "\\1" PVERSION "${PLISTVERSION}") + ENDIF (EXISTS ${PLISTFILE}) + SET (${OUTVAR} ${PVERSION} PARENT_SCOPE) +ENDFUNCTION (GET_VERSION_PLIST) diff --git a/isis/cmake/Makefile b/isis/cmake/Makefile new file mode 100644 index 0000000000..0e95c7b314 --- /dev/null +++ b/isis/cmake/Makefile @@ -0,0 +1,196 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.9 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /scratch/isiscmake/isis + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /scratch/isiscmake/isis + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# The main all target +all: cmake_check_build_system + cd /scratch/isiscmake/isis && $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles /scratch/isiscmake/isis/cmake/CMakeFiles/progress.marks + cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/all + $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /scratch/isiscmake/isis && $(MAKE) -f CMakeFiles/Makefile2 cmake/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /scratch/isiscmake/isis && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/strip" + @echo "... install/local" + @echo "... test" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... install" + @echo "... list_install_components" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /scratch/isiscmake/isis && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake new file mode 100644 index 0000000000..8d221c9e22 --- /dev/null +++ b/isis/cmake/RunMakeFileTest.cmake @@ -0,0 +1,81 @@ +#============================================================================ +# Script to read in a MakeFile based test and run it without relying on any +# of the old Makefile infrastructure. +#============================================================================ + +cmake_minimum_required(VERSION 3.3) +list(APPEND CMAKE_MODULE_PATH "${CODE_ROOT}/cmake") +list(APPEND CMAKE_PREFIX_PATH "${CODE_ROOT}/cmake") +include(Utilities) + + +# Function to run the test and check the results +function(run_app_makefile_test makefile inputFolder outputFolder truthFolder binFolder) + + # Build the test name + get_filename_component(sourceFolder ${makefile} DIRECTORY) +# get_filename_component(testName ${sourceFolder} NAME) +# get_filename_component(folder ${sourceFolder} DIRECTORY) +# get_filename_component(folder ${folder} DIRECTORY) +# get_filename_component(appName ${folder} NAME) + set(appName ${appName}_${testName}) + + # Check if there are copies of the input/truth folders in the source folder, + # if so use those instead of the original location. + if(EXISTS ${sourceFolder}/input) + set(inputFolder ${sourceFolder}/input) + endif() + if(EXISTS ${sourceFolder}/truth) + set(truthFolder ${sourceFolder}/truth) + endif() + +# # Read in the MakeFile +# if(NOT EXISTS ${makefile}) +# message(FATAL_ERROR "App test MakeFile ${makefile} was not found!") +# endif() +# file(READ ${makefile} makefileContents) +# # Replace include line with a short list of definitions +# set(newDefinitions "INPUT=${inputFolder}\nOUTPUT=${outputFolder}\nRM=rm -f\nCP=cp\nLS=ls\nMV=mv\nSED=sed\nTAIL=tail\nECHO=echo\nCAT=cat\nLS=ls") +# string(REPLACE "include ${CODE_ROOT}/make/isismake.tsts" "${newDefinitions}" newFileContents "${makefileContents}") +# +# # Set required environment variables +# set(ENV{PATH} "${binFolder}:$ENV{PATH}") +# +# # Select the log file +# set(logFile "${binFolder}/${appName}.output") +# message("logFile = ${logFile}") +# +# # Execute the Makefile we just generated +# set(code "") +# execute_process(COMMAND rm -rf ${outputFolder}) +# execute_process(COMMAND rm -f ${logFile}) + + execute_process(COMMAND make test WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) + + if (result MATCHES "OK") + set(failed "OFF") + else() + set(failed "ON") + endif() + + + # If any file failed, the test is a failure. + if(${failed}) + message(FATAL_ERROR "Test failed.") + endif() + +endfunction() + + + + +#=================================================================================== +# This is the main script that gets run during the test. +# - Just redirect to the main function call. + +# Needed for IsisPreferences and other test data to be found +set(ENV{ISIS3DATA} "${DATA_ROOT}") + +run_app_makefile_test(${MAKEFILE} ${INPUT_DIR} ${OUTPUT_DIR} ${TRUTH_DIR} ${BIN_DIR}) + + diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake new file mode 100644 index 0000000000..6e392ae00b --- /dev/null +++ b/isis/cmake/RunUnitTest.cmake @@ -0,0 +1,74 @@ +#========================================================================= +# Script to run a basic unit test and compare the result to a truth file. +# - This replaces the ISIS UnitTester script. +#========================================================================= + +# Multiple ISIS files need to find things relative to ISISROOT +# and ISIS3DATA so make sure those are set. +set(ENV{ISIS3DATA} "${DATA_ROOT}") + +message(STATUS "ISISROOT = $ENV{ISISROOT}") +message(STATUS "ISIS3DATA = $ENV{ISIS3DATA}") + +# Set up a file for program output +set(outputFile "${TEST_PROG}.output") +message("outputFile = ${outputFile}") +file(REMOVE ${outputFile}) # Make sure no old file exists + +# The test programs need to be run from their source folders +# so that they can find input data files. +get_filename_component(truthFolder ${TRUTH_FILE} DIRECTORY) + +# Test programs also need to be run with the EXACT name "unitTest", +# otherwise a GUI will pop up and ruin the test. +get_filename_component(binFolder ${TEST_PROG} DIRECTORY) +get_filename_component(binName ${TEST_PROG} NAME) + +set(tempDir ${binFolder}/${binName}_temp) +set(tempLink ${tempDir}/unitTest) +execute_process(COMMAND rm -rf ${tempDir}) +execute_process(COMMAND mkdir -p ${tempDir}) +execute_process(COMMAND ln -s ${TEST_PROG} ${tempLink}) +execute_process(COMMAND ln -s ${truthFolder}/unitTest.xml ${tempDir}/unitTest.xml) + +# Run the unit test executable and pipe the output to a text file. +#execute_process(COMMAND ${TEST_PROG} +execute_process(COMMAND ${tempLink} + WORKING_DIRECTORY ${truthFolder} + OUTPUT_FILE ${outputFile} + ERROR_FILE ${outputFile} + OUTPUT_VARIABLE result + RESULT_VARIABLE code) +if(result) + message("Test failed: ${result}, ${code}") +endif() + +# If an exclusion file is present, use it to filter out selected lines. +# - Do this by comparing filtered versions of the two files, then +# running the diff on those two temporary files. +set(comp1 ${outputFile}) +set(comp2 ${TRUTH_FILE}) +set(exclusionPath ${truthFolder}/unitTest.exclude) +if(EXISTS ${exclusionPath}) + set(comp1 ${tempDir}/output_exclude.txt) + set(comp2 ${tempDir}/truth_exclude.txt) + # This throws out all lines containing a word from the exclusion file. + execute_process(COMMAND cat ${outputFile} | grep -v -f ${exclusionPath} + OUTPUT_FILE ${comp1}) + execute_process(COMMAND cat ${TRUTH_FILE} | grep -v -f ${exclusionPath} + OUTPUT_FILE ${comp2}) +endif() + +# Verify that the files are exactly the same +execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files + ${comp1} ${comp2} + RESULT_VARIABLE DIFFERENT) +if(DIFFERENT) + message(FATAL_ERROR "Test failed - files differ") + # On error the result file is left around to aid in debugging. +else() + file(REMOVE ${outputFile}) # On success, clean out the result file. +endif() + +# Clean up our temporary folder +execute_process(COMMAND rm -f ${tempDir}) diff --git a/isis/cmake/TestSetup.cmake b/isis/cmake/TestSetup.cmake new file mode 100644 index 0000000000..b9fc1175f5 --- /dev/null +++ b/isis/cmake/TestSetup.cmake @@ -0,0 +1,83 @@ +#============================================================ +# This file contains functions to help set tests. +#============================================================ + + +# Generate a test from a folder containing a Makefile and specific sub folders. +# - These are used for application and module tests. +function(add_makefile_test_folder folder prefix_name) + + # For convenience, quietly ignore Makefiles that get passed in instead of folders. + get_filename_component(subName ${folder} NAME) + if("${subName}" STREQUAL "Makefile") + return() + endif() + + # Figure out the input, output, and truth paths + file(RELATIVE_PATH relPath ${CMAKE_SOURCE_DIR} ${folder}) + set(dataDir $ENV{ISIS3TESTDATA}/isis/${relPath}) + set(inputDir ${dataDir}/input) + set(truthDir ${dataDir}/truth) + set(makeFile ${folder}/Makefile) + + # TODO: Improve variable name (from top level file) + # The output folder may be in a different directory + + set(outputDir ${testOutputDir}/${relPath}/output) + + # Define the name CTest will use to refer to this test. + set(testName ${prefix_name}_test_${subName}) + + ## Some tests don't need an input folder but the others must exist + #if(NOT EXISTS ${makeFile}) + # message(FATAL_ERROR "Required file does not exist: ${makeFile}") + #endif() + #if(NOT EXISTS ${truthDir}) + # message(FATAL_ERROR "Required data folder does not exist: ${truthDir}") + #endif() + + # Call lower level function to finish adding the test. + add_makefile_test_target(${testName} ${makeFile} ${inputDir} ${outputDir} ${truthDir}) + +endfunction() + + +# Add a Makefile based test to the CMake test list. +macro(add_makefile_test_target testName makeFile inputDir outputDir truthDir) + + set(thisFolder "${PROJECT_SOURCE_DIR}/cmake") + + # Set up a cmake script which will execute the command in the makefile + # and then check the results against the truth folder. + add_test(NAME ${testName} + COMMAND ${CMAKE_COMMAND} + -DMAKEFILE=${makeFile} + -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR} + -DCODE_ROOT=${PROJECT_SOURCE_DIR} + -DDATA_ROOT=$ENV{ISIS3DATA} + -DINPUT_DIR=${inputDir} + -DOUTPUT_DIR=${outputDir} + -DTRUTH_DIR=${truthDir} + -DBIN_DIR=${CMAKE_BINARY_DIR}/bin + -P ${thisFolder}/RunMakeFileTest.cmake) + +endmacro() + + +# Add a class based unit test with an executable and a truth file. +macro(add_unit_test_target testFile truthFile) + + set(thisFolder "${PROJECT_SOURCE_DIR}/cmake") + set(fullTestPath "${CMAKE_BINARY_DIR}/unitTest/${testFile}") # The binary that the script will execute + + # Set up a cmake script which will run the executable + # and then check the results against the truth file. + set(testName ${testFile}) + add_test(NAME ${testName} + COMMAND ${CMAKE_COMMAND} + -DTEST_PROG=${fullTestPath} + -DTRUTH_FILE=${truthFile} + -DDATA_ROOT=$ENV{ISIS3DATA} + -DCODE_ROOT=${PROJECT_SOURCE_DIR} + -P ${thisFolder}/RunUnitTest.cmake) +endmacro() diff --git a/isis/cmake/Utilities.cmake b/isis/cmake/Utilities.cmake new file mode 100644 index 0000000000..513668a630 --- /dev/null +++ b/isis/cmake/Utilities.cmake @@ -0,0 +1,315 @@ +#================================================================================== +# This file contains small utility functions +#================================================================================== + +# Copy one file +function(copy_file src dest) + configure_file(${src} ${dest} COPYONLY) +endfunction() + +# Copy one folder +function(copy_folder src dest) + execute_process(COMMAND cp -r ${src} ${dest}) +endfunction() + +# Copy all files matching a wildcard to the output folder. +function(copy_wildcard wildcard outputFolder) + file(GLOB files ${wildcard}) + file(COPY ${files} DESTINATION ${outputFolder}) +endfunction() + +# Copy all input files to the output folder +function(copy_files_to_folder files folder) + foreach(f ${files}) + get_filename_component(filename ${f} NAME) + set(outputPath "${folder}/${filename}") + configure_file(${f} ${outputPath} COPYONLY) + endforeach() +endfunction() + +# Quit if the file does not exist +function(verify_file_exists path) + if(NOT EXISTS ${path}) + message( FATAL_ERROR "Required file ${path} does not exist!" ) + endif() +endfunction() + +# Set result to ON if the file contains "s", OFF otherwise. +function(file_contains path s result) + file(READ ${path} contents) + string(FIND "${contents}" "${s}" position) + set(${result} ON PARENT_SCOPE) + if(${position} EQUAL -1) + set(${result} OFF PARENT_SCOPE) + endif() +endfunction() + + +# Set result to a list of all the subdirectories in the given directory. +function(get_subdirectory_list curdir result) + file(GLOB children RELATIVE ${curdir} ${curdir}/*) + set(dirlist "") + foreach(child ${children}) + # Skip files and hidden folders. + string(SUBSTRING ${child} 0 1 firstChar) + if( (IS_DIRECTORY ${curdir}/${child}) AND (NOT ${firstChar} STREQUAL ".") ) + list(APPEND dirlist ${curdir}/${child}) + endif() + endforeach() + set(${result} ${dirlist} PARENT_SCOPE) +endfunction() + +# Append the contents of IN_FILE to the end of OUT_FILE +function(cat inFile outFile) + + # If the output file does not exist, init with an empty file. + if(NOT EXISTS "${outFile}") + file(WRITE ${outFile} "") + endif() + + # Perform the file concatenation. + if(EXISTS "${inFile}") + file(READ ${inFile} contents) + file(APPEND ${outFile} "${contents}") + endif() +endfunction() + +# Get the correct location to generate code for items in a given input folder +# - Generated code includes uic, moc, and protobuf files. +function(get_code_gen_dir inputFolder codeGenFolder) + file(RELATIVE_PATH relPath ${PROJECT_SOURCE_DIR} ${inputFolder}) + string(REPLACE "src" "objects" relPath ${relPath}) + set(${codeGenFolder} "${PROJECT_BINARY_DIR}/${relPath}" PARENT_SCOPE) + file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/${relPath}") + + # Also add this folder to the include path + # include_directories("${PROJECT_BINARY_DIR}/${relPath}") +endfunction() + +# Determine the text string used to describe this OS version +function(get_os_version text) + + if(UNIX AND NOT APPLE) + + # Fetch OS information + execute_process(COMMAND cat "/etc/os-release" + RESULT_VARIABLE code + OUTPUT_VARIABLE result + ERROR_VARIABLE result) + if ("${code}" STREQUAL "0") + # Extract OS name and version from generic Linux system + string(REGEX MATCH "NAME=[A-Za-z\"]+" name "${result}") + string(REGEX MATCH "VERSION_ID=[0-9\\.\"]+" version "${result}") + string(SUBSTRING ${name} 5 -1 name) + string(SUBSTRING ${version} 11 -1 version) + string(REPLACE "\"" "" name ${name}) + string(REPLACE "\"" "" version ${version}) + string(REPLACE "." "_" version ${version}) + else() + # Try the Red Hat specific command. + execute_process(COMMAND cat "/etc/redhat-release" + RESULT_VARIABLE code + OUTPUT_VARIABLE result + ERROR_VARIABLE result) + if ("${code}" STREQUAL "0") + # Extract OS name and version from Red Hat Linux system + string(REGEX MATCH "[0-9\\.]+" version "${result}") + set(name RedHatEnterprise) # This part is easy + else() + # TODO: Test! + # Try another command + execute_process(COMMAND cat "/etc/lsb-release" + RESULT_VARIABLE code + OUTPUT_VARIABLE result + ERROR_VARIABLE result) + + message("code = ${code}") + message("result = ${result}") + + if ("${code}" STREQUAL "0") + # Extract OS name and version + string(REGEX MATCH "Description:[ A-Za-z0-9\\.]+" version "${result}") # Get the line + string(REPLACE "release" "" version ${version}) # Strip unwanted text + string(REPLACE " " "" version ${version}) + string(REPLACE "Description:" "" version ${version}) + set(name "") # Included in version + else() + # TODO: Test! + # Try the debian specific command + execute_process(COMMAND cat "/etc/debian_version" + RESULT_VARIABLE code + OUTPUT_VARIABLE result + ERROR_VARIABLE result) + + message("code = ${code}") + message("result = ${result}") + if ("${code}" STREQUAL "0") + set(version "${result}") + set(name Debian) + else() + + message( FATAL_ERROR "Did not recognize UNIX operating system!" ) + + endif() + endif() + endif() + endif() + + #message("name = ${name}") + #message("version = ${version}") + + set(prefix "Linux_x86_64_") + + # Build the final output string + elseif(APPLE) + + # Fetch OS information + execute_process(COMMAND sw_vers + OUTPUT_VARIABLE result + ERROR_VARIABLE result) + + # Format the string + string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" version "${result}") + string(REGEX MATCH "^[0-9]+.[0-9]+" version "${version}") + string(REPLACE "." "_" version ${version}) + + set(name "MacOSX") + set(prefix "Darwin_x86_64_") + + else() + message( FATAL_ERROR "Did not recognize a supported operating system!" ) + endif() + + # Final string assembly + set(${text} ${prefix}${name}${version} PARENT_SCOPE) +endfunction() + + +# Delete the first N lines of a file +function(apply_skiplines path number) + + if(${number} EQUAL 0) + return() + endif() + + # The first line counts as line 1 for the tail command + MATH(EXPR number "${number}+1") + + set(temp ${path}_temp) + file(RENAME ${path} ${temp}) + message("tail -n +${number} ${temp} OUTPUT_FILE ${path}") + execute_process(COMMAND tail -n +${number} ${temp} OUTPUT_FILE ${path}) + #file(REMOVE ${temp}) +endfunction() + +# Strip all lines beginning with one of the words +function(apply_ignorelines path words) + + set(temp ${path}_temp) + file(RENAME ${path} ${temp}) + + #Set up special grep command to remove these lines + message("words = ${words}") + string(REPLACE " " "|" fullS "${words}") + + message("COMMAND grep -vEw ${fullS} ${temp}") + execute_process(COMMAND grep -vEw ${fullS} ${temp} OUTPUT_FILE ${path}) + + #file(REMOVE ${temp}) +endfunction() + + +#------------------------------------------------------------ + +# Wrapper function to add a library and its components +function(add_library_wrapper name sourceFiles libDependencies) + + # The only optional argument is "alsoStatic", which indicates that + # the library should be build both shared and static. + set(alsoStatic ${ARGN}) + + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + # Add library, set dependencies, and add to installation list. + add_library(${name} SHARED ${sourceFiles}) + set_target_properties(${name} PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(${name} ${libDependencies}) + install(TARGETS ${name} DESTINATION lib) + + # buildStaticCore is a command line option specified in the top CMakeLists.txt file. + if(alsoStatic AND ${buildStaticCore}) + # The static version needs a different name, but in the end the file + # needs to have the same name as the shared lib. + set(staticName "${name}_static") + message("Adding static library ${staticName}") + + add_library("${staticName}" STATIC ${sourceFiles}) + set_target_properties(${staticName} PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(${staticName} ${libDependencies}) + + # Use a copy -> install combo to get the file to the correct place. + add_custom_command(TARGET ${staticName} POST_BUILD + COMMAND mv ${CMAKE_BINARY_DIR}/src/lib${staticName}.a + ${CMAKE_BINARY_DIR}/src/lib${name}.a) + + install(CODE "EXECUTE_PROCESS(COMMAND cp ${CMAKE_BINARY_DIR}/lib/lib${name}.a + ${CMAKE_INSTALL_PREFIX}/lib/lib${name}.a)") + endif() + +endfunction() + +function(get_version libFile returnVar) + set(${returnVar} "") + set(FOUND_VERSION "") + # Get the File name + get_filename_component(VERSION_FILE ${libFile} NAME_WE) + # message("VERSION_FILE = ${VERSION_FILE}") + # Get the path to the dylib file as the so with version info is in the same area + string(REGEX MATCH "^/(([a-z or A-Z or 0-9])*/)*" PATH_TO_VERSION ${libFile}) + # message("PATH_TO_VERSION= ${PATH_TO_VERSION}") + # Glob for the dylib file with the version number + # message("CURRENT PREFIX = ${PATH_TO_VERSION}${VERSION_FILE}") + file(GLOB FOUND_FILES + "${PATH_TO_VERSION}${VERSION_FILE}-[0-9].[0-9].[0-9]*" + "${PATH_TO_VERSION}${VERSION_FILE}-[0-9].[0-9]*" + "${PATH_TO_VERSION}${VERSION_FILE}-3.1.so" + "${PATH_TO_VERSION}${VERSION_FILE}.[0-9].[0-9].[0-9]*" + "${PATH_TO_VERSION}${VERSION_FILE}_[0-9].[0-9].[0-9]*" + "${PATH_TO_VERSION}${VERSION_FILE}.so.[0-9]*.[0-9]*.[0-9]*" + "${PATH_TO_VERSION}${VERSION_FILE}.so.[0-9]*.[0-9]*" + "${PATH_TO_VERSION}${VERSION_FILE}.[0-9].dylib" + "${PATH_TO_VERSION}${VERSION_FILE}.[0-9]*.[0-9]*.dylib" + ) + # message("FOUND_FILES = ${FOUND_FILES}") + foreach(f ${FOUND_FILES}) + # Ideally glob found a single file and grep for the version number found + get_filename_component(VERSION_FILE ${f} NAME) + + string(REGEX MATCH "[\\.,-][0-9]+\\.[0-9]+\\.[0-9]+" CURR_VERSION ${VERSION_FILE}) + + if(NOT CURR_VERSION) + string(REGEX MATCH "[\\.,-][0-9]+\\.[0-9]+" CURR_VERSION ${VERSION_FILE}) + endif(NOT CURR_VERSION) + + + if(NOT CURR_VERSION) + string(REGEX MATCH "[\\.,-][0-9]+\\." CURR_VERSION ${VERSION_FILE}) + string(SUBSTRING ${CURR_VERSION} 0 2 CURR_VERSION) + endif(NOT CURR_VERSION) + + string(SUBSTRING ${CURR_VERSION} 1 -1 CURR_VERSION) + + if(FOUND_VERSION) + # message("VERSION = ${CURR_VERSION}") + # message("FOUND_VERSION = ${FOUND_VERSION}") + if(${FOUND_VERSION} VERSION_LESS ${CURR_VERSION}) + set(FOUND_VERSION ${CURR_VERSION}) + endif() + else(FOUND_VERSION) + set(FOUND_VERSION ${CURR_VERSION}) + endif(FOUND_VERSION) + + endforeach() + set(${returnVar} ${FOUND_VERSION} PARENT_SCOPE) +endfunction() diff --git a/isis/cmake/cmake_install.cmake b/isis/cmake/cmake_install.cmake new file mode 100644 index 0000000000..c66bc84688 --- /dev/null +++ b/isis/cmake/cmake_install.cmake @@ -0,0 +1,50 @@ +# Install script for directory: /scratch/isiscmake/isis/cmake + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/scratch/isiscmake/isis/build") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "0") +endif() + +if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + EXECUTE_PROCESS(COMMAND cp -f /scratch/isiscmake/isis/lib/libisis3.so /scratch/isiscmake/isis/build/lib/libisis3.5.0.so) +endif() + +if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0.so /scratch/isiscmake/isis/build/lib/libisis3.5.so) +endif() + +if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.so /scratch/isiscmake/isis/build/lib/libisis3.so) +endif() + +if("${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + EXECUTE_PROCESS(COMMAND ln -sf libisis3.so /scratch/isiscmake/isis/build/lib/libisis.so) +endif() + diff --git a/isis/src/CMakeLists.txt b/isis/src/CMakeLists.txt new file mode 100644 index 0000000000..8c3f525f0f --- /dev/null +++ b/isis/src/CMakeLists.txt @@ -0,0 +1,44 @@ +#=============================================================================== + +# Each of these calls will add one library plus multiple apps and unit tests. +# - The arguments are: (library_name, [list of folders needed for library]) + +if(${buildCore}) + add_isis_module(${CORE_LIB_NAME} base database control qisis system) + + # This folder is for under-development test code so if it is + # missing just ignore it. + # - TODO: The install behavior should be disabled for this folder! + if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/local) + message("Detected optional directory 'local'") + add_isis_module(local local) + endif() + +endif() + +if(${buildMissions}) + add_isis_module(apollo apollo) + add_isis_module(cassini cassini) + add_isis_module(chandrayaan1 chandrayaan1) + add_isis_module(clementine clementine) + add_isis_module(dawn dawn) + add_isis_module(galileo galileo) + add_isis_module(hayabusa hayabusa) + add_isis_module(kaguya kaguya) + add_isis_module(lo lo) + add_isis_module(lro lro) + add_isis_module(mariner mariner) + add_isis_module(mer mer) + add_isis_module(messenger messenger) + add_isis_module(mex mex) + add_isis_module(mgs mgs) + add_isis_module(mro mro) + add_isis_module(near near) + add_isis_module(newhorizons newhorizons) + add_isis_module(odyssey odyssey) + add_isis_module(rolo rolo) + add_isis_module(rosetta rosetta) + add_isis_module(socet socet) + add_isis_module(viking viking) + add_isis_module(voyager voyager) +endif() -- GitLab From 45257881b4a4870da0a5efa56e97d840e0931189 Mon Sep 17 00:00:00 2001 From: The Gitter Badger Date: Thu, 1 Feb 2018 16:39:37 +0000 Subject: [PATCH 002/620] Add Gitter badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6c1a4a93bf..2dca47425c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # ISIS3 + +[![Join the chat at https://gitter.im/USGS-Astrogeology/isis3_cmake](https://badges.gitter.im/USGS-Astrogeology/isis3_cmake.svg)](https://gitter.im/USGS-Astrogeology/isis3_cmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Integrated Software for Imagers and Spectrometers ISIS3 public release site -- GitLab From 8b869352fb05ca3024820df0c8c46c3bce6dc5cf Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Thu, 1 Feb 2018 11:30:04 -0700 Subject: [PATCH 003/620] Simplified InstallThirdParty's copying of libraries. --- isis/cmake/InstallThirdParty.cmake | 36 +++--------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake index 2650a19d62..3dd63399ff 100644 --- a/isis/cmake/InstallThirdParty.cmake +++ b/isis/cmake/InstallThirdParty.cmake @@ -9,6 +9,7 @@ function(install_third_party_libs) # Where all the library files will go set(installLibFolder "${CMAKE_INSTALL_PREFIX}/3rdParty/lib") + execute_process(COMMAND mkdir -p ${installLibFolder}) # TEMPORARY CODE TO INSTALL ALL FILES FROM V007/lib into 3rdParty/lib if(APPLE) @@ -30,40 +31,9 @@ function(install_third_party_libs) file(RELATIVE_PATH relPath "${thirdPartyDir}/lib" ${library}) # Check if the file is a symlink - execute_process(COMMAND readlink ${library} OUTPUT_VARIABLE link) - + #execute_process(COMMAND readlink ${library} OUTPUT_VARIABLE link) message(STATUS "${library}") - if ("${link}" STREQUAL "") - # Copy original files and framework folders - if(IS_DIRECTORY ${library}) - install(DIRECTORY ${library} DESTINATION ${installLibFolder}) - else() - install(PROGRAMS ${library} DESTINATION ${installLibFolder}) - endif() - - else() - # Loop through possible chains of namelinks (i.e. lib.so -> lib.so.3.5 -> lib.so.3.5.1) - while (NOT "${link}" STREQUAL "") - # Recreate symlinks - string(REGEX REPLACE "\n$" "" link "${link}") # Strip trailing newline - #There are a few cases where directory information is contained inside the link variable. - #The line below handles those cases (ie. /usr/lib64/libblas.so.3) - execute_process(COMMAND basename ${link} OUTPUT_VARIABLE baselink) - - #install(CODE "EXECUTE_PROCESS(COMMAND ln -fs ${baselink} ${installLibFolder}/${relPath})") - install(CODE "EXECUTE_PROCESS(COMMAND ln -fs ${librarypath}/${baselink} ${installLibFolder}/${baselink} )") - #message("librarypath= ${librarypath}") - #message ("baselink=${baselink}") - #message("installlibFolder/relPath = ${installLibFolder} / ${relPath}") - if (EXISTS "${librarypath}/${baselink}") - install(PROGRAMS "${librarypath}/${baselink}" DESTINATION ${installLibFolder}) - endif() - # Set next iteration of possible symlinks - set(library "${librarypath}/${baselink}") - file(RELATIVE_PATH relPath "${thirdPartyDir}/lib" ${library}) - execute_process(COMMAND readlink ${library} OUTPUT_VARIABLE link) - endwhile() - endif() + execute_process(COMMAND cp -L ${library} ${installLibFolder}) endif() endforeach() -- GitLab From 6dcf93f81cff3318327576e62953f10e548a5ff4 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 31 Jan 2018 20:58:56 -0700 Subject: [PATCH 004/620] removed version code from find scripts --- isis/CMakeLists.txt | 1 + isis/cmake/FindBoost.cmake | 17 ----------------- isis/cmake/FindCSPICE.cmake | 8 -------- isis/cmake/FindEigen.cmake | 2 -- isis/cmake/FindGMM.cmake | 2 -- isis/cmake/FindGSL.cmake | 13 ------------- isis/cmake/FindGeoTIFF.cmake | 17 ----------------- isis/cmake/FindKakadu.cmake | 10 ---------- isis/cmake/FindNN.cmake | 3 --- isis/cmake/FindPCL.cmake | 1 - isis/cmake/FindProtobuf.cmake | 2 -- isis/cmake/FindQwt.cmake | 11 ----------- isis/cmake/FindSuperLU.cmake | 6 ------ isis/cmake/FindTIFF.cmake | 3 --- isis/cmake/FindTNT.cmake | 3 --- isis/cmake/FindX11.cmake | 5 ----- isis/cmake/FindXercesC.cmake | 3 --- 17 files changed, 1 insertion(+), 106 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index ea14a0411b..b3659f9eac 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -19,6 +19,7 @@ list(APPEND CMAKE_INCLUDE_PATH /usgs/pkgs/local/v007/include/xercesc/xercesc-3.1.2/ /usgs/pkgs/local/v007/include/tiff/tiff-4.0.5/ /usr/lib64/ + ) set(CMAKE_PREFIX_PATH diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake index a12e1661a0..12b19866e0 100644 --- a/isis/cmake/FindBoost.cmake +++ b/isis/cmake/FindBoost.cmake @@ -11,7 +11,6 @@ find_path(BOOST_INCLUDE_DIR message("BOOST_INCLUDE_DIR = ${BOOST_INCLUDE_DIR}") - get_filename_component(BOOST_ROOT_INCLUDE_DIR "${BOOST_INCLUDE_DIR}" DIRECTORY) find_library(BOOST_ATOMIC_MT_LIBRARY @@ -120,19 +119,3 @@ find_library(PYTHON_LIBRARY find_library(C_LIBRARY NAMES c ) - -#tjw -#if(APPLE) -# file(READ "${BOOST_INCLUDE_DIR}/version.hpp" EXTRACT LIMIT 4 OFFSET 1103) -# string(SUBSTRING ${EXTRACT} 0 1 VERSION_MAJOR) -# string(SUBSTRING ${EXTRACT} 2 2 VERSION_MINOR) -# string(CONCAT VERSION_NUM ${VERSION_MAJOR} "." ${VERSION_MINOR}) -#else(APPLE) -# get_version(${BOOST_ATOMIC_MT_LIBRARY} VERSION_NUM) -#endif(APPLE) - -#message("BOOST FOUND VERSION = ${VERSION_NUM}") - -#if(VERSION_NUM VERSION_LESS Boost_FIND_VERSION) -# message(FATAL_ERROR "Boost version is too old (${VERSION_NUM}). Use ${Boost_FIND_VERSION} or higher.") -#endif(VERSION_NUM VERSION_LESS Boost_FIND_VERSION) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index e7b390f05f..ed19dc87da 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -13,11 +13,3 @@ find_path(CSPICE_INCLUDE_DIR find_library(CSPICE_LIBRARY NAMES cspice ) - -string(REGEX MATCH "^(/([a-z or A-Z or 0-9])*)*" MY_PATH ${CSPICE_LIBRARY}}) -file(GLOB FOUND_FILES - "${MY_PATH}.*[0-9]**.a" -) -get_filename_component(VERSION_FILE "${FOUND_FILES}" NAME) - -get_filename_component(CSPICE_ROOT_INCLUDE_DIR "${CSPICE_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake index 78110b9671..ece0a1b51f 100644 --- a/isis/cmake/FindEigen.cmake +++ b/isis/cmake/FindEigen.cmake @@ -13,5 +13,3 @@ find_path(EIGEN_ROOT_INCLUDE_DIR NAME Eigen PATH_SUFFIXES eigen eigen3 ) - -message("Eigen FOUND") diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake index 31b556041a..d3fa96579f 100644 --- a/isis/cmake/FindGMM.cmake +++ b/isis/cmake/FindGMM.cmake @@ -10,5 +10,3 @@ find_path(GMM_INCLUDE_DIR ) get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) - -message("GMM FOUND VERSION = UNABLE TO VERSION") diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake index 377ac2f98e..8a1675e5f2 100644 --- a/isis/cmake/FindGSL.cmake +++ b/isis/cmake/FindGSL.cmake @@ -18,17 +18,4 @@ find_library(GSL_CBLAS_LIBRARY NAMES gslcblas ) -if(APPLE) - string(REGEX MATCH "^(/([a-z or A-Z or 0-9])*)*" MY_PATH ${GSL_LIBRARY}}) - file(GLOB FOUND_FILES - "${MY_PATH}.*[0-9]**.dylib" - ) - get_filename_component(VERSION_FILE ${FOUND_FILES} NAME) - string(REGEX MATCH "[0-9][0-9]" VERSION_NUM ${VERSION_FILE}) -else(APPLE) - get_version(${GSL_LIBRARY} VERSION_NUM) -endif(APPLE) -message("GSL FOUND VERSION = ${VERSION_NUM}") -set(GSL LIBLIST ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY}) - get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index b5e97609c6..66930a9f75 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -14,21 +14,4 @@ find_library(GEOTIFF_LIBRARY NAMES geotiff ) -# DO SOMETHING DIFFERENT FOR APPLE -if(APPLE) - string(REGEX MATCH "^(/([a-z or A-Z or 0-9])*)*" MY_PATH ${GEOTIFF_LIBRARY}}) - file(GLOB FOUND_FILES - "${MY_PATH}.*[0-9]**.dylib" - ) - get_filename_component(VERSION_FILE ${FOUND_FILES} NAME) - string(REGEX MATCH "[0-9]" VERSION_NUM ${VERSION_FILE}) -else(APPLE) - get_version(${GEOTIFF_LIBRARY} VERSION_NUM) -endif(APPLE) -message("GEOTIFF FOUND VERSION = ${VERSION_NUM}") - get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) - -if(VERSION_NUM VERSION_LESS GeoTIFF_FIND_VERSION) - message(FATAL_ERROR "GeoTIFF version is too old (${VERSION_NUM}). Use ${GeoTIFF_FIND_VERSION} or higher.") -endif(VERSION_NUM VERSION_LESS GeoTIFF_FIND_VERSION) diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake index 68bea713af..fc39cc61e7 100644 --- a/isis/cmake/FindKakadu.cmake +++ b/isis/cmake/FindKakadu.cmake @@ -20,14 +20,4 @@ find_library(KAKADU_V_LIBRARY NAMES kdu_v79R ) -# message("KAKADU_LIBRARY = ${KAKADU_INCLUDE_DIR}") -get_filename_component(VERSION_FILE ${KAKADU_A_LIBRARY} NAME_WE) -# message("VERSION_FILE = ${VERSION_FILE}") -string(REGEX MATCH "[0-9][0-9]" VERSION_NUM ${VERSION_FILE}) -message("KAKADU FOUND VERSION = ${VERSION_NUM}") - get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) - -if(VERSION_NUM VERSION_LESS Kakadu_FIND_VERSION) - message(FATAL_ERROR "Kakadu version is too old (${VERSION_NUM}). Use ${Kakadu_FIND_VERSION} or higher.") -endif(VERSION_NUM VERSION_LESS Kakadu_FIND_VERSION) diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake index 24dc3f02da..db545dadb7 100644 --- a/isis/cmake/FindNN.cmake +++ b/isis/cmake/FindNN.cmake @@ -10,6 +10,3 @@ find_path(NN_INCLUDE_DIR ) get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) - -find_library(NN_LIBRARY NAMES nn) -message("NN FOUND VERSION = UNABLE TO VERSION") diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index 729a742aa1..8e0a5a96cb 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -20,4 +20,3 @@ find_library(PCL_OCTREE_LIBRARY NAMES pcl_octree) find_library(PCL_IO_LIBRARY NAMES pcl_io) get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) -message("PCL FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake index ab33d9b23f..4bb715b2ca 100644 --- a/isis/cmake/FindProtobuf.cmake +++ b/isis/cmake/FindProtobuf.cmake @@ -6,5 +6,3 @@ find_path(PROTOBUF_INCLUDE_DIR find_library(PROTOBUF_LIBRARY NAMES protobuf) get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) -get_version(${PROTOBUF_LIBRARY} VERSION_NUM) -message("PROTOBUF FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 6cb5ac9cd8..4e51c8625d 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -14,15 +14,4 @@ find_library(QWT_LIBRARY NAMES qwt ) -if(APPLE) - set(VERSION_PATH "${QWT_LIBRARY}/Versions/") - file(GLOB FOUND_FILES - "${VERSION_PATH}[0-9]" - ) - string(SUBSTRING ${FOUND_FILES} 63 64 VERSION_NUM) -else(APPLE) - get_version(${QWT_LIBRARY} VERSION_NUM) -endif(APPLE) -message("QWT FOUND VERSION = ${VERSION_NUM}") - get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 24a0b2c83f..4f06ce7cd1 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -14,10 +14,4 @@ find_library(SUPERLU_LIBRARY NAMES superlu_4.3 ) -# message("SUPERLU_LIBRARY = ${SUPERLU_INCLUDE_DIR}") -get_filename_component(VERSION_FILE ${SUPERLU_LIBRARY} NAME) -# message("VERSION_FILE = ${VERSION_FILE}") -string(REGEX MATCH "[0-9]\\.[0-9]" VERSION_NUM ${VERSION_FILE}) -message("SUPERLU FOUND VERSION = ${VERSION_NUM}") - get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake index b35f0d5945..81e5ce6b1b 100644 --- a/isis/cmake/FindTIFF.cmake +++ b/isis/cmake/FindTIFF.cmake @@ -6,6 +6,3 @@ find_path(TIFF_INCLUDE_DIR find_library(TIFF_LIBRARY NAMES tiff) # message("TIFF_LIBRARY = ${TIFF_LIBRARY}") - -get_version(${TIFF_LIBRARY} VERSION_NUM) -message("TIFF FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake index f35a71962b..bda175e202 100644 --- a/isis/cmake/FindTNT.cmake +++ b/isis/cmake/FindTNT.cmake @@ -12,6 +12,3 @@ find_path(TNT_INCLUDE_DIR ) get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) -file(READ "${TNT_INCLUDE_DIR}/tnt_version.h" EXTRACT LIMIT 6 OFFSET 1006) -string(SUBSTRING ${EXTRACT} 0 5 VERSION_NUM) -message("TNT FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake index b9c6b23681..f67e5b8b49 100644 --- a/isis/cmake/FindX11.cmake +++ b/isis/cmake/FindX11.cmake @@ -7,8 +7,3 @@ find_library(X11_LIBRARY NAMES X11 ) - -# message("X11_LIBRARY = ${X11_LIBRARY}") -set(VERSION_NUM "") -get_version(${X11_LIBRARY} VERSION_NUM) -message("X11 FOUND VERSION = ${VERSION_NUM}") diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake index a979813e41..bd4717b7e4 100644 --- a/isis/cmake/FindXercesC.cmake +++ b/isis/cmake/FindXercesC.cmake @@ -5,6 +5,3 @@ find_path(XERCESC_INCLUDE_DIR # message("XERCESC_INCLUDE_DIR = ${XERCESC_INCLUDE_DIR}") find_library(XercesC_LIBRARY NAMES xerces-c) -# message("XercesC lib = ${XercesC_LIBRARY}") -get_version(${XercesC_LIBRARY} VERSION_NUM) -message("XercesC FOUND VERSION = ${VERSION_NUM}") -- GitLab From 8c3750f5232d47a7f607d107945a85bccf2a36e2 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 1 Feb 2018 14:05:10 -0700 Subject: [PATCH 005/620] spacing on readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2dca47425c..29d6502725 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # ISIS3 [![Join the chat at https://gitter.im/USGS-Astrogeology/isis3_cmake](https://badges.gitter.im/USGS-Astrogeology/isis3_cmake.svg)](https://gitter.im/USGS-Astrogeology/isis3_cmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + Integrated Software for Imagers and Spectrometers ISIS3 public release site -- GitLab From 36b08ee9dcff559d6bf52426323c3d0fa784a081 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Fri, 2 Feb 2018 12:32:45 -0700 Subject: [PATCH 006/620] Fixed "File not found" issue with trying to copy README from 3rdparty. --- isis/cmake/InstallThirdParty.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake index 3dd63399ff..895fa32c9a 100644 --- a/isis/cmake/InstallThirdParty.cmake +++ b/isis/cmake/InstallThirdParty.cmake @@ -90,7 +90,6 @@ function(install_third_party) install_third_party_license() # Finish miscellaneous file installation - install(FILES "${CMAKE_SOURCE_DIR}/3rdParty/lib/README" - DESTINATION ${CMAKE_INSTALL_PREFIX}/3rdParty/lib) + file(WRITE "${CMAKE_INSTALL_PREFIX}/3rdParty/lib/README" "This directory contains O/S and hardware specific shared libraries needed\nto execute ISIS applications") endfunction() -- GitLab From d1680ba9c5023231c846e4fa72f2e466e331b267 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 5 Feb 2018 21:56:31 -0700 Subject: [PATCH 007/620] FindNN.cmake now also includes libraries --- isis/cmake/FindNN.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake index db545dadb7..bb8cd81385 100644 --- a/isis/cmake/FindNN.cmake +++ b/isis/cmake/FindNN.cmake @@ -9,4 +9,8 @@ find_path(NN_INCLUDE_DIR PATH_SUFFIXES nn ) +find_library(NN_LIBRARY + NAMES nn +) + get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) -- GitLab From 6dfd4ab674a893ca220645848bdfa87392144b3e Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Tue, 6 Feb 2018 09:33:44 -0700 Subject: [PATCH 008/620] Added scripts from svn repo. --- isis/scripts/IsisInlineDocumentBuild_mod.xsl | 50 ++ isis/scripts/fetchRequiredData.py | 645 +++++++++++++++++++ isis/scripts/finalizeInstalledOsxRpaths.py | 119 ++++ isis/scripts/fixOsxRpaths.py | 109 ++++ 4 files changed, 923 insertions(+) create mode 100644 isis/scripts/IsisInlineDocumentBuild_mod.xsl create mode 100644 isis/scripts/fetchRequiredData.py create mode 100644 isis/scripts/finalizeInstalledOsxRpaths.py create mode 100644 isis/scripts/fixOsxRpaths.py diff --git a/isis/scripts/IsisInlineDocumentBuild_mod.xsl b/isis/scripts/IsisInlineDocumentBuild_mod.xsl new file mode 100644 index 0000000000..bcf90f1f5a --- /dev/null +++ b/isis/scripts/IsisInlineDocumentBuild_mod.xsl @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + +# Set up Xalan's command-line option names. +XALAN := XALAN_BIN_LOCATION +XALAN_VALIDATE_OPTION := -v +XALAN_OUTFILE_OPTION := -o +XALAN_PARAM_OPTION := -p +XALAN_INFILE_OPTION := +XALAN_XSL_OPTION := + +docs: + echo " Constructing []" + + $(XALAN) $(XALAN_PARAM_OPTION) menuPath "'../../'" $(XALAN_PARAM_OPTION) filenameParam "''" $(XALAN_OUTFILE_OPTION) $(XALAN_INFILE_OPTION) .xml $(XALAN_XSL_OPTION) ../../build/IsisPrimaryPageBuild.xsl + $(XALAN) $(XALAN_PARAM_OPTION) menuPath "'../../'" $(XALAN_PARAM_OPTION) filenameParam "''" $(XALAN_OUTFILE_OPTION) $(XALAN_INFILE_OPTION) .xml $(XALAN_XSL_OPTION) ../../build/IsisSubPageBuild.xsl + + + + + + + + diff --git a/isis/scripts/fetchRequiredData.py b/isis/scripts/fetchRequiredData.py new file mode 100644 index 0000000000..38e6c608b0 --- /dev/null +++ b/isis/scripts/fetchRequiredData.py @@ -0,0 +1,645 @@ + +import sys, os + +def main(): + + # Hardcoded list of downloadable files needed to run tests + fileList = ''' +cassini/testData/CM_1540484927_1_001.ir.cub +mer/testData/mer.img +mer/testData/mer.lab +galileo/testData/1213r.img +messenger/kernels/ck/msgr20111020.bc +cassini/calibration/vims/RC19/solar-spectrum/ +base/templates/labels/ +galileo/calibration/conversionFactors_v001.sav +galileo/calibration/conversionFactors_v002.sav +galileo/calibration/weightTables_v001.sav +messenger/kernels/ck/msgr20111019.bc +lro/kernels/ck/lrolc_2009181_2009213_v02.bc +clementine1/calibration/nir/nirmodeflats/strip015_set4_061_065_33_a_n.cub +clementine1/calibration/uvvis/lub_comp_flat_long.cub +clementine1/calibration/uvvis/uvvisTemperature.tbl +newhorizons/calibration/target-wavelengths-expanded.csv +odyssey/testData/I50695002EDR.proj.reduced.cub +galileo/calibration/shutter/calibration.so02F.cub +messenger/testData/EW0089570936I.IMG +lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub +mer/calibration/REFPIXVAR_105.cub +mer/calibration/REFPIXVAR_110.cub +lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub +messenger/kernels/ck/msgr20111018.bc +lro/kernels/ck/lrolc_2009181_2009213_v02.bc +base/dems/ulcn2005_lpo_0004.cub +clementine1/calibration/nir/clemnircal.def +calibration/uvvis/uvvisTemperature.tbl +odyssey/testData/I56969027EDR.proj.reduced.cub +galileo/calibration/gain/redf.cal04.cub +galileo/calibration/gain/clrf.cal04.cub +mro/testData/ctx_pmoi_i_00003.bottom.cub +messenger/testData/EW0031592574E.IMG +lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub +cassini/calibration/darkcurrent/ +apollo15/templates/apolloPanFiducialFinder.pvl +base/dems/ulcn2005_lpo_0004.cub +clementine1/translations/ +lro/translations/ +viking1/translations/ +mgs/translations/ +mariner10/translations/ +mariner10/calibration/mariner_10_CLE_A_coef.cub +mariner10/calibration/mariner_10_ORA_A_coef.cub +mariner10/calibration/mariner_10_CLE_B_coef.cub +mariner10/calibration/mariner_10_ORA_B_coef.cub +mariner10/calibration/mariner_10_UV_B_coef.cub +clementine1/calibration/hires/lhd_flat.cub +clementine1/calibration/nir/nir.addflats.dat +clementine1/calibration/uvvis/lua_comp_flat_long.cub +clementine1/calibration/uvvis/lue_uncomp_flat_long.cub +messenger/translations/ +messenger/templates/ +lo/templates/ +chandrayaan1/bandBin/ +chandrayaan1/translations/ +chandrayaan1/kernels/ +mer/translations/ +mro/templates/ +mro/calibration/ +mgs/calibration/ +mer/calibration/ +newhorizons/translations/ +rolo/translations/ +mex/translations/ +kaguya/translations/ +hayabusa/translations/ +galileo/translations/ +dawn/translations/ +rosetta/translations/ +clementine1/kernels/ +viking1/kernels/ +viking2/kernels/ +apollo15/kernels/ +cassini/calibration/darkcurrent/ +hayabusa/kernels/ +mariner10/kernels/ +odyssey/calibration/ +odyssey/testData/I51718010EDR.crop.proj.reduced.cub +cassini/testData/vims2.cub +galileo/calibration/gll_gain.sav +lro/apps/mrf2pds/tsts/CH_Lev2/input/FSR_CDR_LV2_01921_0R_Lev2.cub +base/dems/ulcn2005_lpo_0004.cub +lro/kernels/ck/lrolc_2009181_2009213_v02.bc +messenger/kernels/ck/msgr20080110.bc +mro/kernels/spk/mro_psp7.bsp +messenger/kernels/ck/msgr20111017.bc +mer/translations/merInstrument.trn +mer/translations/merInstrument.trn +odyssey/testData/I25685003EDR.crop.proj.reduced.cub +odyssey/testData/I25685003EDR.crop.proj.reduced.cub +odyssey/testData/I25685003EDR.crop.proj.reduced.cub +cassini/testData/vims2.cub+100 +base/translations/ +mro/testData/ctx_pmoi_i_00003.bottom.cub +mrg_Global_512ppd_radius-demprep.cub +cassini/translations/ +chandrayaan1/translations/m3Instrument.trn +Clementine1/calibration/hires/lhd_flat.cub +clementine1/calibration/nir/nirorbitflats/nir_orbflat_284_a.cub +clementine1/calibration/uvvis/dark_5_15_96.cub +dawn/translations/dawnfcArchive.trn +dawn/translations/dawnvirArchive.trn +galileo/translations/galileoNIMSInstrument.trn +galileo/calibration/darkcurrent/2f8.dc04.cub +galileo/calibration/darkcurrent/4f8.dc04.cub +hayabusa/translations/amicaArchive.trn +hayabusa/translations/nirsArchive.trn +kaguya/translations/kaguyamiInstrument.trn +kaguya/translations/tcmapInstrument.trn +kaguya/translations/mimapBandBin.trn +base/translations/pdsExportImageImage.typ +lro/translations/lronacArchive.trn +lro/translations/lronacPdsLabelExport.trn +lro/translations/lrowacArchive.trn +lro/translations/lrowacPdsLabelExport.trn +lro/translations/mrflev1Archive.trn +lro/translations/mrflev2Archive.trn +base/translations/pdsExportImageImage.typ +mariner10/calibration/mariner_10_blem_A.cub +mariner10/calibration/mariner_10_blem_B.cub +mer/translations/merInstrument.trn +messenger/translations/mdisBandBin.trn +base/translations/pdsExportImageImage.typ +messenger/translations/mdisBandBin.trn +mex/translations/hrscBandBin.trn +mex/translations/hrscBandBin.trn +base/translations/pdsExportImageImage.typ +mro/calibration/psf/PSF_IR.cub +newhorizons/translations/leisaArchive_fit.trn +newhorizons/translations/lorriBandBin_fit.trn +rolo/translations/roloInstrument.trn +rosetta/translations/osirisBandBin.trn +viking2/reseaus/nominal.pvl +apollo15/kernels/pck/moon_assoc_me.tf +base/dems/ulcn2005_lpo_0004.cub +cassini/kernels/pck/cpck21Apr2005.tpc +lro/kernels/ck/lrolc_2009181_2009213_v02.bc +odyssey/kernels/sclk/ORB1_SCLKSCET.00200.tsc +odyssey/kernels/sclk/ORB1_SCLKSCET.00203.tsc +apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub +hayabusa/dawn/DEM/vesta512.bds +messenger/kernels/ck/msgr20080109.bc +messenger/kernels/ck/msgr20111016.bc +apollo15/templates/apolloPanFiducialFinder.pvl +base/dems/ulcn2005_lpo_0004.cub +mer/translations/merInstrument.trn +mer/translations/merInstrument.trn +odyssey/testData/I25685003EDR.crop.proj.reduced.cub +cassini/testData/vims2.cub+100 +base/translations/pdsExportImageImage.typ +mro/testData/ctx_pmoi_i_00003.bottom.cub +cassini/translations/narrowAngle.def +cassini/translations/wideAngle.def +chandrayaan1/translations/m3Instrument.trn +Clementine1/calibration/hires/lhd_flat.cub +clementine1/calibration/nir/nirorbitflats/nir_orbflat_284_a.cub +clementine1/calibration/uvvis/dark_5_15_96.cub +hayabusa/dawn/DEM/vesta512.bds +dawn/translations/dawnfcArchive.trn +dawn/translations/dawnvirArchive.trn +galileo/translations/galileoNIMSInstrument.trn +galileo/calibration/darkcurrent/2f8.dc04.cub +galileo/calibration/darkcurrent/4f8.dc04.cub +hayabusa/translations/amicaArchive.trn +hayabusa/translations/nirsArchive.trn +kaguya/translations/kaguyamiInstrument.trn +kaguya/translations/tcmapInstrument.trn +kaguya/translations/mimapBandBin.trn +base/translations/pdsExportImageImage.typ +cassini/translations/narrowAngle.def +lro/translations/lronacArchive.trn +lro/translations/lronacPdsLabelExport.trn +lro/translations/lrowacArchive.trn +lro/translations/lrowacPdsLabelExport.trn +lro/translations/mrflev1Archive.trn +lro/translations/mrflev2Archive.trn +base/translations/pdsExportImageImage.typ +mariner10/calibration/mariner_10_blem_A.cub +mariner10/calibration/mariner_10_blem_B.cub +mer/translations/merInstrument.trn +messenger/translations/mdisBandBin.trn +base/translations/pdsExportImageImage.typ +messenger/translations/mdisBandBin.trn +mex/translations/hrscBandBin.trn +base/translations/pdsExportImageImage.typ +mro/calibration/psf/PSF_IR.cub +newhorizons/translations/leisaArchive_fit.trn +newhorizons/translations/lorriBandBin_fit.trn +rolo/translations/roloInstrument.trn +rosetta/translations/osirisBandBin.trn +rosetta/translations/osirisBandBin.trn +viking2/reseaus/nominal.pvl +apollo15/calibration/METRIC_flatfield.cub +apollo15/calibration/ApolloPanFiducialMark.cub +base/dems/ulcn2005_lpo_0004.cub +mer/translations/merStructure.trn +newhorizons/calibration/target-wavelengths-expanded.csv. +odyssey/testData/I10047011EDR.proj.reduced.cub +viking1/reseaus/vo1.visb.template.cub +cassini/testData/vims1.cub +base/translations/pdsExportRootGen.typ +mro/testData/ctx_pmoi_i_00003.bottom.cub +Apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub +base/templates/maps/polarstereographic.map +base/templates/maps/simplecylindrical.map +cassini/translations/cassiniIss.trn +cassini/translations/vimsPds.trn +chandrayaan1/translations/m3Archive.trn +clementine1/translations/clementine.trn +Clementine1/calibration/hires/lhd_flat.cub +clementine1/calibration/nir/newnir_flat_a.cub +clementine1/calibration/uvvis/uvvis.def +base/templates/cnet_validmeasure/validmeasure.def +base/templates/cnetref/cnetref_nooperator.def +base/templates/cnetref/cnetref_operator.def +base/templates/cnetref/cnetref_nooperator.def +base/templates/cnetstats/cnetstats.def +hayabusa/dawn/DEM/vesta512.bds +dawn/translations/dawnfcBandBin.trn +dawn/translations/dawnvirBandBin.trn +dawn/translations/dawnvirBandBin.trn +galileo/translations/galileoNIMSArchive.trn +galileo/translations/galileoSsi.trn +galileo/calibration/gll_dc.sav +hayabusa/translations/amicaBandBin.trn +hayabusa/translations/nirsInstrument.trn +kaguya/translations/kaguyamiArchive.trn +kaguya/translations/tcmapBandBin.trn +base/translations/pdsExportRootGen.typ +cassini/translations/cissua2isis.trn +lro/translations/lronacInstrument.trn +lro/translations/pdsExportRootGen.typ +lro/translations/lrowacInstrument.trn +lro/translations/pdsExportRootGen.typ +lro/translations/mrflev1BandBin.trn +lro/translations/mrflev2BandBin.trn +lro/translations/mrfExportRoot.typ +mariner10/reseaus/mar10VenusNominal.pvl +mariner10/translations/mariner10isis2.trn +mariner10/calibration/mariner_10_A_dc.cub +mariner10/calibration/mariner_10_B_dc.cub +mariner10/reseaus/mar10b.template.cub +mer/translations/merStructure.trn +messenger/translations/mdisInstrument.trn +messenger/translations/mdisInstrument.trn +base/translations/pdsExportRootGen.typ +messenger/testData/EW0031509051D.cub +messenger/testData/EN0089576657M.IMG +messenger/translations/mdisInstrument.trn +mex/translations/hrscInstrument.trn +mro/calibration/ctxFlat_0001.cub +mro/calibration/HiRISE_Gain_Drift_Correction_Bin2.0001.csv +mro/calibration/HiRISE_Gain_Drift_Correction_Bin4.0001.csv +mro/calibration/HiccdstitchOffsets.def +base/translations/pdsExportRootGen.typ +mro/calibration/hijitreg.p1745.s3070.def +output/PSP_007556_2010_RED4.balance.cropped.cub +mro/calibration/psf/PSF_BG.cub +near/translations/nearImportPdsLabel.trn +newhorizons/translations/leisaInstrument_fit.trn +newhorizons/translations/lorriInstrument_fit.trn +newhorizons/translations/mvicInstrument_fit.trn +rolo/translations/roloMapping.trn +rosetta/translations/osirisArchive.trn +viking1/reseaus/nominal.pvl +iking2/reseaus/nominal.pvl +voyager1/calibration/voylin.pvl +apollo15/kernels/pck/moon_080317.tf +viking1/kernels/sclk/vo1_fsc.tsc +base/dems/ulcn2005_lpo_0004.cub +cassini/kernels/fk/cas_v40.tf +lro/kernels/ck/lrolc_2009181_2009213_v02.bc +lro/kernels/spk/fdf29r_2009182_2009213_v01.bsp +odyssey/kernels/fk/m01_v29.tf +cassini/kernels/sclk/cas00110.tsc +hayabusa/dawn/DEM/vesta512.bds +odyssey/kernels/sclk/ORB1_SCLKSCET.00174.tsc +galileo/kernels/sclk/mk00062b.tsc +messenger/kernels/ck/msgr20111015.bc +lro/kernels/spk/fdf29r_2012275_2012306_v01.bsp +apollo15/kernels/tspk/de421.bsp +viking1/kernels/sclk/vo1_fict.tsc +base/dems/ulcn2005_lpo_0004.cub +viking1/kernels/ck/vo1_sedr_ck2.bc +cassini/kernels/ck/05047_05052ra.bc +mro/kernels/ck/mro_sc_psp_061114_061120.bc +lro/kernels/tspk/de421.bsp +odyssey/kernels/ck/m01_sc_map7.bc +odyssey/kernels/ck/m01_sc_map5_rec_nadir.bc +odyssey/kernels/sclk/ORB1_SCLKSCET.00160.tsc +cassini/kernels/iak/vimsAddendum02.ti +viking1/kernels/sclk/vo1_fict.tsc +Apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub +cassini/kernels/sclk/cas00106.tsc +clementine1/kernels/fk/clem_v10.tf +clementine1/kernels/iak/nirAddendum002.ti +hayabusa/dawn/DEM/vesta512.bds +odyssey/kernels/sclk/ORB1_SCLKSCET.00174.tsc +galileo/kernels/sclk/mk00062b.tsc +messenger/kernels/ck/msgr20111014.bc +apollo15/kernels/tspk/moon_pa_de421_1900-2050.bpc +viking1/kernels/iak/vikingAddendum003.ti +base/dems/ulcn2005_lpo_0004.cub +viking1/kernels/spk/vik1_ext.bsp +cassini/kernels/spk/050414RB_SCPSE_05034_05060.bsp +mro/kernels/spk/mro_psp1.bsp +lro/kernels/tspk/moon_pa_de421_1900-2050.bpc +odyssey/kernels/spk/m01_map7.bsp +odyssey/kernels/spk/m01_map5.bsp +odyssey/kernels/iak/themisAddendum003.ti +cassini/kernels/pck/cpck19Sep2007.tpc +mgs/kernels/iak/mocAddendum003.ti +viking1/kernels/fk/vo1_v10.tf +Apollo/DEM/LRO_LOLA-KaguyaLPF3-mrg_Global_512ppd_radius-demprep.cub +cassini/kernels/pck/cpck01Dec2006.tpc +base/dems/Ceres_Dawn_FC_HAMO_DTM_DLR_Global_60ppd_Oct2016_prep.cub +cassini/kernels/pck/cpck01Dec2006.tpc +mgs/kernels/sclk/MGS_SCLKSCET.00060.tsc +hayabusa/dawn/DEM/vesta512.bds +odyssey/kernels/iak/themisAddendum003.ti +galileo/kernels/iak/ssiAddendum004.ti +mro/kernels/spk/mro_psp22.bsp +messenger/kernels/ck/msgr20111013.bc +mro/kernels/spk/mro_psp22.bsp +base/templates/autoreg/findrx.def +viking2/reseaus/vo2.visb.template.cub +viking2/calibration/vik2evenMask.cub +voyager1/kernels/ +voyager1/calibration/NA1CLR.CAL.cub +voyager1/calibration/NA1OFF.CAL.cub +voyager1/calibration/voycal.pvl +voyager1/reseaus/vg1naMasterReseaus.pvl +voyager2/translations/ +voyager2/kernels/ +voyager2/reseaus/nominal.pvl +base/templates/maps/sinusoidal.map +base/applications/noprojInstruments001.pvl +base/applications/noprojInstruments002.pvl +base/applications/noprojInstruments003.pvl +messenger/kernels/ck/1018221575_197834_mdis_pivot_pvtres.bc +messenger/kernels/ck/1018290560_1175_mdis_atthist.bc +messenger/kernels/ck/msgr20120630.bc +messenger/kernels/ck/msgr20120629.bc +messenger/kernels/ck/msgr20120628.bc +messenger/kernels/ck/msgr20120627.bc +messenger/kernels/ck/msgr20120626.bc +messenger/kernels/ck/msgr20120625.bc +messenger/kernels/ck/msgr20120624.bc +messenger/kernels/ck/msgr20120623.bc +messenger/kernels/ck/msgr20120622.bc +messenger/kernels/ck/msgr20120621.bc +messenger/kernels/pck/kernels.0001.db +messenger/kernels/pck/kernels.0002.db +messenger/kernels/pck/kernels.0003.db +messenger/kernels/pck/kernels.0004.db +messenger/kernels/tspk/ +messenger/testData/EW0131770376G.equi.cub +mgs/calibration +mro/kernels/fk/ +mro/kernels/ik/ +mro/kernels/sclk/ +base/kernels/lsk/ +base/kernels/pck/ +base/kernels/spk/de118.bsp +base/kernels/spk/de245.bsp +base/kernels/spk/de405.bsp +base/testData/kernels/de405.bsp +base/kernels/spk/kernels.0001.db +base/kernels/spk/kernels.0002.db +base/testData/kernels/moc.bsp +base/testData/kernels/naif0007.tls +base/testData/kernels/moc.bc +base/testData/kernels/pck00006.tpc +base/testData/kernels/mocSpiceUnitTest.ti +base/testData/kernels/mocAddendum.ti +base/testData/kernels/MGS_SCLKSCET.00045.tsc +base/testData/kernels/moc13.ti +base/kernels/pck/pck00009.tpc +base/kernels/lsk/naif0009.tls +base/kernels/spk/de405.bsp +base/kernels/lsk/naif0009.tls +base/kernels/pck/pck00009.tpc +base/dems/kernels.0003.db +base/dems/kernels.0004.db +base/dems/kernels.0005.db +mgs/testData/ab102401.cub +base/templates/labels/CubeFormatTemplate.pft +mariner10/testData/0027399_clean_equi.cub +mgs/testData/ab102401.lev2.cub +odyssey/testData/I00824006RDR.lev2.cub +base/testData/blobTruth.cub +base/testData/isisTruth.cub +base/testData/isisTruth2.cub +base/testData/xmlTestLabel.xml +base/testData/f319b18_ideal.cub +base/translations/MissionName2DataDir.trn +base/translations/MissionName2DataDir.trn +messenger/testData/EW0211286081G.lev1.cub +messenger/testData/EW0131770376G.equi.cub +base/translations/NaifErrors.trn +mariner10/testData/0027399_clean_equi.cub +dawn/testData/FC21B0001010_09049002212F5D.cub +base/testData/LRONAC_M139722912RE_cropped.cub +base/dems/molaMarsPlanetaryRadius0004.cub +base/dems/molaMarsPlanetaryRadius0005.cub +viking2/testData/f348b26.cub +viking2/kernels/sclk/vo2_fict.tsc +viking2/kernels/iak/vikingAddendum003.ti +clementine1/testData/lna1391h.cub +base/testData/ab102401_ideal.cub +lo/testData/3133_h1.cub +mgs/kernels/ik/moc20.ti +mgs/kernels/iak/mocAddendum004.ti +mgs/kernels/sclk/MGS_SCLKSCET.00061.tsc +viking2/kernels/sclk/vo2_fsc.tsc +hayabusa/kernels/dsk/hay_a_amica_5_itokawashape_v1_0_512q.bds +hayabusa/kernels/pck/itokawa_gaskell_n3.tpc +hayabusa/kernels/tspk/de403s.bsp +hayabusa/kernels/tspk/sb_25143_140.bsp +hayabusa/kernels/spk/hay_jaxa_050916_051119_v1n.bsp +hayabusa/kernels/spk/hay_osbj_050911_051118_v1n.bsp +hayabusa/kernels/ck/hayabusa_itokawarendezvous_v02n.bc +hayabusa/kernels/fk/hayabusa_hp.tf +hayabusa/kernels/fk/itokawa_fixed.tf +hayabusa/kernels/ik/amica31.ti +hayabusa/kernels/iak/amicaAddendum001.ti +hayabusa/kernels/sclk/hayabusa.tsc +base/kernels/spk/de405.bsp +mgs/kernels/spk/mgs_ab1.bsp +mgs/testData/ab102402.lev2.cub +odyssey/testData/I02609002RDR.lev2.cub +mgs/kernels/ck/mgs_sc_ab1.bc +viking2/kernels/spk/vo2_rcon.bsp +apollo15/testData/AS15-M-0533.cropped.cub +apollo15/testData/TL.cub +cassini/testData/W1294561261_1.c2i.nospice.cub +cassini/testData/N1525100863_2.cub +cassini/testData/W1525116136_1.cub +odyssey/testData/I01523019RDR.lev2.cub +odyssey/testData/I01523019RDR.lev2.cub +messenger/testData/EW0131770381F.equi.cub +mariner10/testData/0166613_clean_equi.cub +lo/testData/3133_h1.cropped.cub +lo/testData/3083_med_tohi.cub +mgs/testData/fha00491.lev1.cub +mro/testData/frt0001cfd8_07_if124s_trr3_b24.cub +mro/testData/ctx_pmoi_i_00003.bottom.cub +mro/testData/PSP_001446_1790_BG12_0.cub +mro/testData/P12_005911_3396_MA_00N009W.cropped.cub +mro/kernels/ck/mro_crm_psp_080101_080131.bc +mro/kernels/ck/mro_sc_psp_080108_080114.bc +mro/kernels/spk/mro_psp6.bsp +mro/kernels/ck/mro_sc_psp_080304_080310.bc +mro/kernels/iak/hiriseAddendum006.ti +cassini/testData/N1355543510_1.c2i.nospice.cub +base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub +cassini/testData/CM_1515951157_1.ir.cub +clementine1/testData/lub5992r.292.lev1.phot.cub +messenger/testData/EW0213634118G.lev1.cub +galileo/testData/1213r.cub +lo/testData/3083_med_raw.cub +base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub +lo/testData/4008_med_res.cropped.cub +mro/testData/ctx_pmoi_i_00003.top.cub +base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub +lro/kernels/pck/moon_080317.tf +viking2/kernels/ck/vo2_sedr_ck2.bc +base/dems/ldem_128ppd_Mar2011_clon180_radius_pad.cub +mariner10/kernels/iak/mariner10Addendum002.ti +base/kernels/fk/lunarMeanEarth001.tf +viking2/kernels/fk/vo2_v10.tf +lro/kernels/pck/moon_assoc_me.tf +mro/kernels/iak/mroctxAddendum004.ti +cassini/testData/N1536363784_1.c2i.spice.cub +apollo16/testData/AS16-M-0533.reduced.cub +lo/testData/4164H_Full_mirror.cub +lo/testData/5072_med_res.cropped.cub +cassini/testData/N1313633704_1.c2i.nospice.cub +clementine1/kernels/iak/uvvisAddendum003.ti +clementine1/kernels/ck/clem_5sc.bck +apollo15/kernels/iak/apolloPanAddendum001.ti +mariner10/kernels/sclk/mariner10.0001.tsc +hayabusa/testData/st_2530292409_v.cub +lo/testData/5006_high_res_1.cropped.cub +cassini/testData/CM_1514390782_1.ir.cub +clementine1/kernels/sclk/dspse002.tsc +cassini/kernels/pck/cpck14Feb2006.tpc +apollo15/testData/BL.cub +mro/testData/G02_019106_1390_XN_41S257W.cub +apollo17/testData/AS17-M-0543.reduced.cub +cassini/kernels/iak/vimsAddendum03.ti +base/dems/ulcn2005_lpo_0004.cub +base/dems/molaMarsPlanetaryRadius0001.cub +apollo15/testData/M.cub +mro/apps/hiequal/tsts/default/input/RED0.cub +cassini/kernels/sclk/cas00130.tsc +cassini/kernels/sclk/cas00112.tsc +cassini/testData/CM_1514390782_1.vis.cub +cassini/testData/CM_1515945709_1.ir.cub +cassini/kernels/pck/cpck21Mar2006.tpc +cassini/testData/CM_1515945709_1.vis.cub +cassini/testData/C1465336166_1.ir.cub +apollo15/testData/TR.cub +apollo15/testData/BR.cub +mgs/testData/ab102401.cub +base/templates/labels/MappingGroupKeywords.pft +odyssey/testData/I00824006RDR.lev2.cub +odyssey/testData/I56632006EDR.lev2.cub +odyssey/testData/I02609002RDR.lev2.cub +odyssey/testData/I01523019RDR.lev2.cub +viking2/reseaus/vik2bMasterReseaus.pvl +mgs/testData/m0402852.cub +mariner10/reseaus/mar10aMasterReseaus.pvl +lo/testData/3133_h1.cub +base/translations/NaifErrors.trn +base/testData/blobTruth.cub +base/testData/isisTruthNoSpacecraftName.cub +base/testData/isisTruthNoInstrumentId.cub +lo/testData/5106_h1.cropped.cub +lo/testData/5106_h2.cropped.cub +mgs/calibration/MGSC_1246_wago.tab +mgs/calibration/MGSC_1290_wago.tab +mgs/calibration/MGSC_1428_wago.tab +mgs/calibration/MGSC_1546_wago.tab +mgs/calibration/MGSC_1578_wago.tab +clementine1/kernels/ck/clem_ulcn2005_type2_1sc.bc +clementine1/kernels/fk/clem_v11.tf +clementine1/kernels/sclk/dspse002.tsc +clementine1/kernels/spk/SPKMERGE_940219_940504_CLEMV001b.bsp +clementine1/kernels/iak/uvvisAddendum003.ti +base/templates/maps/equirectangular.map +newhorizons/calibration/NHSmileDefinitionNew.cub +messenger/kernels/tspk/de423s.bsp +messenger/kernels/tspk/kernels.0001.db +messenger/kernels/tspk/kernels.0002.db +messenger/kernels/tspk/kernels.0003.db +messenger/kernels/spk/msgr_20040803_20150328_od332sc_0.bsp +messenger/kernels/spk/msgr_20040803_20150430_od431sc_2.bsp +messenger/kernels/sclk/messenger_1930.tsc +base/translations/pdsProjectionLineSampToXY.def +dawn/kernels/fk/ +dawn/kernels/iak/ +dawn/kernels/ik/ +dawn/kernels/pck/ +dawn/kernels/sclk/ +dawn/kernels/tspk/ +mro/kernels/fk/ +mro/kernels/iak/ +mro/kernels/ik/ +mro/kernels/sclk/ +cassini/kernels/spk/050105RB_SCPSE_04247_04336.bsp +newhorizons/kernels/fk/ +newhorizons/kernels/iak/ +newhorizons/kernels/ik/ +newhorizons/kernels/pck/ +newhorizons/kernels/sclk/ +newhorizons/kernels/spk/ +lro/kernels/ck/lrolc_2009243_2009274_v01.bc +mro/kernels/spk/mro_psp8.bsp +newhorizons/kernels/tspk/de413.bsp +lro/kernels/ck/moc42r_2009243_2009274_v08.bc +mro/kernels/ck/mro_sc_psp_080923_080929.bc +newhorizons/kernels/tspk/jup260.bsp +near/kernels/fk/ +newhorizons/kernels/ck/merged_nhpc_2007_v006.bc +''' + + dbList = ''' +newhorizons/kernels/ck/ +near/kernels/ck/ +dawn/kernels/ck/ +dawn/kernels/pck/ +mro/kernels/ +messenger/kernels/ +messenger/kernels/spk/ +apollo15/kernels/ +base/translations/ +lo/translations/ +mgs/translations/ +odyssey/translations/ +odyssey/kernels/ck/ +odyssey/kernels/ik/ +odyssey/kernels/iak/ +odyssey/kernels/sclk/ +odyssey/kernels/fk/ +odyssey/kernels/spk/ +mro/translations/ +voyager1/kernels/ +mgs/kernels/ +cassini/kernels/ +cassini/calibration/ +lro/calibration/ +lro/kernels/ +messenger/calibration/ +newhorizons/kernels/ +base/dems/ +base/translations/ +''' + + fileList = fileList.split() + dbList = dbList.split() + + # TODO: Input argument + installDir = '/home/smcmich1/release_isis/isis3data/' + #installDir = '/Users/smcmich1/release_isis/isis3data/' + + cmd = 'rsync -azv --delete --partial ' + remote = 'isisdist.astrogeology.usgs.gov::isis3data/data/' + + for f in fileList: + + # Set up commands + target = installDir + f + + print target + + # Don't refetch existing files + if os.path.exists(target) and (not os.path.isdir(target)): + continue + + # Fetch the file + fullCmd = cmd + remote + f +' '+ target + print fullCmd + os.system('mkdir -p ' + os.path.dirname(target)) + os.system(fullCmd) + + # This is for folders where we want just the small files + for f in dbList: + fullCmd = (cmd + remote + f+' --max-size=3m ' + installDir+f) + print fullCmd + os.system('mkdir -p '+ installDir +f) + os.system(fullCmd) + + + +if __name__ == '__main__': + sys.exit( main() ) diff --git a/isis/scripts/finalizeInstalledOsxRpaths.py b/isis/scripts/finalizeInstalledOsxRpaths.py new file mode 100644 index 0000000000..1658aa8ba4 --- /dev/null +++ b/isis/scripts/finalizeInstalledOsxRpaths.py @@ -0,0 +1,119 @@ + +''' This script will replace all "long" library paths such as +@rpath/a/long/path/libExample.dylib with shortened paths such as +@rpath/libExample.dylib. It does not change the rpaths themselves, +just the references to them. +''' + +import os, sys, subprocess, stat + +def fixOneFile(inputPath, resetRpath): + '''Correct a single file''' + + # Get list of libraries loaded by this library + cmd = ['otool', '-l', inputPath] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) + otoolOutput, err = p.communicate() + + #print otoolOutput + + # Search for abs paths to the USGS hard coded location + needRpath = False + lines = otoolOutput.split() + numUpdates = 0 + for line in lines: + + # Keep track of whether the next change step is for an ID or a LOAD operation. + if line == 'LC_ID_DYLIB': + idLine = True + if line == 'LC_LOAD_DYLIB': + idLine = False + + # Only change lines containing @rpath + if '@rpath' not in line: + continue + + # Trim off just the library name and prepend @rpath + #print line + if 'framework' in line: # Need whole framework part + posF = line.rfind('framework') + pos = line.rfind('/', 0, posF) + else: # Simple case + pos = line.rfind('/') + end = line[pos:] + + #print 'CROPPED: ' + end + #continue + + newPath = '@rpath' + end + + if newPath == line: # Skip already correct lines + continue + + # Replace the line + if idLine: # Handle LC_ID_DYLIB lines + cmd = ' '.join(['install_name_tool', '-id', newPath, inputPath]) + else: # Handle LC_LOAD_DYLIB lines + cmd = ' '.join(['install_name_tool', '-change', line, newPath, inputPath]) + #print cmd + os.system(cmd) + numUpdates += 1 + + # TODO: Delete any existing rpaths to keep things clean! + # If this option is set, reset the RPATH to look only in the local folder. + if resetRpath: + cmd = 'install_name_tool -add_rpath ./ ' + inputPath + #print cmd + os.system(cmd) + numUpdates += 1 + + return numUpdates + +def main(): + '''Main program corrects all files in a folder''' + + # Check input arguments + usage = 'python finalizeInstalledOsxRpaths.py folder [resetRpath]' + if len(sys.argv) < 2: + print usage + return -1 + + inputFolder= sys.argv[1] + resetRpath = False + if len(sys.argv) == 3: + resetRpath = True + if not os.path.exists(inputFolder): + print 'Input folder '+inputFolder+' does not exist!' + return -1 + + # Fix all of the .dylib files in the given folder + files = os.listdir(inputFolder) + for f in files: + + fullPath = os.path.join(inputFolder, f) + + isBinary = (os.path.isfile(fullPath) and (stat.S_IXUSR & os.stat(fullPath)[stat.ST_MODE])) + isLib = ('.dylib' in f) + isFrame = 'framework' in f + + # Dig into framework folders to correct the rpaths in the underlying lib file + if isFrame: + name = f.replace('.framework', '') + path = f+'/Versions/Current/'+name + fullPath = os.path.join(inputFolder, path) + isLib = True + + if isBinary or isLib: + #print fullPath + numUpdates = fixOneFile(fullPath, resetRpath) + print f + ' --> ' + str(numUpdates) + ' changes made.' + #raise Exception('DEBUG') + + + +# Execute main() when called from command line +if __name__ == "__main__": + sys.exit(main()) + + + diff --git a/isis/scripts/fixOsxRpaths.py b/isis/scripts/fixOsxRpaths.py new file mode 100644 index 0000000000..a7e0541e30 --- /dev/null +++ b/isis/scripts/fixOsxRpaths.py @@ -0,0 +1,109 @@ + +# TODO: Clean up this file! + +import os, sys, subprocess + +# Constants + + +libFolders = ['/Users/smcmich1/isis_cmake/opt/usgs/v006/3rdParty/lib', + '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/lib', + '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/libexec'] +#individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/QtCore.framework/Versions/5/QtCore'] + +qtLibs = ('QtXmlPatterns QtXml QtNetwork '+ + 'QtSql QtGui QtCore QtSvg '+ + 'QtTest QtWebKit QtOpenGL '+ + 'QtConcurrent QtDBus '+ + 'QtMultimedia QtMultimediaWidgets '+ + 'QtNfc QtPositioning QtPrintSupport '+ + 'QtQml QtQuick QtQuickParticles '+ + 'QtQuickTest QtQuickWidgets QtScript '+ + 'QtScriptTools QtSensors QtSerialPort '+ + 'QtWebKitWidgets QtWebSockets QtWidgets '+ + 'QtTest QtWebChannel QtWebEngine QtWebEngineCore QtWebEngineWidgets').split() +individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/'+x+'.framework/Versions/5/'+x for x in qtLibs] +print individualLibs + +usgFolder = '/opt/usgs/v006/' + +rpathFolder = '/Users/smcmich1/isis_cmake/' +ignoreFolder = '/Users/smcmich1/isis_cmake/' + + +# Process one file + +def fixFile(fullPath, libName): + '''Fix the paths of a single library file''' + + # Get list of libraries loaded by this library + cmd = ['otool', '-l', fullPath] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) + otoolOutput, err = p.communicate() + + #print otoolOutput + + # Search for abs paths to the USGS hard coded location + needRpath = False + lines = otoolOutput.split() + for line in lines: + + # Some lines need to be skipped + if (usgFolder not in line) or (ignoreFolder in line) or ('@rpath' in line): + continue + + needRpath = True + + # Set up the command to fix this line + if libName in line: # Hande LC_ID_DYLIB lines + cmd = ' '.join(['install_name_tool', '-id', '@rpath'+line, fullPath]) + else: # Handle LC_LOAD_DYLIB lines + cmd = ' '.join(['install_name_tool', '-change', line, '@rpath'+line, fullPath]) + print cmd + os.system(cmd) + + # If any paths were changed, add the rpath. + if needRpath: + # Make sure this rpath is not there + cmd = ' '.join(['install_name_tool', '-delete_rpath', '/opt/usgs/v006/ports/lib', fullPath]) + print cmd + os.system(cmd) + # Add the correct rpath + cmd = ' '.join(['install_name_tool', '-add_rpath', rpathFolder, fullPath]) + print cmd + os.system(cmd) + print 'Fixed file ' + fullPath + +# Main function + +for folder in libFolders: + + libs = os.listdir(folder) + for lib in libs: + + # Only modify .dylib files + if 'dylib' not in lib: + continue + + # Get the full path + fullPath = os.path.join(folder, lib) + #print lib + + fixFile(fullPath, lib) + + +for fullPath in individualLibs: + + ## Only modify .dylib files + #if 'dylib' not in lib: + # continue + + # Get the full path + libName = os.path.basename(fullPath) + #print lib + + fixFile(fullPath, libName) + +print 'Finished modifying files!' + + -- GitLab From 83f4f8ba9fc6d5fe7bb00133bdcf3acf72f93b35 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 12:52:16 -0700 Subject: [PATCH 009/620] who cares --- isis/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index b3659f9eac..ea14a0411b 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -19,7 +19,6 @@ list(APPEND CMAKE_INCLUDE_PATH /usgs/pkgs/local/v007/include/xercesc/xercesc-3.1.2/ /usgs/pkgs/local/v007/include/tiff/tiff-4.0.5/ /usr/lib64/ - ) set(CMAKE_PREFIX_PATH -- GitLab From 7727badd6394e4b434620878212c94fcaa1eeee5 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 14:24:02 -0700 Subject: [PATCH 010/620] removing library version flags (they don't do anything) --- isis/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index ea14a0411b..aaf6e881a0 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -68,11 +68,6 @@ set(PACKAGE_VERSION ${VERSION}) # Full name and version number set(PACKAGE_STRING "${PACKAGE_NAME} ${VERSION}") -# Other release information -set(VERSION_DATE "2017-04-24") -set(THIRD_PARTY_LIBS_VERSION "v007") -set(RELEASE_STAGE "alpha") # (alpha, beta, stable) - # Define to the address where bug reports for this package should be sent. set(PACKAGE_BUGREPORT "https://isis.astrogeology.usgs.gov/fixit") -- GitLab From 1fbc007a3dbd17d5bb8beb927366466fa125f836 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 14:29:10 -0700 Subject: [PATCH 011/620] added output to findbullet --- isis/cmake/FindBullet.cmake | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index d6390d8615..89427f5726 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -22,3 +22,14 @@ find_library(BULLET3_COMMON_LIBRARY NAMES Bullet3Collision) find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) + +message( status "BULLET OPENCL" ${BULLET_OPENCL_LIBRARY} ) +message( status "BULLET SOFTBODY" ${BULLET_SOFTBODY_LIBRARY}) +message( status "BULLET INVERSE DYNAMICS" ${BULLET_INVERSEDYNAMICS_LIBRARY} ) +message( status ${BULLET_DYNAMICS_LIBRARY} ) +message( status ${BULLET_COLLISION_LIBRARY} ) +message( status ${BULLET3_GEOMETRY_LIBRARY} ) +message( status ${BULLET3_DYNAMICS_LIBRARY} ) +message( status ${BULLET3_COLLISION_LIBRARY} ) +message( status ${BULLET3_COMMON_LIBRARY} ) +message( status ${BULLET3_LINEARMATH_LIBRARY} ) -- GitLab From 6f31a185786f76c7c5a5904a94739b0e35643da4 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 16:31:11 -0700 Subject: [PATCH 012/620] added status messages for find CSPICE --- isis/cmake/FindBullet.cmake | 14 +++++++------- isis/cmake/FindCSPICE.cmake | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index 89427f5726..9af67261b3 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -26,10 +26,10 @@ get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY message( status "BULLET OPENCL" ${BULLET_OPENCL_LIBRARY} ) message( status "BULLET SOFTBODY" ${BULLET_SOFTBODY_LIBRARY}) message( status "BULLET INVERSE DYNAMICS" ${BULLET_INVERSEDYNAMICS_LIBRARY} ) -message( status ${BULLET_DYNAMICS_LIBRARY} ) -message( status ${BULLET_COLLISION_LIBRARY} ) -message( status ${BULLET3_GEOMETRY_LIBRARY} ) -message( status ${BULLET3_DYNAMICS_LIBRARY} ) -message( status ${BULLET3_COLLISION_LIBRARY} ) -message( status ${BULLET3_COMMON_LIBRARY} ) -message( status ${BULLET3_LINEARMATH_LIBRARY} ) +message( status "BULLET DYNAMICS" ${BULLET_DYNAMICS_LIBRARY} ) +message( status "BULLET COLLISION" ${BULLET_COLLISION_LIBRARY} ) +message( status "BULLET GEOMETRY" ${BULLET3_GEOMETRY_LIBRARY} ) +message( status "BULLET3 DYNAMICS" ${BULLET3_DYNAMICS_LIBRARY} ) +message( status "BULLET3 COLLISION" ${BULLET3_COLLISION_LIBRARY} ) +message( status "BULLET3 COMMON" ${BULLET3_COMMON_LIBRARY} ) +message( status "BULLET3 LINEARMATH" ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index ed19dc87da..3ddd4d3652 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -13,3 +13,6 @@ find_path(CSPICE_INCLUDE_DIR find_library(CSPICE_LIBRARY NAMES cspice ) + +message( status "CSPICE INCLUDE" ${CSPICE_INCLUDE_DIR} ) +message( status "CSPICE LIB" ${CSPICE_LIBRARY} ) -- GitLab From a15fdd187f4c4ad1d9a28ce45f7fdf05665f6e17 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 16:50:45 -0700 Subject: [PATCH 013/620] added messages for Find Eigen and Embree --- isis/cmake/FindBullet.cmake | 20 ++++++++++---------- isis/cmake/FindCSPICE.cmake | 4 ++-- isis/cmake/FindEigen.cmake | 2 ++ isis/cmake/FindEmbree.cmake | 3 +++ 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index 9af67261b3..06f2992f59 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -23,13 +23,13 @@ find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) -message( status "BULLET OPENCL" ${BULLET_OPENCL_LIBRARY} ) -message( status "BULLET SOFTBODY" ${BULLET_SOFTBODY_LIBRARY}) -message( status "BULLET INVERSE DYNAMICS" ${BULLET_INVERSEDYNAMICS_LIBRARY} ) -message( status "BULLET DYNAMICS" ${BULLET_DYNAMICS_LIBRARY} ) -message( status "BULLET COLLISION" ${BULLET_COLLISION_LIBRARY} ) -message( status "BULLET GEOMETRY" ${BULLET3_GEOMETRY_LIBRARY} ) -message( status "BULLET3 DYNAMICS" ${BULLET3_DYNAMICS_LIBRARY} ) -message( status "BULLET3 COLLISION" ${BULLET3_COLLISION_LIBRARY} ) -message( status "BULLET3 COMMON" ${BULLET3_COMMON_LIBRARY} ) -message( status "BULLET3 LINEARMATH" ${BULLET3_LINEARMATH_LIBRARY} ) +message( "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) +message( "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) +message( "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) +message( "BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) +message( "BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) +message( "BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) +message( "BULLET3 DYNAMICS: " ${BULLET3_DYNAMICS_LIBRARY} ) +message( "BULLET3 COLLISION: " ${BULLET3_COLLISION_LIBRARY} ) +message( "BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) +message( "BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index 3ddd4d3652..513a3ced61 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -14,5 +14,5 @@ find_library(CSPICE_LIBRARY NAMES cspice ) -message( status "CSPICE INCLUDE" ${CSPICE_INCLUDE_DIR} ) -message( status "CSPICE LIB" ${CSPICE_LIBRARY} ) +message( "CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) +message( "CSPICE LIB: " ${CSPICE_LIBRARY} ) diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake index ece0a1b51f..0f278c2f94 100644 --- a/isis/cmake/FindEigen.cmake +++ b/isis/cmake/FindEigen.cmake @@ -13,3 +13,5 @@ find_path(EIGEN_ROOT_INCLUDE_DIR NAME Eigen PATH_SUFFIXES eigen eigen3 ) + +message( "EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake index a424265047..5fcdbf4be4 100644 --- a/isis/cmake/FindEmbree.cmake +++ b/isis/cmake/FindEmbree.cmake @@ -15,3 +15,6 @@ find_library(EMBREE_LIBRARY ) get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY) + +message("EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) +message("EMBREE LIB: " ${EMBREE_LIBRARY}) -- GitLab From 40e462eac4ccf5c19c336ea69e888e1b2533b906 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 18:18:51 -0700 Subject: [PATCH 014/620] OSX rpath fix file py2->py3 print statements --- isis/scripts/finalizeInstalledOsxRpaths.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/isis/scripts/finalizeInstalledOsxRpaths.py b/isis/scripts/finalizeInstalledOsxRpaths.py index 1658aa8ba4..8a2b04854f 100644 --- a/isis/scripts/finalizeInstalledOsxRpaths.py +++ b/isis/scripts/finalizeInstalledOsxRpaths.py @@ -75,7 +75,7 @@ def main(): # Check input arguments usage = 'python finalizeInstalledOsxRpaths.py folder [resetRpath]' if len(sys.argv) < 2: - print usage + print(usage) return -1 inputFolder= sys.argv[1] @@ -83,7 +83,7 @@ def main(): if len(sys.argv) == 3: resetRpath = True if not os.path.exists(inputFolder): - print 'Input folder '+inputFolder+' does not exist!' + print('Input folder '+inputFolder+' does not exist!') return -1 # Fix all of the .dylib files in the given folder @@ -91,7 +91,7 @@ def main(): for f in files: fullPath = os.path.join(inputFolder, f) - + isBinary = (os.path.isfile(fullPath) and (stat.S_IXUSR & os.stat(fullPath)[stat.ST_MODE])) isLib = ('.dylib' in f) isFrame = 'framework' in f @@ -102,18 +102,15 @@ def main(): path = f+'/Versions/Current/'+name fullPath = os.path.join(inputFolder, path) isLib = True - + if isBinary or isLib: #print fullPath numUpdates = fixOneFile(fullPath, resetRpath) - print f + ' --> ' + str(numUpdates) + ' changes made.' + print f + ' --> ' + str(numUpdates) + ' changes made.' #raise Exception('DEBUG') - + # Execute main() when called from command line if __name__ == "__main__": sys.exit(main()) - - - -- GitLab From 7e078c92e8f18c4e5e03fb8000893b4c2de76a58 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 8 Feb 2018 18:48:22 -0700 Subject: [PATCH 015/620] added messaging for find Cholmod --- isis/cmake/FindBullet.cmake | 1 + isis/cmake/FindCholmod.cmake | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index 06f2992f59..999c3acb7d 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -23,6 +23,7 @@ find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) +message( "BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) message( "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) message( "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) message( "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index 8ace8619f6..fcbc066145 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -32,3 +32,16 @@ find_library(FORTRAN_LIBRARY NAMES gfortran find_library(BLAS_LIBRARY NAMES blas) get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) + +message( "CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) +message( "CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) +message( "CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) +message( "CAMD LIB: " ${CAMD_LIBRARY} ) +message( "AMD LIB: " ${AMD_LIBRARY} ) +message( "SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) +message( "FORTRAN LIB: " ${FORTRAN_LIBRARY} ) +message( "BLAS LIB: " ${BLAS_LIBRARY} ) + +if(NOT APPLE) + message("LAPACK LIB" ${LAPACK_LIBRARY}) +endif() -- GitLab From 7733379ada6dc239ea20cd3586fef8b6c4279971 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 12 Feb 2018 14:00:53 -0700 Subject: [PATCH 016/620] Fixed plugin error with CameraFactory appending to the master Camera.plugin file --- isis/CMakeLists.txt | 8 +++- isis/cmake/AddIsisModule.cmake | 3 +- isis/cmake/FindAllDependencies.cmake | 11 +++-- isis/cmake/FindCholmod.cmake | 1 + isis/cmake/FindGeos.cmake | 40 +++++++------------ isis/scripts/finalizeInstalledOsxRpaths.py | 10 +++-- .../base/objs/CameraFactory/CameraFactory.cpp | 6 +-- isis/src/base/objs/CameraFactory/unitTest.cpp | 12 +----- 8 files changed, 44 insertions(+), 47 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index aaf6e881a0..79d49209c6 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -45,6 +45,8 @@ set(CMAKE_PREFIX_PATH /usr/local/lib ) +set(CMAKE_FIND_FRAMEWORK LAST) + include(AddIsisModule) include(Utilities) include(TestSetup) @@ -68,6 +70,11 @@ set(PACKAGE_VERSION ${VERSION}) # Full name and version number set(PACKAGE_STRING "${PACKAGE_NAME} ${VERSION}") +# Other release information +set(VERSION_DATE "2017-04-24") +set(THIRD_PARTY_LIBS_VERSION "v007") +set(RELEASE_STAGE "alpha") # (alpha, beta, stable) + # Define to the address where bug reports for this package should be sent. set(PACKAGE_BUGREPORT "https://isis.astrogeology.usgs.gov/fixit") @@ -204,7 +211,6 @@ install(FILES "${CMAKE_BINARY_DIR}/qt.conf" DESTINATION ${CMAKE_INSTALL_PREFIX}/ #Create the inc directory execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/inc) - # Create an xml folder in the source directory that we will need later set(sourceXmlFolder ${CMAKE_BINARY_DIR}/bin/xml) execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin/xml) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 8c3d369fd7..8b3f045787 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -163,7 +163,8 @@ function(add_isis_obj folder reqLibs) else() # Folder with a plugin means that this is a separate library! # Add it here and then we are done with the source files. - + + set(newSourceFiles ${thisSourceFiles} PARENT_SCOPE) if(NOT (${numPlugins} EQUAL 1)) message( FATAL_ERROR "Error: Multiple plugins found in folder!" ) endif() diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 74b22e224d..69982b0501 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -37,6 +37,10 @@ find_program(PROTOC protoc REQUIRED) include(FindProtobuf) + +find_package(Geos 3.5.0 REQUIRED) + + if(APPLE) find_package(Qt5 COMPONENTS Core @@ -124,7 +128,6 @@ find_package(GeoTIFF 2 REQUIRED) find_package(TIFF 5 REQUIRED) find_package(CSPICE 65 REQUIRED) find_package(TNT 1.2.6 REQUIRED) -find_package(Geos 3.5.0 REQUIRED) find_package(GSL 19 REQUIRED) find_package(Protobuf 9 REQUIRED) find_package(Boost 1.59 REQUIRED) @@ -142,6 +145,7 @@ find_package(OpenCV 3.1.0 REQUIRED) find_package(NN REQUIRED) find_package(Jama REQUIRED) + # Only include Kakadu if it is available if(${JP2KFLAG}) find_package(Kakadu) @@ -181,11 +185,13 @@ foreach (_variableName ${_variableNames}) endif(_variableName MATCHES "^CMAKE+") endforeach() -#list(APPEND ALLLIBDIRS "/usr/lib64") list(REMOVE_DUPLICATES ALLLIBDIRS) list(REMOVE_DUPLICATES ALLLIBS) list(REMOVE_DUPLICATES ALLINCDIRS) +message(${ALLLIBS}) +message(${ALLLIBDIRS}) + # message(STATUS "ALL LIBS DIRS: ${ALLLIBDIRS}") # message(STATUS "ALL LIBS: ${ALLLIBS}") # message(STATUS "ALL INCS: ${ALLINCDIRS}") @@ -319,7 +325,6 @@ set(RAW_DYNAMIC_LIBS ${QT_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. diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index fcbc066145..aa33aefc80 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -16,6 +16,7 @@ find_library(COLAMD_LIBRARY NAMES colamd) find_library(CAMD_LIBRARY NAMES camd) find_library(AMD_LIBRARY NAMES amd) find_library(SUITESPARSE_LIBRARY NAMES suitesparseconfig) + # OSX does not link against lapack if(NOT APPLE) find_library(LAPACK_LIBRARY NAMES lapack) diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake index 51a1bf146d..e541a04a91 100644 --- a/isis/cmake/FindGeos.cmake +++ b/isis/cmake/FindGeos.cmake @@ -6,32 +6,20 @@ # GEOS_LIBRARY -if(APPLE) - find_path(GEOS_INCLUDE_DIR - NAME geos - PATH_SUFFIXES geos/geos3.5.0/ - ) - find_library(GEOS_LIBRARY - NAMES geos-3.5.0 - ) - find_library(GEOS_C_LIBRARY - NAMES geos_c - ) -else() - #changing to 3.5.1 for v007 - find_path(GEOS_INCLUDE_DIR - NAME geos - PATH_SUFFIXES geos/geos3.5.1/ - ) - #tjw: Changing to 3.5.1 for v007 - find_library(GEOS_LIBRARY - NAMES geos-3.5.1 - ) - - find_library(GEOS_C_LIBRARY - NAMES geos_c - ) +find_path(GEOS_INCLUDE_DIR + NAME geos + HINT geom.h + PATH_SUFFIXES geos/geos +) +find_library(GEOS_LIBRARY + NAMES geos +) +find_library(GEOS_C_LIBRARY + NAMES geos_c +) -endif(APPLE) +message( "GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) +message( "GEOS LIB: " ${GEOS_LIBRARY} ) +message( "GEOS C LIB: " ${GEOS_C_LIBRARY} ) get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/scripts/finalizeInstalledOsxRpaths.py b/isis/scripts/finalizeInstalledOsxRpaths.py index 8a2b04854f..1f4b4754b2 100644 --- a/isis/scripts/finalizeInstalledOsxRpaths.py +++ b/isis/scripts/finalizeInstalledOsxRpaths.py @@ -19,7 +19,7 @@ def fixOneFile(inputPath, resetRpath): # Search for abs paths to the USGS hard coded location needRpath = False - lines = otoolOutput.split() + lines = [l.decode('utf-8') for l in otoolOutput.split()] numUpdates = 0 for line in lines: @@ -83,13 +83,16 @@ def main(): if len(sys.argv) == 3: resetRpath = True if not os.path.exists(inputFolder): - print('Input folder '+inputFolder+' does not exist!') + print ('Input folder '+inputFolder+' does not exist!') return -1 # Fix all of the .dylib files in the given folder files = os.listdir(inputFolder) for f in files: + if '.plugin' in f: + continue + fullPath = os.path.join(inputFolder, f) isBinary = (os.path.isfile(fullPath) and (stat.S_IXUSR & os.stat(fullPath)[stat.ST_MODE])) @@ -106,7 +109,8 @@ def main(): if isBinary or isLib: #print fullPath numUpdates = fixOneFile(fullPath, resetRpath) - print f + ' --> ' + str(numUpdates) + ' changes made.' + if numUpdates > 0: + print (f + ' --> ' + str(numUpdates) + ' changes made.') #raise Exception('DEBUG') diff --git a/isis/src/base/objs/CameraFactory/CameraFactory.cpp b/isis/src/base/objs/CameraFactory/CameraFactory.cpp index 1c91f85c98..a40bf25881 100644 --- a/isis/src/base/objs/CameraFactory/CameraFactory.cpp +++ b/isis/src/base/objs/CameraFactory/CameraFactory.cpp @@ -34,7 +34,7 @@ namespace Isis { /** * Creates a Camera object using Pvl Specifications - * + * * @param cube The original cube with the current version camera model * * @return Camera* The Camera object created @@ -131,9 +131,9 @@ namespace Isis { /** * Looks up the current camera model version in the pvl labels. - * + * * @param lab The pvl labels - * + * * @returns The current camera model version */ int CameraFactory::CameraVersion(Pvl &lab) { diff --git a/isis/src/base/objs/CameraFactory/unitTest.cpp b/isis/src/base/objs/CameraFactory/unitTest.cpp index 74da442484..694e7cf658 100644 --- a/isis/src/base/objs/CameraFactory/unitTest.cpp +++ b/isis/src/base/objs/CameraFactory/unitTest.cpp @@ -14,13 +14,9 @@ void doit(Cube &cube); int main(int argc, char *argv[]) { Preference::Preferences(true); - // Get system's Camera.plugin file and add two new cameras of the same name to the bottom of + // Get system's Camera.plugin file and add two new cameras of the same name to the bottom of // Camera.plugin with different version numbers Pvl pluginFile; - FileName systemFile("$ISISROOT/lib/Camera.plugin"); - if (systemFile.fileExists()) { - pluginFile.read(systemFile.expanded()); - } PvlGroup oldCamera = PvlGroup("BOGUS/BOGUS"); PvlGroup newCamera = PvlGroup("BOGUS/BOGUS"); oldCamera += PvlKeyword("Version", "1"); @@ -28,7 +24,7 @@ int main(int argc, char *argv[]) { pluginFile.addGroup(oldCamera); pluginFile.addGroup(newCamera); pluginFile.write("Camera.plugin"); - + cerr << "Unit test for CameraFactory" << endl; cerr << "Testing missing Instrument Group ..." << endl; Cube dummyCube("$base/testData/isisTruth.cub", "r"); @@ -89,7 +85,3 @@ void doit(Cube &cube) { cerr << endl; } - - - - -- GitLab From 4c72b93618195c29ce5584662b966683a0052e52 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Mon, 12 Feb 2018 22:21:47 -0700 Subject: [PATCH 017/620] Changed Preference file for unit tests to find the correct location --- isis/src/base/objs/Preference/Preference.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index ba2c120044..ee455a5b7a 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -115,7 +115,7 @@ namespace Isis { // If its a unitTest then load with the unitTest preference file if(unitTest) { - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } // Otherwise load the Isis system and personal preferences. else { @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } return *p_preference; -- GitLab From 8c0017d2d2947da43a75ba144ba5aa6eb063118d Mon Sep 17 00:00:00 2001 From: Oxez Date: Mon, 12 Feb 2018 22:29:23 -0700 Subject: [PATCH 018/620] Changed FileName uniteTest to reflect new ISISROOT --- isis/src/base/objs/FileName/unitTest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/src/base/objs/FileName/unitTest.cpp b/isis/src/base/objs/FileName/unitTest.cpp index 026748ccf6..943fd662e5 100644 --- a/isis/src/base/objs/FileName/unitTest.cpp +++ b/isis/src/base/objs/FileName/unitTest.cpp @@ -43,7 +43,7 @@ int main(int argc, char *argv[]) { // Variable expansion will change truth data on these QStringList filesToTestSafely; filesToTestSafely << "$base/testData/isisTruth.cub" << "${base}/testData/isisTruth.cub" - << "$ISISROOT/src/Makefile" << "$ISISROOT/src/Makefile.elifekaM" + << "$ISISROOT/Makefile" << "$ISISROOT/Makefile.elifekaM" << "/$TEMPORARY/unitTest.cpp"; foreach (QString fileToTest, filesToTestSafely) { @@ -286,7 +286,7 @@ void TestExtensionChanges(QString prefix, QString name, bool showExpandedValues) if (!showExpandedValues) { toStringMethod = &FileName::original; } - + cout << prefix << "Testing Extension change [" << name << "]" << endl; cout << prefix << "\tBefore modification: " << (test.*toStringMethod)() << endl; cout << prefix << "\t\tChanged: " << (beforeLastChange != test) << endl; -- GitLab From 81ac016c70de045d3ebbc6dd86d469690ff95869 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Mon, 12 Feb 2018 22:33:56 -0700 Subject: [PATCH 019/620] Revert "Changed Preference file for unit tests to find the correct location" This reverts commit 4c72b93618195c29ce5584662b966683a0052e52. --- isis/src/base/objs/Preference/Preference.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index ee455a5b7a..ba2c120044 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -115,7 +115,7 @@ namespace Isis { // If its a unitTest then load with the unitTest preference file if(unitTest) { - p_preference->Load("$ISISROOT/TestPreferences"); + p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); } // Otherwise load the Isis system and personal preferences. else { @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load("$ISISROOT/TestPreferences"); + p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); } return *p_preference; -- GitLab From 35c73168c56a4fbba852772919ad9d47fbe99717 Mon Sep 17 00:00:00 2001 From: Oxez Date: Mon, 12 Feb 2018 23:00:22 -0700 Subject: [PATCH 020/620] Made pathing changes to reflect build directory being ISISROOT for unitTest --- isis/src/base/objs/Preference/Preference.cpp | 4 +- isis/src/base/objs/UserInterface/unitTest.cpp | 310 +++++++++--------- 2 files changed, 157 insertions(+), 157 deletions(-) diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index ba2c120044..ee455a5b7a 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -115,7 +115,7 @@ namespace Isis { // If its a unitTest then load with the unitTest preference file if(unitTest) { - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } // Otherwise load the Isis system and personal preferences. else { @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } return *p_preference; diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp index 90d919132b..d6b55a652d 100644 --- a/isis/src/base/objs/UserInterface/unitTest.cpp +++ b/isis/src/base/objs/UserInterface/unitTest.cpp @@ -15,7 +15,7 @@ int main(int argc, char *argv[]) { cout << "Unit test for Isis::UserInterface ..." << endl; QString unitTestXml = Isis::FileName("unitTest.xml").expanded(); - QString highpass = Isis::FileName("$ISISROOT/src/base/apps/highpass/highpass.xml").expanded(); + QString highpass = Isis::FileName("$ISISROOT/bin/xml/highpass.xml").expanded(); char *myArgv[15];// = {"unitTest", "from=input.cub", "to=output.cub"}; for (int i = 0; i < 15; i++) @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing param= value Format" << endl; { int myArgc = 0; @@ -55,7 +55,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing No Arguments (Defaults)" << endl; { int myArgc = 0; @@ -69,7 +69,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Basic Array Argument" << endl; { int myArgc = 0; @@ -97,7 +97,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Common Array Argument" << endl; { int myArgc = 0; @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Complicated Array Argument" << endl; { int myArgc = 0; @@ -148,14 +148,14 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing Escaped Array \\(" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "to=\\(escaped, argument)"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); vector vals; cout << "FROM: " << ui.GetAsString("FROM") << endl; @@ -166,14 +166,14 @@ int main(int argc, char *argv[]) { } cout << endl; } - - + + cout << "Testing Escaped Array \\\\(" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "to=\\\\(escaped, argument)"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); vector vals; cout << "FROM: " << ui.GetAsString("FROM") << endl; @@ -184,7 +184,7 @@ int main(int argc, char *argv[]) { } cout << endl; } - + cout << "Testing param = value Format" << endl; { @@ -210,7 +210,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Space in Parameter Value" << endl; { int myArgc = 0; @@ -225,7 +225,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing =value" << endl; try { int myArgc = 0; @@ -242,7 +242,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing param =value" << endl; try { int myArgc = 0; @@ -264,8 +264,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing mismatched quotes for array-value" << endl; try { int myArgc = 0; @@ -280,7 +280,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing array-value ending in backslash" << endl; try { int myArgc = 0; @@ -294,12 +294,12 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing Invalid Parameter" << endl; try { int myArgc = 0; - strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); + strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass/highpass"); strcpy(myArgv[myArgc++], "bogus=parameter"); Isis::UserInterface ui(unitTestXml, myArgc, myArgv); @@ -309,14 +309,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing Invalid Reserved Parameter" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-lastt"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -324,44 +324,44 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing Reserved Parameter=Invalid Value" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-verbose=(\"invalid\", \"value\")"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; - + } catch (Isis::IException &e) { e.print(); cout << endl; } - - + + cout << "Testing Unambiguous Reserved Parameter Resolution (-la)" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-la"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "FROM: " << ui.GetAsString("FROM") << endl; cout << "TO: " << ui.GetAsString("TO") << endl; cout << "GUI: " << ui.IsInteractive() << endl; - cout << endl; + cout << endl; } - - + + cout << "Testing Ambiguous Reserved Parameter Resolution" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-l"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -369,8 +369,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing unitTest v. ./unitTest for GUI" << endl; { int myArgc = 0; @@ -389,15 +389,15 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -PID and -GUI" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-pid=1"); strcpy(myArgv[myArgc++], "-gui"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -405,31 +405,31 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing ParentId() and TheGui()" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.ParentId(); ui.TheGui(); } - - + + cout << "Testing -NOGUI" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-nogui"); - + Isis::UserInterface ui(highpass, myArgc, myArgv); cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Starting Batchlist Test" << endl; { int myArgc = 0; @@ -449,8 +449,8 @@ int main(int argc, char *argv[]) { cout << "Finished Batchlist Test" << endl; cout << endl; } - - + + // The following four tests should all catch thrown exceptions - // -BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, or -LAST cout << "Testing -BATCHLIST with -GUI" << endl; @@ -469,7 +469,7 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with -SAVE" << endl; try { int myArgc = 0; @@ -486,7 +486,7 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with -RESTORE" << endl; try { int myArgc = 0; @@ -503,7 +503,7 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with -LAST" << endl; try { int myArgc = 0; @@ -520,13 +520,13 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with nonexistent .lis file" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=doesntExist.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -534,14 +534,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -BATCHLIST with empty .lis file" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTestEmpty.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -549,14 +549,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -BATCHLIST with mismatched columns in .lis file" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTestBadColumns.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -564,41 +564,41 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ONERROR=CONTINUE" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); strcpy(myArgv[myArgc++], "-onerror=continue"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "AbortOnError() returns: " << ui.AbortOnError() << endl; cout << endl; } - - + + cout << "Testing -ONERROR=ABORT" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); strcpy(myArgv[myArgc++], "-onerror=abort"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "AbortOnError() returns: " << ui.AbortOnError() << endl; cout << endl; } - - + + cout << "Testing -ONERROR=badValue" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); strcpy(myArgv[myArgc++], "-onerror=badValue"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -606,14 +606,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ONERROR=CONTINUE without -BATCHLIST" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-onerror=continue"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -621,14 +621,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ERRLIST=value without -BATCHLIST" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-errlist=unitTest.txt"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -636,15 +636,15 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ERRLIST with no value" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-errlist"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -652,15 +652,15 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ERRLIST=value" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-errlist=unitTestErr.txt"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); for(int i = 0; i < ui.BatchListSize(); i++) { ui.SetBatchList(i); @@ -668,8 +668,8 @@ int main(int argc, char *argv[]) { } cout << endl; } - - + + // evaluating -HELP during a unitTest should throw an exception (instead of exiting) cout << "Testing -HELP Priority (invalid parameters present)" << endl; try { @@ -681,7 +681,7 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "-webhelp"); strcpy(myArgv[myArgc++], "invalid=parameter"); strcpy(myArgv[myArgc++], "-help"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -689,9 +689,9 @@ int main(int argc, char *argv[]) { catch (Isis::IException &e) { e.print(); cout << endl; - } - - + } + + cout << "Testing -HELP=value ..." << endl; cout << endl; cout << "Testing pixelType" << endl; @@ -699,7 +699,7 @@ int main(int argc, char *argv[]) { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=to"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -707,14 +707,14 @@ int main(int argc, char *argv[]) { catch (Isis::IException &e) { e.print(); cout << endl; - } - + } + cout << "Testing inclusive min and max, lessThan, lessThanOrEqual, internalDefault" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=testone"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -722,14 +722,14 @@ int main(int argc, char *argv[]) { catch (Isis::IException &e) { e.print(); cout << endl; - } - + } + cout << "Testing odd, noninclusive min and max, greaterThan, greaterThanOrEqual" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=testtwo"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -738,13 +738,13 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing inclusions, exclusions" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=testthree"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -753,13 +753,13 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing list inclusions, exclusions, defaults" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=listtest"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -770,34 +770,34 @@ int main(int argc, char *argv[]) { } cout << "...End testing -HELP=value" << endl; cout << endl; - - + + cout << "Testing -INFO" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-info"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "GetInfoFlag() returns: " << ui.GetInfoFlag() << endl; cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl; cout << endl; } - - + + cout << "Testing -INFO=value" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-info=debug.log"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "GetInfoFlag() returns: " << ui.GetInfoFlag() << endl; - cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl; + cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl; cout << endl; } - - + + cout << "Testing -LAST" << endl; { int myArgc = 0; @@ -810,8 +810,8 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -LAST with other app parameters" << endl; { int myArgc = 0; @@ -825,36 +825,36 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -LOG" << endl; { Preference &tempTestPrefs = Isis::Preference::Preferences(true); int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-log"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << tempTestPrefs.findGroup("SessionLog")["FileOutput"] << endl; cout << tempTestPrefs.findGroup("SessionLog")["FileName"] << endl; cout << endl; } - - + + cout << "Testing -LOG=value" << endl; { Preference &tempTestPrefs = Isis::Preference::Preferences(true); int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-log=unitTest.prt"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << tempTestPrefs.findGroup("SessionLog")["FileOutput"] << endl; cout << tempTestPrefs.findGroup("SessionLog")["FileName"] << endl; cout << endl; } - - + + cout << "Testing -RESTORE with valid (existing) .par file" << endl; { int myArgc = 0; @@ -867,8 +867,8 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -RESTORE with corrupt .par file" << endl; try { int myArgc = 0; @@ -883,11 +883,11 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing -RESTORE with invalid (non-existing) .par file" << endl; try { int myArgc = 0; - strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); + strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass"); strcpy(myArgv[myArgc++], "-restore=junk.par"); Isis::UserInterface ui(unitTestXml, myArgc, myArgv); @@ -897,8 +897,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + // testing loadHistory() cout << "Testing -RESTORE with an empty .par file" << endl; { @@ -909,8 +909,8 @@ int main(int argc, char *argv[]) { Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } - - + + // unitTestLoadHistory.par has more object groups to test loadHistory() cout << "Testing -RESTORE with a more populated .par file" << endl; { @@ -921,21 +921,21 @@ int main(int argc, char *argv[]) { Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } - - + + // TestPreferences for unit tests have HistoryRecording set to Off cout << "Testing -SAVE with HistoryRecording Off" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-save"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.SaveHistory(); cout << endl; } - - + + cout << "Starting -SAVE, -PREFERECE, and -RESTORE Test" << endl; { cout << "Testing -SAVE=value with HistoryRecording On" << endl; @@ -945,30 +945,30 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "to=works"); strcpy(myArgv[myArgc++], "-save=unitTestSave.par"); strcpy(myArgv[myArgc++], "-preference=unitTestPrefs"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "FROM: " << ui.GetAsString("FROM") << endl; cout << "TO: " << ui.GetAsString("TO") << endl; cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; ui.SaveHistory(); - + cout << "Restoring Saved Parameters:" << endl; myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-restore=unitTestSave.par"); - + Isis::UserInterface ui2(unitTestXml, myArgc, myArgv); cout << "FROM: " << ui2.GetAsString("FROM") << endl; cout << "TO: " << ui2.GetAsString("TO") << endl; cout << "GUI: " << ui2.IsInteractive() << endl; - cout << endl; - + cout << endl; + cout << "Finished -SAVE, PREFERENCE, and -RESTORE Test" << endl; cout << endl; } - - + + cout << "Testing SetBatchList()..." << endl; { cout << "Testing with param=array-value" << endl; @@ -977,50 +977,50 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "from=$$1"); strcpy(myArgv[myArgc++], "to=($2,$2copy)"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.SetBatchList(0); cout << endl; - + cout << "Testing with param= " << endl; myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "from=$1"); strcpy(myArgv[myArgc++], "to= "); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui2(unitTestXml, myArgc, myArgv); ui2.SetBatchList(0); - cout << endl; - } + cout << endl; + } cout << "...End SetBatchList() Test" << endl; cout << endl; - - + + cout << "Testing SetErrorList() with p_errList == \"\"" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.SetErrorList(0); cout << endl; } - - + + cout << "Testing -VERBOSE" << endl; { Preference &tempTestPrefs = Isis::Preference::Preferences(true); int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-verbose"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << tempTestPrefs.findGroup("SessionLog")["TerminalOutput"] << endl; cout << endl; } - - + + // evaluating -webhelp should throw an error during unit test (instead of exiting) cout << "Testing -WEBHELP" << endl; try { @@ -1028,7 +1028,7 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "bogus=parameter"); strcpy(myArgv[myArgc++], "-webhelp"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -WEBHELP should have thrown an exception during unit testing" << endl; } @@ -1036,9 +1036,9 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + } catch (Isis::IException &e) { e.print(); } -} \ No newline at end of file +} -- GitLab From 268033784ec0dfdfae1fa88fca5e8db4f6ffdf4a Mon Sep 17 00:00:00 2001 From: Oxez Date: Tue, 13 Feb 2018 00:55:48 -0700 Subject: [PATCH 021/620] Moved libs in build dir to 3rdParty --- isis/CMakeLists.txt | 4 ++-- isis/cmake/Utilities.cmake | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index ea14a0411b..b463a73485 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -231,9 +231,9 @@ install_third_party() # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) get_filename_component(pluginName ${plugin} NAME) - if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) + if(NOT EXISTS ${CMAKE_BINARY_DIR}/3rdParty/plugins/${pluginName}) execute_process(COMMAND ln -s "${plugin}" ${pluginName} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/3rdParty/plugins") endif() endforeach() diff --git a/isis/cmake/Utilities.cmake b/isis/cmake/Utilities.cmake index 513668a630..2d0544b4a6 100644 --- a/isis/cmake/Utilities.cmake +++ b/isis/cmake/Utilities.cmake @@ -228,8 +228,8 @@ function(add_library_wrapper name sourceFiles libDependencies) # the library should be build both shared and static. set(alsoStatic ${ARGN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/3rdParty/lib) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/3rdParty/lib) # Add library, set dependencies, and add to installation list. add_library(${name} SHARED ${sourceFiles}) -- GitLab From 14f01a2802bdc0c8fb67022841a189ed79e9301e Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Tue, 13 Feb 2018 01:32:43 -0700 Subject: [PATCH 022/620] Unit Test work now --- isis/cmake/AddIsisModule.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 8c3d369fd7..80ded73a2b 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -177,7 +177,7 @@ function(add_isis_obj folder reqLibs) # Append the plugin file to a single file in the build directory # where the .so files will be created. During installation copy these # plugin files to the installation library folder. - set(pluginPath ${CMAKE_BINARY_DIR}/lib/${pluginName}) + set(pluginPath ${CMAKE_BINARY_DIR}/3rdParty/plugins/${pluginName}) cat(${plugins} ${pluginPath}) install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) -- GitLab From 9782b4dd154f8545cb4dcc42a6eac5fb3a555f62 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 14 Feb 2018 16:36:07 -0700 Subject: [PATCH 023/620] various fixes to get testing up and running --- isis/cmake/AddIsisModule.cmake | 13 +- isis/cmake/FindAllDependencies.cmake | 3 - isis/cmake/RunUnitTest.cmake | 9 +- isis/cmake/TestSetup.cmake | 2 - isis/src/base/apps/appjit/tsts/case1/from.lis | 2 + isis/src/base/apps/appjit/tsts/case2/from.lis | 2 + .../base/apps/automos/tsts/bandbin/cubes.lis | 2 + .../base/apps/automos/tsts/tolist/cubes.lis | 2 + .../base/apps/blend/tsts/themis/fromlist.lis | 2 + .../tsts/gisintersect/MercuryQuadGeoms.pvl | 8 + .../tsts/resourceManager/isisTruth.pvl | 18 + .../isisminer/tsts/resourceManager/pvls.lis | 5 + .../src/base/objs/ImportPdsTable/unitTest.cpp | 11 +- .../base/objs/ImportPdsTable/unitTest.exclude | 1 + isis/src/base/objs/Preference/Preference.cpp | 4 +- isis/src/base/objs/UserInterface/unitTest.cpp | 308 +++++++++--------- 16 files changed, 219 insertions(+), 173 deletions(-) create mode 100644 isis/src/base/apps/appjit/tsts/case1/from.lis create mode 100644 isis/src/base/apps/appjit/tsts/case2/from.lis create mode 100644 isis/src/base/apps/automos/tsts/bandbin/cubes.lis create mode 100644 isis/src/base/apps/automos/tsts/tolist/cubes.lis create mode 100644 isis/src/base/apps/blend/tsts/themis/fromlist.lis create mode 100644 isis/src/base/apps/isisminer/tsts/gisintersect/MercuryQuadGeoms.pvl create mode 100644 isis/src/base/apps/isisminer/tsts/resourceManager/isisTruth.pvl create mode 100644 isis/src/base/apps/isisminer/tsts/resourceManager/pvls.lis create mode 100644 isis/src/base/objs/ImportPdsTable/unitTest.exclude diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 8b3f045787..442ecb8607 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -82,8 +82,15 @@ function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) # Generate a name for the executable set(executableName "${moduleName}_unit_test_${filename}") + # check for the existance of a unitTest.xml as they need + # to be copies over to somehwere the unitTest can access. + set(test_xml "${folder}/unitTest.xml") + if(EXISTS "${test_xml}") + configure_file("${test_xml}" "${CMAKE_BINARY_DIR}/unitTest/${executableName}.xml" COPYONLY) + endif() + # Create the executable and link it to the module library - add_executable( ${executableName} ${testFile} ) + add_executable( ${executableName} ${testFile}) set(depLibs "${reqLibs};${matchedLibs}") target_link_libraries(${executableName} ${moduleName} ${depLibs}) @@ -93,8 +100,6 @@ function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) endfunction(make_obj_unit_test) - - # Incorporate a single obj folder function(add_isis_obj folder reqLibs) @@ -163,7 +168,7 @@ function(add_isis_obj folder reqLibs) else() # Folder with a plugin means that this is a separate library! # Add it here and then we are done with the source files. - + set(newSourceFiles ${thisSourceFiles} PARENT_SCOPE) if(NOT (${numPlugins} EQUAL 1)) message( FATAL_ERROR "Error: Multiple plugins found in folder!" ) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 69982b0501..80cb9dcecc 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -189,9 +189,6 @@ list(REMOVE_DUPLICATES ALLLIBDIRS) list(REMOVE_DUPLICATES ALLLIBS) list(REMOVE_DUPLICATES ALLINCDIRS) -message(${ALLLIBS}) -message(${ALLLIBDIRS}) - # message(STATUS "ALL LIBS DIRS: ${ALLLIBDIRS}") # message(STATUS "ALL LIBS: ${ALLLIBS}") # message(STATUS "ALL INCS: ${ALLINCDIRS}") diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 6e392ae00b..14bb5fe8fd 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -50,13 +50,14 @@ set(comp1 ${outputFile}) set(comp2 ${TRUTH_FILE}) set(exclusionPath ${truthFolder}/unitTest.exclude) if(EXISTS ${exclusionPath}) + message("Using Exlusion file ${exclusionPath}") set(comp1 ${tempDir}/output_exclude.txt) set(comp2 ${tempDir}/truth_exclude.txt) # This throws out all lines containing a word from the exclusion file. - execute_process(COMMAND cat ${outputFile} | grep -v -f ${exclusionPath} - OUTPUT_FILE ${comp1}) - execute_process(COMMAND cat ${TRUTH_FILE} | grep -v -f ${exclusionPath} - OUTPUT_FILE ${comp2}) + execute_process(COMMAND "cat ${outputFile} | grep -v -f ${exclusionPath}" + OUTPUT_FILE "${comp1}") + execute_process(COMMAND "cat ${TRUTH_FILE} | grep -v -f ${exclusionPath}" + OUTPUT_FILE "${comp2}") endif() # Verify that the files are exactly the same diff --git a/isis/cmake/TestSetup.cmake b/isis/cmake/TestSetup.cmake index b9fc1175f5..16f08c890f 100644 --- a/isis/cmake/TestSetup.cmake +++ b/isis/cmake/TestSetup.cmake @@ -38,7 +38,6 @@ function(add_makefile_test_folder folder prefix_name) # Call lower level function to finish adding the test. add_makefile_test_target(${testName} ${makeFile} ${inputDir} ${outputDir} ${truthDir}) - endfunction() @@ -46,7 +45,6 @@ endfunction() macro(add_makefile_test_target testName makeFile inputDir outputDir truthDir) set(thisFolder "${PROJECT_SOURCE_DIR}/cmake") - # Set up a cmake script which will execute the command in the makefile # and then check the results against the truth folder. add_test(NAME ${testName} diff --git a/isis/src/base/apps/appjit/tsts/case1/from.lis b/isis/src/base/apps/appjit/tsts/case1/from.lis new file mode 100644 index 0000000000..668e813906 --- /dev/null +++ b/isis/src/base/apps/appjit/tsts/case1/from.lis @@ -0,0 +1,2 @@ +output/PSP_007556_2010_RED4.balance.cropped.cub +output/PSP_007556_2010_RED5.balance.cropped.cub diff --git a/isis/src/base/apps/appjit/tsts/case2/from.lis b/isis/src/base/apps/appjit/tsts/case2/from.lis new file mode 100644 index 0000000000..668e813906 --- /dev/null +++ b/isis/src/base/apps/appjit/tsts/case2/from.lis @@ -0,0 +1,2 @@ +output/PSP_007556_2010_RED4.balance.cropped.cub +output/PSP_007556_2010_RED5.balance.cropped.cub diff --git a/isis/src/base/apps/automos/tsts/bandbin/cubes.lis b/isis/src/base/apps/automos/tsts/bandbin/cubes.lis new file mode 100644 index 0000000000..81e830029d --- /dev/null +++ b/isis/src/base/apps/automos/tsts/bandbin/cubes.lis @@ -0,0 +1,2 @@ +/usgs/cpkgs/isis3/testData/isis/src/base/apps/automos/tsts/bandbin/input/VIR_IR_1A_1_364768748_1.equi.crop.cub +/usgs/cpkgs/isis3/testData/isis/src/base/apps/automos/tsts/bandbin/input/VIR_IR_1A_1_364769700_1.equi.crop.cub diff --git a/isis/src/base/apps/automos/tsts/tolist/cubes.lis b/isis/src/base/apps/automos/tsts/tolist/cubes.lis new file mode 100644 index 0000000000..3839a395cc --- /dev/null +++ b/isis/src/base/apps/automos/tsts/tolist/cubes.lis @@ -0,0 +1,2 @@ +/usgs/cpkgs/isis3/testData/isis/src/base/apps/automos/tsts/tolist/input/VIR_IR_1A_1_364768748_1.equi.crop.cub +/usgs/cpkgs/isis3/testData/isis/src/base/apps/automos/tsts/tolist/input/VIR_IR_1A_1_364769700_1.equi.crop.cub diff --git a/isis/src/base/apps/blend/tsts/themis/fromlist.lis b/isis/src/base/apps/blend/tsts/themis/fromlist.lis new file mode 100644 index 0000000000..16efbd87dc --- /dev/null +++ b/isis/src/base/apps/blend/tsts/themis/fromlist.lis @@ -0,0 +1,2 @@ +/usgs/cpkgs/isis3/testData/isis/src/base/apps/blend/tsts/themis/input/I23851018.cub +/usgs/cpkgs/isis3/testData/isis/src/base/apps/blend/tsts/themis/input/I01086005.cub diff --git a/isis/src/base/apps/isisminer/tsts/gisintersect/MercuryQuadGeoms.pvl b/isis/src/base/apps/isisminer/tsts/gisintersect/MercuryQuadGeoms.pvl new file mode 100644 index 0000000000..dbc7674466 --- /dev/null +++ b/isis/src/base/apps/isisminer/tsts/gisintersect/MercuryQuadGeoms.pvl @@ -0,0 +1,8 @@ +Object = MercuryQuadGeoms + + Object = H1-Borealis + Keyword = "Value" + EndObject + +EndObject +End diff --git a/isis/src/base/apps/isisminer/tsts/resourceManager/isisTruth.pvl b/isis/src/base/apps/isisminer/tsts/resourceManager/isisTruth.pvl new file mode 100644 index 0000000000..7a67a32a79 --- /dev/null +++ b/isis/src/base/apps/isisminer/tsts/resourceManager/isisTruth.pvl @@ -0,0 +1,18 @@ +Object = IsisCube + SpacecraftName = "MARS GLOBAL SURVEYOR" + InstrumentId = MOC-WA + TargetName = Mars + StartTime = 1997-10-20T10:58:37.46 + StopTime = 1997-10-20T11:03:44.66 + CrosstrackSumming = 4 + DowntrackSumming = 4 + FocalPlaneTemperature = 213.1 + GainModeId = 1A + LineExposureDuration = 100.000000 + MissionPhaseName = AB-1 + OffsetModeId = 5 + SpacecraftClockCount = 561812335:32 + RationaleDesc = "OLYMPUS MONS SPECIAL RED WIDE ANGLE" + FirstLineSample = 673 +End_Object +End diff --git a/isis/src/base/apps/isisminer/tsts/resourceManager/pvls.lis b/isis/src/base/apps/isisminer/tsts/resourceManager/pvls.lis new file mode 100644 index 0000000000..593b9347bb --- /dev/null +++ b/isis/src/base/apps/isisminer/tsts/resourceManager/pvls.lis @@ -0,0 +1,5 @@ +isisTruth.pvl +isisTruth.pvl + + + diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.cpp b/isis/src/base/objs/ImportPdsTable/unitTest.cpp index 6052ff633f..f34a8caacd 100644 --- a/isis/src/base/objs/ImportPdsTable/unitTest.cpp +++ b/isis/src/base/objs/ImportPdsTable/unitTest.cpp @@ -12,6 +12,7 @@ #include "Preference.h" #include "Table.h" #include "TextFile.h" +#include "FileName.h" using namespace std; using namespace Isis; @@ -90,7 +91,9 @@ class ImportPdsTableTester : public ImportPdsTable { */ int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); - QString inputFile = "data/VIR_IR_1A_1_332974737_1_HK.LBL"; + Isis::FileName data("$ISISROOT/../src/base/objs/ImportPdsTable/data/"); + + QString inputFile = data.expanded() + "VIR_IR_1A_1_332974737_1_HK.LBL"; if (--argc == 1) { inputFile = argv[1]; } cout << "\n\nTesting ImportPdsTable class using file " << inputFile << "\n"; @@ -156,7 +159,7 @@ int main(int argc, char *argv[]) { // The following tests were added when the class was expanded to import binary // PDS tables also... - QString pdsTableDir = "data/"; + QString pdsTableDir = data.expanded(); QString pdsLabelFile = ""; QString pdsTableFile = ""; @@ -226,8 +229,8 @@ int main(int argc, char *argv[]) { cout << myTable.name() << "\n"; - QString merLabelFile = "data/edrindex.lbl"; - QString merTableFile = "data/edrindex.tab"; + QString merLabelFile = data.expanded() + "edrindex.lbl"; + QString merTableFile = data.expanded() + "edrindex.tab"; cout << "\n\nTesting ImportPdsTable protected methods with file " << merLabelFile; cout << "\n\nConstructing new ImportPdsTable where the PDS table object name is "; diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.exclude b/isis/src/base/objs/ImportPdsTable/unitTest.exclude new file mode 100644 index 0000000000..23459b86f1 --- /dev/null +++ b/isis/src/base/objs/ImportPdsTable/unitTest.exclude @@ -0,0 +1 @@ +Testing ImportPdsTable class using file diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index ba2c120044..7056379210 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -115,7 +115,7 @@ namespace Isis { // If its a unitTest then load with the unitTest preference file if(unitTest) { - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } // Otherwise load the Isis system and personal preferences. else { @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/../src/base/objs/Preference/TestPreferences"); } return *p_preference; diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp index 90d919132b..46eb7b222b 100644 --- a/isis/src/base/objs/UserInterface/unitTest.cpp +++ b/isis/src/base/objs/UserInterface/unitTest.cpp @@ -14,8 +14,8 @@ int main(int argc, char *argv[]) { cout << "Unit test for Isis::UserInterface ..." << endl; - QString unitTestXml = Isis::FileName("unitTest.xml").expanded(); - QString highpass = Isis::FileName("$ISISROOT/src/base/apps/highpass/highpass.xml").expanded(); + QString unitTestXml = Isis::FileName("$ISISROOT/unitTest/isis3_unit_test_UserInterface.xml").expanded(); + QString highpass = Isis::FileName("$ISISROOT/bin/xml/highpass.xml").expanded(); char *myArgv[15];// = {"unitTest", "from=input.cub", "to=output.cub"}; for (int i = 0; i < 15; i++) @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing param= value Format" << endl; { int myArgc = 0; @@ -55,7 +55,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing No Arguments (Defaults)" << endl; { int myArgc = 0; @@ -69,7 +69,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Basic Array Argument" << endl; { int myArgc = 0; @@ -97,7 +97,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Common Array Argument" << endl; { int myArgc = 0; @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Complicated Array Argument" << endl; { int myArgc = 0; @@ -148,14 +148,14 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing Escaped Array \\(" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "to=\\(escaped, argument)"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); vector vals; cout << "FROM: " << ui.GetAsString("FROM") << endl; @@ -166,14 +166,14 @@ int main(int argc, char *argv[]) { } cout << endl; } - - + + cout << "Testing Escaped Array \\\\(" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "to=\\\\(escaped, argument)"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); vector vals; cout << "FROM: " << ui.GetAsString("FROM") << endl; @@ -184,7 +184,7 @@ int main(int argc, char *argv[]) { } cout << endl; } - + cout << "Testing param = value Format" << endl; { @@ -210,7 +210,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing Space in Parameter Value" << endl; { int myArgc = 0; @@ -225,7 +225,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing =value" << endl; try { int myArgc = 0; @@ -242,7 +242,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing param =value" << endl; try { int myArgc = 0; @@ -264,8 +264,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing mismatched quotes for array-value" << endl; try { int myArgc = 0; @@ -280,7 +280,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing array-value ending in backslash" << endl; try { int myArgc = 0; @@ -294,8 +294,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing Invalid Parameter" << endl; try { int myArgc = 0; @@ -309,14 +309,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing Invalid Reserved Parameter" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-lastt"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -324,44 +324,44 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing Reserved Parameter=Invalid Value" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-verbose=(\"invalid\", \"value\")"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; - + } catch (Isis::IException &e) { e.print(); cout << endl; } - - + + cout << "Testing Unambiguous Reserved Parameter Resolution (-la)" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-la"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "FROM: " << ui.GetAsString("FROM") << endl; cout << "TO: " << ui.GetAsString("TO") << endl; cout << "GUI: " << ui.IsInteractive() << endl; - cout << endl; + cout << endl; } - - + + cout << "Testing Ambiguous Reserved Parameter Resolution" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-l"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -369,8 +369,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing unitTest v. ./unitTest for GUI" << endl; { int myArgc = 0; @@ -389,15 +389,15 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -PID and -GUI" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-pid=1"); strcpy(myArgv[myArgc++], "-gui"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -405,31 +405,31 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing ParentId() and TheGui()" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.ParentId(); ui.TheGui(); } - - + + cout << "Testing -NOGUI" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-nogui"); - + Isis::UserInterface ui(highpass, myArgc, myArgv); cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Starting Batchlist Test" << endl; { int myArgc = 0; @@ -449,8 +449,8 @@ int main(int argc, char *argv[]) { cout << "Finished Batchlist Test" << endl; cout << endl; } - - + + // The following four tests should all catch thrown exceptions - // -BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, or -LAST cout << "Testing -BATCHLIST with -GUI" << endl; @@ -469,7 +469,7 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with -SAVE" << endl; try { int myArgc = 0; @@ -486,7 +486,7 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with -RESTORE" << endl; try { int myArgc = 0; @@ -503,7 +503,7 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with -LAST" << endl; try { int myArgc = 0; @@ -520,13 +520,13 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing -BATCHLIST with nonexistent .lis file" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=doesntExist.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -534,14 +534,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -BATCHLIST with empty .lis file" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTestEmpty.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -549,14 +549,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -BATCHLIST with mismatched columns in .lis file" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTestBadColumns.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -564,41 +564,41 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ONERROR=CONTINUE" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); strcpy(myArgv[myArgc++], "-onerror=continue"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "AbortOnError() returns: " << ui.AbortOnError() << endl; cout << endl; } - - + + cout << "Testing -ONERROR=ABORT" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); strcpy(myArgv[myArgc++], "-onerror=abort"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "AbortOnError() returns: " << ui.AbortOnError() << endl; cout << endl; } - - + + cout << "Testing -ONERROR=badValue" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); strcpy(myArgv[myArgc++], "-onerror=badValue"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -606,14 +606,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ONERROR=CONTINUE without -BATCHLIST" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-onerror=continue"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -621,14 +621,14 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ERRLIST=value without -BATCHLIST" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-errlist=unitTest.txt"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -636,15 +636,15 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ERRLIST with no value" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-errlist"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } @@ -652,15 +652,15 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + cout << "Testing -ERRLIST=value" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-errlist=unitTestErr.txt"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); for(int i = 0; i < ui.BatchListSize(); i++) { ui.SetBatchList(i); @@ -668,8 +668,8 @@ int main(int argc, char *argv[]) { } cout << endl; } - - + + // evaluating -HELP during a unitTest should throw an exception (instead of exiting) cout << "Testing -HELP Priority (invalid parameters present)" << endl; try { @@ -681,7 +681,7 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "-webhelp"); strcpy(myArgv[myArgc++], "invalid=parameter"); strcpy(myArgv[myArgc++], "-help"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -689,9 +689,9 @@ int main(int argc, char *argv[]) { catch (Isis::IException &e) { e.print(); cout << endl; - } - - + } + + cout << "Testing -HELP=value ..." << endl; cout << endl; cout << "Testing pixelType" << endl; @@ -699,7 +699,7 @@ int main(int argc, char *argv[]) { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=to"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -707,14 +707,14 @@ int main(int argc, char *argv[]) { catch (Isis::IException &e) { e.print(); cout << endl; - } - + } + cout << "Testing inclusive min and max, lessThan, lessThanOrEqual, internalDefault" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=testone"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -722,14 +722,14 @@ int main(int argc, char *argv[]) { catch (Isis::IException &e) { e.print(); cout << endl; - } - + } + cout << "Testing odd, noninclusive min and max, greaterThan, greaterThanOrEqual" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=testtwo"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -738,13 +738,13 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing inclusions, exclusions" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=testthree"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -753,13 +753,13 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + cout << "Testing list inclusions, exclusions, defaults" << endl; try { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-help=listtest"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -HELP should have thrown an exception during unit testing" << endl; cout << endl; @@ -770,34 +770,34 @@ int main(int argc, char *argv[]) { } cout << "...End testing -HELP=value" << endl; cout << endl; - - + + cout << "Testing -INFO" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-info"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "GetInfoFlag() returns: " << ui.GetInfoFlag() << endl; cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl; cout << endl; } - - + + cout << "Testing -INFO=value" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-info=debug.log"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "GetInfoFlag() returns: " << ui.GetInfoFlag() << endl; - cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl; + cout << "GetInfoFileName() returns: " << ui.GetInfoFileName() << endl; cout << endl; } - - + + cout << "Testing -LAST" << endl; { int myArgc = 0; @@ -810,8 +810,8 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -LAST with other app parameters" << endl; { int myArgc = 0; @@ -825,36 +825,36 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -LOG" << endl; { Preference &tempTestPrefs = Isis::Preference::Preferences(true); int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-log"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << tempTestPrefs.findGroup("SessionLog")["FileOutput"] << endl; cout << tempTestPrefs.findGroup("SessionLog")["FileName"] << endl; cout << endl; } - - + + cout << "Testing -LOG=value" << endl; { Preference &tempTestPrefs = Isis::Preference::Preferences(true); int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-log=unitTest.prt"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << tempTestPrefs.findGroup("SessionLog")["FileOutput"] << endl; cout << tempTestPrefs.findGroup("SessionLog")["FileName"] << endl; cout << endl; } - - + + cout << "Testing -RESTORE with valid (existing) .par file" << endl; { int myArgc = 0; @@ -867,8 +867,8 @@ int main(int argc, char *argv[]) { cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; } - - + + cout << "Testing -RESTORE with corrupt .par file" << endl; try { int myArgc = 0; @@ -883,7 +883,7 @@ int main(int argc, char *argv[]) { cout << endl; } - + cout << "Testing -RESTORE with invalid (non-existing) .par file" << endl; try { int myArgc = 0; @@ -897,8 +897,8 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - - + + // testing loadHistory() cout << "Testing -RESTORE with an empty .par file" << endl; { @@ -909,8 +909,8 @@ int main(int argc, char *argv[]) { Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } - - + + // unitTestLoadHistory.par has more object groups to test loadHistory() cout << "Testing -RESTORE with a more populated .par file" << endl; { @@ -921,21 +921,21 @@ int main(int argc, char *argv[]) { Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << endl; } - - + + // TestPreferences for unit tests have HistoryRecording set to Off cout << "Testing -SAVE with HistoryRecording Off" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-save"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.SaveHistory(); cout << endl; } - - + + cout << "Starting -SAVE, -PREFERECE, and -RESTORE Test" << endl; { cout << "Testing -SAVE=value with HistoryRecording On" << endl; @@ -945,30 +945,30 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "to=works"); strcpy(myArgv[myArgc++], "-save=unitTestSave.par"); strcpy(myArgv[myArgc++], "-preference=unitTestPrefs"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "FROM: " << ui.GetAsString("FROM") << endl; cout << "TO: " << ui.GetAsString("TO") << endl; cout << "GUI: " << ui.IsInteractive() << endl; cout << endl; ui.SaveHistory(); - + cout << "Restoring Saved Parameters:" << endl; myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-restore=unitTestSave.par"); - + Isis::UserInterface ui2(unitTestXml, myArgc, myArgv); cout << "FROM: " << ui2.GetAsString("FROM") << endl; cout << "TO: " << ui2.GetAsString("TO") << endl; cout << "GUI: " << ui2.IsInteractive() << endl; - cout << endl; - + cout << endl; + cout << "Finished -SAVE, PREFERENCE, and -RESTORE Test" << endl; cout << endl; } - - + + cout << "Testing SetBatchList()..." << endl; { cout << "Testing with param=array-value" << endl; @@ -977,50 +977,50 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "from=$$1"); strcpy(myArgv[myArgc++], "to=($2,$2copy)"); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.SetBatchList(0); cout << endl; - + cout << "Testing with param= " << endl; myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "from=$1"); strcpy(myArgv[myArgc++], "to= "); strcpy(myArgv[myArgc++], "-batchlist=unitTest.lis"); - + Isis::UserInterface ui2(unitTestXml, myArgc, myArgv); ui2.SetBatchList(0); - cout << endl; - } + cout << endl; + } cout << "...End SetBatchList() Test" << endl; cout << endl; - - + + cout << "Testing SetErrorList() with p_errList == \"\"" << endl; { int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); ui.SetErrorList(0); cout << endl; } - - + + cout << "Testing -VERBOSE" << endl; { Preference &tempTestPrefs = Isis::Preference::Preferences(true); int myArgc = 0; strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "-verbose"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << tempTestPrefs.findGroup("SessionLog")["TerminalOutput"] << endl; cout << endl; } - - + + // evaluating -webhelp should throw an error during unit test (instead of exiting) cout << "Testing -WEBHELP" << endl; try { @@ -1028,7 +1028,7 @@ int main(int argc, char *argv[]) { strcpy(myArgv[myArgc++], "./unitTest"); strcpy(myArgv[myArgc++], "bogus=parameter"); strcpy(myArgv[myArgc++], "-webhelp"); - + Isis::UserInterface ui(unitTestXml, myArgc, myArgv); cout << "Evaluating -WEBHELP should have thrown an exception during unit testing" << endl; } @@ -1036,9 +1036,9 @@ int main(int argc, char *argv[]) { e.print(); cout << endl; } - + } catch (Isis::IException &e) { e.print(); } -} \ No newline at end of file +} -- GitLab From b219628ade78282cb62dad19237ac4d184e1de68 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Thu, 15 Feb 2018 11:31:25 -0700 Subject: [PATCH 024/620] Revert Trash Commits This reverts commit 14f01a2802bdc0c8fb67022841a189ed79e9301e. --- isis/cmake/AddIsisModule.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 80ded73a2b..8c3d369fd7 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -177,7 +177,7 @@ function(add_isis_obj folder reqLibs) # Append the plugin file to a single file in the build directory # where the .so files will be created. During installation copy these # plugin files to the installation library folder. - set(pluginPath ${CMAKE_BINARY_DIR}/3rdParty/plugins/${pluginName}) + set(pluginPath ${CMAKE_BINARY_DIR}/lib/${pluginName}) cat(${plugins} ${pluginPath}) install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) -- GitLab From 8f20859409294c8823aa6d05a9489e39db375248 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Thu, 15 Feb 2018 11:31:53 -0700 Subject: [PATCH 025/620] Revert Trash Commits This reverts commit 268033784ec0dfdfae1fa88fca5e8db4f6ffdf4a. --- isis/CMakeLists.txt | 4 ++-- isis/cmake/Utilities.cmake | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index b463a73485..ea14a0411b 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -231,9 +231,9 @@ install_third_party() # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) get_filename_component(pluginName ${plugin} NAME) - if(NOT EXISTS ${CMAKE_BINARY_DIR}/3rdParty/plugins/${pluginName}) + if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) execute_process(COMMAND ln -s "${plugin}" ${pluginName} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/3rdParty/plugins") + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") endif() endforeach() diff --git a/isis/cmake/Utilities.cmake b/isis/cmake/Utilities.cmake index 2d0544b4a6..513668a630 100644 --- a/isis/cmake/Utilities.cmake +++ b/isis/cmake/Utilities.cmake @@ -228,8 +228,8 @@ function(add_library_wrapper name sourceFiles libDependencies) # the library should be build both shared and static. set(alsoStatic ${ARGN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/3rdParty/lib) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/3rdParty/lib) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # Add library, set dependencies, and add to installation list. add_library(${name} SHARED ${sourceFiles}) -- GitLab From 6cd60c265e7e8812b66b12342a3d700bc045dee6 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Thu, 15 Feb 2018 12:18:55 -0700 Subject: [PATCH 026/620] Changed find modules to take input of version numbers from block in FindAllDependencies.cmake --- isis/CMakeLists.txt | 4 +- isis/cmake/FindAllDependencies.cmake | 59 +++++++++++++++++----------- isis/cmake/FindBoost.cmake | 4 +- isis/cmake/FindCholmod.cmake | 2 +- isis/cmake/FindGMM.cmake | 2 +- isis/cmake/FindGeos.cmake | 37 +++++------------ isis/cmake/FindJama.cmake | 4 +- isis/cmake/FindPCL.cmake | 4 +- isis/cmake/FindProtobuf.cmake | 2 +- isis/cmake/FindQwt.cmake | 2 +- isis/cmake/FindSuperLU.cmake | 4 +- isis/cmake/FindTIFF.cmake | 2 +- isis/cmake/FindTNT.cmake | 4 +- isis/cmake/FindXercesC.cmake | 2 +- 14 files changed, 61 insertions(+), 71 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index ea14a0411b..eb1a60c8e0 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -40,9 +40,9 @@ set(CMAKE_PREFIX_PATH /opt/usgs/v007/proprietary/ /opt/usgs/v007/proprietary/include/ /opt/usgs/v007/proprietary/lib/ - /usr/lib + /usr/lib/ /usr/lib64/ - /usr/local/lib + /usr/local/lib/ ) include(AddIsisModule) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 74b22e224d..93760a178a 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -118,29 +118,42 @@ else() #oh god why find_library(QT5_XMLPATTERNS_LIBRARY NAMES Qt5XmlPatterns) endif(APPLE) -find_package(Qwt 6 REQUIRED) -find_package(XercesC 3.1 REQUIRED) -find_package(GeoTIFF 2 REQUIRED) -find_package(TIFF 5 REQUIRED) -find_package(CSPICE 65 REQUIRED) -find_package(TNT 1.2.6 REQUIRED) -find_package(Geos 3.5.0 REQUIRED) -find_package(GSL 19 REQUIRED) -find_package(Protobuf 9 REQUIRED) -find_package(Boost 1.59 REQUIRED) -find_package(X11 6 REQUIRED) -find_package(GSL 19 REQUIRED) -find_package(GMM REQUIRED) -find_package(HDF5 1.8.15 REQUIRED) -find_package(SuperLU 4.3 REQUIRED) -find_package(Cholmod 4.4.5 REQUIRED) -find_package(Embree 2.15.0 REQUIRED) -find_package(PCL 1.8.0 REQUIRED) -find_package(Eigen REQUIRED) -find_package(Bullet 2.86 REQUIRED) -find_package(OpenCV 3.1.0 REQUIRED) -find_package(NN REQUIRED) -find_package(Jama REQUIRED) + +# Some of these will have non-traditional installs with version numbers in the paths in v007 +# For these, we pass in a version number, and use it in the path suffix +# This only applies to v007, and outside of the building, we should only expect standard installs +# The v007-specific installs are listed beside their find_package calls below: +find_package(Boost 1.59.0 REQUIRED) # "boost/boost${Boost_FIND_VERSION}/boost/" +find_package(Bullet 2.86 REQUIRED) +find_package(Cholmod 4.4.5 REQUIRED) # "SuiteSparse/SuiteSparse${Cholmod_FIND_VERSION}/SuiteSparse/" +find_package(CSPICE 65 REQUIRED) +find_package(Eigen REQUIRED) +find_package(Embree 2.15.0 REQUIRED) +find_package(GeoTIFF 2 REQUIRED) +find_package(GMM 5.0 REQUIRED) # "/gmm/gmm-${GMM_FIND_VERSION}/gmm/" +find_package(GSL 19 REQUIRED) +find_package(HDF5 1.8.15 REQUIRED) +find_package(Jama 125 REQUIRED) # Jama version is 1.2.5, but v007 directory is "jama/jama125/" +find_package(NN REQUIRED) +find_package(OpenCV 3.1.0 REQUIRED) +find_package(PCL 1.8 REQUIRED) # "pcl-${PCL_FIND_VERSION}" +find_package(Protobuf 2.6.1 REQUIRED) # "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" +find_package(Qwt 6 REQUIRED) # "qwt${Qwt_FIND_VERSION}" +find_package(SuperLU 4.3 REQUIRED) # "superlu/superlu${SuperLU_FIND_VERSION}/superlu/" +find_package(TIFF 4.0.5 REQUIRED) # "tiff/tiff-${TIFF_FIND_VERSION}" +find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 directory is "tnt/tnt126/" +find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" +find_package(X11 6 REQUIRED) + +# v007 might have different versions installed for our mac and linux systems. +# Im this case, we specify the version numbers being searched for in the non-traditional installs. +if(APPLE) + find_package(Geos 3.5.0 REQUIRED) +else(APPLE) + find_package(Geos 3.5.1 REQUIRED) +endif(APPLE) + + # Only include Kakadu if it is available if(${JP2KFLAG}) diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake index 12b19866e0..dafe981460 100644 --- a/isis/cmake/FindBoost.cmake +++ b/isis/cmake/FindBoost.cmake @@ -6,11 +6,9 @@ find_path(BOOST_INCLUDE_DIR NAME flyweight.hpp - PATH_SUFFIXES boost/boost1.59.0/boost/ boost + PATH_SUFFIXES "boost/boost${Boost_FIND_VERSION}/boost/" "boost" ) -message("BOOST_INCLUDE_DIR = ${BOOST_INCLUDE_DIR}") - get_filename_component(BOOST_ROOT_INCLUDE_DIR "${BOOST_INCLUDE_DIR}" DIRECTORY) find_library(BOOST_ATOMIC_MT_LIBRARY diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index 8ace8619f6..dee44eb9eb 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -7,7 +7,7 @@ find_path(CHOLMOD_INCLUDE_DIR NAME cholmod.h - PATH_SUFFIXES SuiteSparse/SuiteSparse4.4.5/SuiteSparse/ SuiteSparse + PATH_SUFFIXES "SuiteSparse/SuiteSparse${Cholmod_FIND_VERSION}/SuiteSparse/" "SuiteSparse" ) find_library(CHOLMOD_LIBRARY NAMES cholmod) diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake index d3fa96579f..58f4717a4f 100644 --- a/isis/cmake/FindGMM.cmake +++ b/isis/cmake/FindGMM.cmake @@ -6,7 +6,7 @@ find_path(GMM_INCLUDE_DIR NAMES gmm.h - PATH_SUFFIXES /gmm/gmm-5.0/gmm/ gmm + PATH_SUFFIXES "/gmm/gmm-${GMM_FIND_VERSION}/gmm/" "gmm" ) get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake index 51a1bf146d..a83a205859 100644 --- a/isis/cmake/FindGeos.cmake +++ b/isis/cmake/FindGeos.cmake @@ -5,33 +5,16 @@ # GEOS_INCLUDE_DIR # GEOS_LIBRARY +find_path(GEOS_INCLUDE_DIR + NAME geos.h + PATH_SUFFIXES "geos/geos${Geos_FIND_VERSION}" "geos" +) -if(APPLE) - find_path(GEOS_INCLUDE_DIR - NAME geos - PATH_SUFFIXES geos/geos3.5.0/ - ) - find_library(GEOS_LIBRARY - NAMES geos-3.5.0 - ) - find_library(GEOS_C_LIBRARY - NAMES geos_c - ) -else() - #changing to 3.5.1 for v007 - find_path(GEOS_INCLUDE_DIR - NAME geos - PATH_SUFFIXES geos/geos3.5.1/ - ) - #tjw: Changing to 3.5.1 for v007 - find_library(GEOS_LIBRARY - NAMES geos-3.5.1 - ) - - find_library(GEOS_C_LIBRARY - NAMES geos_c - ) - -endif(APPLE) +find_library(GEOS_LIBRARY + NAMES geos +) +find_library(GEOS_C_LIBRARY + NAMES geos_c +) get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake index 4bb46183fd..33d0fa108f 100644 --- a/isis/cmake/FindJama.cmake +++ b/isis/cmake/FindJama.cmake @@ -6,9 +6,7 @@ find_path(JAMA_INCLUDE_DIR NAMES jama_cholesky.h - PATH_SUFFIXES - jama/jama125/jama - /jama + PATH_SUFFIXES "jama/jama${Jama_FIND_VERSION}/jama" "/jama" ) get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index 8e0a5a96cb..ae74c625c2 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -7,12 +7,12 @@ find_path(PCL_ROOT_INCLUDE_DIR NAME pcl - PATH_SUFFIXES pcl-1.8 + PATH_SUFFIXES "pcl-${PCL_FIND_VERSION}" ) find_path(PCL_INCLUDE_DIR NAME pcl_base.h - PATH_SUFFIXES pcl-1.8/pcl + PATH_SUFFIXES "pcl-${PCL_FIND_VERSION}/pcl" ) find_library(PCL_COMMON_LIBRARY NAMES pcl_common) diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake index 4bb715b2ca..7bc7b7ce5b 100644 --- a/isis/cmake/FindProtobuf.cmake +++ b/isis/cmake/FindProtobuf.cmake @@ -1,6 +1,6 @@ find_path(PROTOBUF_INCLUDE_DIR NAMES google/ - PATH_SUFFIXES google-protobuf/protobuf2.6.1/ + PATH_SUFFIXES "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" ) find_library(PROTOBUF_LIBRARY NAMES protobuf) diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 4e51c8625d..7dbfa4c3a5 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -7,7 +7,7 @@ FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h - PATH_SUFFIXES qwt-qt5 qwt qwt6 + PATH_SUFFIXES "qwt-qt5" "qwt" "qwt6" "qwt${Qwt_FIND_VERSION}" ) find_library(QWT_LIBRARY diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 4f06ce7cd1..5cf95e09b8 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -7,11 +7,11 @@ find_path(SUPERLU_INCLUDE_DIR NAME supermatrix.h - PATH_SUFFIXES superlu/superlu5.0/superlu/ superlu + PATH_SUFFIXES "superlu/superlu${SuperLU_FIND_VERSION}/superlu/" "superlu" ) find_library(SUPERLU_LIBRARY - NAMES superlu_4.3 + NAMES "superlu_${SuperLU_FIND_VERSION}" ) get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake index 81e5ce6b1b..d97db9a969 100644 --- a/isis/cmake/FindTIFF.cmake +++ b/isis/cmake/FindTIFF.cmake @@ -1,6 +1,6 @@ find_path(TIFF_INCLUDE_DIR NAMES tiff.h - PATH_SUFFIXES tiff/tiff-4.0.5 + PATH_SUFFIXES "tiff/tiff-${TIFF_FIND_VERSION}" ) # message("TIFF_INCLUDE_DIR = ${TIFF_INCLUDE_DIR}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake index bda175e202..7b05477d69 100644 --- a/isis/cmake/FindTNT.cmake +++ b/isis/cmake/FindTNT.cmake @@ -6,9 +6,7 @@ find_path(TNT_INCLUDE_DIR NAMES tnt.h - PATH_SUFFIXES - tnt/tnt126/tnt - tnt/ + PATH_SUFFIXES "tnt/tnt${TNT_FIND_VERSION}/tnt" "tnt/" ) get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake index bd4717b7e4..cf639e4394 100644 --- a/isis/cmake/FindXercesC.cmake +++ b/isis/cmake/FindXercesC.cmake @@ -1,6 +1,6 @@ find_path(XERCESC_INCLUDE_DIR NAMES xercesc/ - PATH_SUFFIXES xercesc/xercesc-3.1.2/ + PATH_SUFFIXES "xercesc/xercesc-${XercesC_FIND_VERSION}/" ) # message("XERCESC_INCLUDE_DIR = ${XERCESC_INCLUDE_DIR}") -- GitLab From 4607e3d04a2ef1145969cd18e83f6774c6ca75b9 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 15 Feb 2018 15:05:18 -0700 Subject: [PATCH 027/620] drivers now being loaded properly --- .../objs/DatabaseFactory/DatabaseFactory.cpp | 16 +++++++++++----- isis/src/database/objs/SqlRecord/unitTest.cpp | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp b/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp index c0e6181d81..8048ce1416 100644 --- a/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp +++ b/isis/src/database/objs/DatabaseFactory/DatabaseFactory.cpp @@ -26,10 +26,11 @@ using namespace std; - +#include #include #include #include +#include #include "DatabaseFactory.h" #include "DbAccess.h" @@ -69,8 +70,10 @@ namespace Isis { DatabaseFactory::DatabaseFactory() : _defProfName(""), _profiles(), _defDatabase(""), _dbList() { -// Checks the existance of the Qt application core. This is required in order -// ensure database driver plugins are loaded - if they exist. + // insure the drivers are being loaded + loadDrivers(); + // Checks the existance of the Qt application core. This is required in order + // ensure database driver plugins are loaded - if they exist. QCoreApplication *cApp = QCoreApplication::instance(); if(cApp == 0) { static char **argv = 0; @@ -367,6 +370,8 @@ namespace Isis { */ QSqlDatabase DatabaseFactory::create(const QString &driver, const QString &dbname) { + + // Check driver availability if(!isDriverAvailable(driver)) { QString mess = "Driver [" + driver + "] for database [" + dbname @@ -555,8 +560,7 @@ namespace Isis { dbDrivers.add("SQLite", "QSQLITE"); } - // That's it - return (dbDrivers); + return dbDrivers; } /** @@ -570,6 +574,8 @@ namespace Isis { */ void DatabaseFactory::loadDrivers() { // Currently relying on Qt plugins - but that could change + // Hack to insure drivers are being loaded correctly + QSqlDatabase::drivers(); return; } diff --git a/isis/src/database/objs/SqlRecord/unitTest.cpp b/isis/src/database/objs/SqlRecord/unitTest.cpp index c2d76d8011..13fd088a5d 100644 --- a/isis/src/database/objs/SqlRecord/unitTest.cpp +++ b/isis/src/database/objs/SqlRecord/unitTest.cpp @@ -1,6 +1,8 @@ #include "Database.h" #include +#include +#include #include "FileName.h" #include "SqlQuery.h" @@ -12,7 +14,6 @@ using namespace Isis; int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); - // SQLite FileName dbfile("$TEMPORARY/test.db"); Database testdb("testdb", "SQLite"); -- GitLab From ccf11d377d71160e574791bb369b9c9a65a8f0fa Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 15 Feb 2018 15:26:34 -0700 Subject: [PATCH 028/620] removed part of FileName's unitTest relying on /Users/krodriguez/repos/isis3_cmake/isis/build --- isis/src/base/objs/FileName/FileName.truth | 180 --------------------- isis/src/base/objs/FileName/unitTest.cpp | 14 +- 2 files changed, 1 insertion(+), 193 deletions(-) diff --git a/isis/src/base/objs/FileName/FileName.truth b/isis/src/base/objs/FileName/FileName.truth index ba20af3a5c..6eb84e46e7 100644 --- a/isis/src/base/objs/FileName/FileName.truth +++ b/isis/src/base/objs/FileName/FileName.truth @@ -583,186 +583,6 @@ Running Full Test on [/$TEMPORARY/unitTest.cpp] Original path /$TEMPORARY Exists 0 -Running Safe Test on [$base/testData/isisTruth.cub] - Testing Basics [$base/testData/isisTruth.cub] - Name: isisTruth.cub - Base Name: isisTruth - Original path $base/testData - Extension: cub - Comparison (==): 1 - Comparison (!=): 0 - Exists 1 - - Testing Extension change [$base/testData/isisTruth.cub] - Before modification: $base/testData/isisTruth.cub - Changed: 0 - Unchanged: 1 - Removed Extension: $base/testData/isisTruth - Changed: 1 - Unchanged: 0 - Added Extension [tmp]: $base/testData/isisTruth.tmp - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $base/testData/isisTruth.tmp.jpg - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $base/testData/isisTruth.tmp.jpg - Changed: 0 - Unchanged: 1 - Set Extension [gif]: $base/testData/isisTruth.tmp.gif - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $base/testData/isisTruth.tmp.gif.jpg - Changed: 1 - Unchanged: 0 - Removed Extension: $base/testData/isisTruth.tmp.gif - Changed: 1 - Unchanged: 0 - -Running Safe Test on [${base}/testData/isisTruth.cub] - Testing Basics [${base}/testData/isisTruth.cub] - Name: isisTruth.cub - Base Name: isisTruth - Original path ${base}/testData - Extension: cub - Comparison (==): 1 - Comparison (!=): 0 - Exists 1 - - Testing Extension change [${base}/testData/isisTruth.cub] - Before modification: ${base}/testData/isisTruth.cub - Changed: 0 - Unchanged: 1 - Removed Extension: ${base}/testData/isisTruth - Changed: 1 - Unchanged: 0 - Added Extension [tmp]: ${base}/testData/isisTruth.tmp - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: ${base}/testData/isisTruth.tmp.jpg - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: ${base}/testData/isisTruth.tmp.jpg - Changed: 0 - Unchanged: 1 - Set Extension [gif]: ${base}/testData/isisTruth.tmp.gif - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: ${base}/testData/isisTruth.tmp.gif.jpg - Changed: 1 - Unchanged: 0 - Removed Extension: ${base}/testData/isisTruth.tmp.gif - Changed: 1 - Unchanged: 0 - -Running Safe Test on [$ISISROOT/src/Makefile] - Testing Basics [$ISISROOT/src/Makefile] - Name: Makefile - Base Name: Makefile - Original path $ISISROOT/src - Extension: - Comparison (==): 1 - Comparison (!=): 0 - Exists 1 - - Testing Extension change [$ISISROOT/src/Makefile] - Before modification: $ISISROOT/src/Makefile - Changed: 0 - Unchanged: 1 - Removed Extension: $ISISROOT/src/Makefile - Changed: 0 - Unchanged: 1 - Added Extension [tmp]: $ISISROOT/src/Makefile.tmp - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $ISISROOT/src/Makefile.tmp.jpg - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $ISISROOT/src/Makefile.tmp.jpg - Changed: 0 - Unchanged: 1 - Set Extension [gif]: $ISISROOT/src/Makefile.tmp.gif - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $ISISROOT/src/Makefile.tmp.gif.jpg - Changed: 1 - Unchanged: 0 - Removed Extension: $ISISROOT/src/Makefile.tmp.gif - Changed: 1 - Unchanged: 0 - -Running Safe Test on [$ISISROOT/src/Makefile.elifekaM] - Testing Basics [$ISISROOT/src/Makefile.elifekaM] - Name: Makefile.elifekaM - Base Name: Makefile - Original path $ISISROOT/src - Extension: elifekaM - Comparison (==): 1 - Comparison (!=): 0 - Exists 0 - - Testing Extension change [$ISISROOT/src/Makefile.elifekaM] - Before modification: $ISISROOT/src/Makefile.elifekaM - Changed: 0 - Unchanged: 1 - Removed Extension: $ISISROOT/src/Makefile - Changed: 1 - Unchanged: 0 - Added Extension [tmp]: $ISISROOT/src/Makefile.tmp - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $ISISROOT/src/Makefile.tmp.jpg - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $ISISROOT/src/Makefile.tmp.jpg - Changed: 0 - Unchanged: 1 - Set Extension [gif]: $ISISROOT/src/Makefile.tmp.gif - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: $ISISROOT/src/Makefile.tmp.gif.jpg - Changed: 1 - Unchanged: 0 - Removed Extension: $ISISROOT/src/Makefile.tmp.gif - Changed: 1 - Unchanged: 0 - -Running Safe Test on [/$TEMPORARY/unitTest.cpp] - Testing Basics [/$TEMPORARY/unitTest.cpp] - Name: unitTest.cpp - Base Name: unitTest - Original path /$TEMPORARY - Extension: cpp - Comparison (==): 1 - Comparison (!=): 0 - Exists 0 - - Testing Extension change [/$TEMPORARY/unitTest.cpp] - Before modification: /$TEMPORARY/unitTest.cpp - Changed: 0 - Unchanged: 1 - Removed Extension: /$TEMPORARY/unitTest - Changed: 1 - Unchanged: 0 - Added Extension [tmp]: /$TEMPORARY/unitTest.tmp - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: /$TEMPORARY/unitTest.tmp.jpg - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: /$TEMPORARY/unitTest.tmp.jpg - Changed: 0 - Unchanged: 1 - Set Extension [gif]: /$TEMPORARY/unitTest.tmp.gif - Changed: 1 - Unchanged: 0 - Added Extension [jpg]: /$TEMPORARY/unitTest.tmp.gif.jpg - Changed: 1 - Unchanged: 0 - Removed Extension: /$TEMPORARY/unitTest.tmp.gif - Changed: 1 - Unchanged: 0 - Testing temporary file name placement Input name and extension : $TEMPORARY/tttt.tmp Extension: : tmp diff --git a/isis/src/base/objs/FileName/unitTest.cpp b/isis/src/base/objs/FileName/unitTest.cpp index 026748ccf6..3cf67d1439 100644 --- a/isis/src/base/objs/FileName/unitTest.cpp +++ b/isis/src/base/objs/FileName/unitTest.cpp @@ -40,18 +40,6 @@ int main(int argc, char *argv[]) { TestExpanded("\t", fileToTest); } - // Variable expansion will change truth data on these - QStringList filesToTestSafely; - filesToTestSafely << "$base/testData/isisTruth.cub" << "${base}/testData/isisTruth.cub" - << "$ISISROOT/src/Makefile" << "$ISISROOT/src/Makefile.elifekaM" - << "/$TEMPORARY/unitTest.cpp"; - - foreach (QString fileToTest, filesToTestSafely) { - cout << "Running Safe Test on [" << qPrintable(fileToTest) << "]" << endl; - TestGenericAccessors("\t", fileToTest, false); - TestExtensionChanges("\t", fileToTest, false); - } - // Test temp files thoroughly cout << "Testing temporary file name placement" << endl; QString tempFileNameTestStr = "$TEMPORARY/tttt.tmp"; @@ -286,7 +274,7 @@ void TestExtensionChanges(QString prefix, QString name, bool showExpandedValues) if (!showExpandedValues) { toStringMethod = &FileName::original; } - + cout << prefix << "Testing Extension change [" << name << "]" << endl; cout << prefix << "\tBefore modification: " << (test.*toStringMethod)() << endl; cout << prefix << "\t\tChanged: " << (beforeLastChange != test) << endl; -- GitLab From f4ff61166331db9f947e6426ab719bda27f60cb3 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 15 Feb 2018 15:31:14 -0700 Subject: [PATCH 029/620] updated IException truth to match new paths --- .../src/base/objs/IException/IException.truth | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/isis/src/base/objs/IException/IException.truth b/isis/src/base/objs/IException/IException.truth index 64dbdb377e..b7e7126200 100644 --- a/isis/src/base/objs/IException/IException.truth +++ b/isis/src/base/objs/IException/IException.truth @@ -34,7 +34,7 @@ Group = Error Class = "USER ERROR" Code = 2 Message = "Testing user error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 63 End_Group @@ -42,7 +42,7 @@ Group = Error Program = Unknown Code = 1 Message = "Testing unknown error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 50 End_Group @@ -50,7 +50,7 @@ Group = Error Program = Unknown Class = "USER ERROR" Code = 2 - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 38 End_Group @@ -82,11 +82,11 @@ what(): Test Error 7 print(): -**I/O ERROR** Testing I/O error in unitTest.cpp at 88. -**PROGRAMMER ERROR** Testing programmer error in unitTest.cpp at 75. -**USER ERROR** Testing user error in unitTest.cpp at 63. -**ERROR** Testing unknown error in unitTest.cpp at 50. -**USER ERROR** in unitTest.cpp at 38. +**I/O ERROR** Testing I/O error in ../src/base/objs/IException/unitTest.cpp at 88. +**PROGRAMMER ERROR** Testing programmer error in ../src/base/objs/IException/unitTest.cpp at 75. +**USER ERROR** Testing user error in ../src/base/objs/IException/unitTest.cpp at 63. +**ERROR** Testing unknown error in ../src/base/objs/IException/unitTest.cpp at 50. +**USER ERROR** in ../src/base/objs/IException/unitTest.cpp at 38. **USER ERROR** what(): **I/O ERROR** Testing I/O error. @@ -125,11 +125,11 @@ Test Throwing Error: Rethrow and print Test Preference 'FileLine' Turned ON -- print(): -**I/O ERROR** Testing I/O error in unitTest.cpp at 88. -**PROGRAMMER ERROR** Testing programmer error in unitTest.cpp at 75. -**USER ERROR** Testing user error in unitTest.cpp at 63. -**ERROR** Testing unknown error in unitTest.cpp at 50. -**USER ERROR** in unitTest.cpp at 38. +**I/O ERROR** Testing I/O error in ../src/base/objs/IException/unitTest.cpp at 88. +**PROGRAMMER ERROR** Testing programmer error in ../src/base/objs/IException/unitTest.cpp at 75. +**USER ERROR** Testing user error in ../src/base/objs/IException/unitTest.cpp at 63. +**ERROR** Testing unknown error in ../src/base/objs/IException/unitTest.cpp at 50. +**USER ERROR** in ../src/base/objs/IException/unitTest.cpp at 38. **USER ERROR** Turned OFF -- print(): @@ -171,7 +171,7 @@ Group = Error Class = "I/O ERROR" Code = 4 Message = "Testing I/O error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 88 End_Group @@ -180,7 +180,7 @@ Group = Error Class = "PROGRAMMER ERROR" Code = 3 Message = "Testing programmer error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 75 End_Group @@ -189,7 +189,7 @@ Group = Error Class = "USER ERROR" Code = 2 Message = "Testing user error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 63 End_Group @@ -197,7 +197,7 @@ Group = Error Program = Unknown Code = 1 Message = "Testing unknown error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 50 End_Group @@ -205,7 +205,7 @@ Group = Error Program = Unknown Class = "USER ERROR" Code = 2 - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 38 End_Group @@ -222,7 +222,7 @@ Group = Error Class = "I/O ERROR" Code = 4 Message = "Testing I/O error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 88 End_Group @@ -231,7 +231,7 @@ Group = Error Class = "PROGRAMMER ERROR" Code = 3 Message = "Testing programmer error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 75 End_Group @@ -240,7 +240,7 @@ Group = Error Class = "USER ERROR" Code = 2 Message = "Testing user error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 63 End_Group @@ -248,7 +248,7 @@ Group = Error Program = Unknown Code = 1 Message = "Testing unknown error" - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 50 End_Group @@ -256,7 +256,7 @@ Group = Error Program = Unknown Class = "USER ERROR" Code = 2 - File = unitTest.cpp + File = ../src/base/objs/IException/unitTest.cpp Line = 38 End_Group -- GitLab From 6b6609da734bc76dd5be3adbec1cef8f72b04300 Mon Sep 17 00:00:00 2001 From: Summer Stapleton Date: Fri, 16 Feb 2018 13:20:59 -0700 Subject: [PATCH 030/620] Added handling of .dat or .img file extensions for image file. --- isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp | 13 ++++++++++--- isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml | 3 +++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp index 6754aded2b..4b4f5511fb 100644 --- a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp +++ b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp @@ -27,10 +27,17 @@ void IsisMain() { try { ProcessImport importer; translateCoreInfo(xmlFileName, importer); - // fails - importer.SetInputFile(xmlFileName.removeExtension().addExtension("dat").expanded()); + + // Need to check for original file extension as well as file extension from tgocassisrdrgen + // for re-imports + try{ + importer.SetInputFile(xmlFileName.removeExtension().addExtension("dat").expanded()); + } + catch (IException e) { + importer.SetInputFile(xmlFileName.removeExtension().addExtension("img").expanded()); + } Cube *outputCube = importer.SetOutputCube("TO"); - // fails above + translateLabels(xmlFileName, outputCube); FileName outputCubeFileName(ui.GetFileName("TO")); diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml index 7e910eb6d2..ef253bcfde 100644 --- a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml +++ b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml @@ -106,6 +106,9 @@ Added check to verify input input xml file corresponds to valid filter image. + + Added handling for image file extesnions of either .dat or .img. Fixs #5334. + -- GitLab From 3ff8728f9aaa77a0845812453daabb466f8e9bd8 Mon Sep 17 00:00:00 2001 From: Summer Stapleton Date: Fri, 16 Feb 2018 13:42:49 -0700 Subject: [PATCH 031/620] Revert "Updated XmlToPvlTranslationManager to search for multiple InputPosition keywords before failing" This reverts commit 15b4c7c3b4f0754d8ca43176ea62a184f9cc2011. --- .../XmlToPvlTranslationManager.cpp | 54 ++----------------- 1 file changed, 4 insertions(+), 50 deletions(-) diff --git a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp index 4edf9a0d6c..fe4b7e6428 100644 --- a/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp +++ b/isis/src/base/objs/XmlToPvlTranslationManager/XmlToPvlTranslationManager.cpp @@ -240,52 +240,7 @@ namespace Isis { cout << endl << "Finding input element:" << endl << endl; cout << inputParentElement.tagName() << endl; } - - Pvl::ConstPvlKeywordIterator it = transGroup.findKeyword("InputPosition", - transGroup.begin(), - transGroup.end()); - - QDomElement oldInputParentElement = inputParentElement; - QString childName; - while(it != transGroup.end()) { - const PvlKeyword &inputPosition = *it; - inputParentElement = oldInputParentElement; - - for (int i = 0; i < inputPosition.size(); i++) { - childName = inputPosition[i]; - inputParentElement = inputParentElement.firstChildElement(childName); - if(inputParentElement.isNull()) { - break; - } - if (isDebug) { - indent += " "; - cout << indent << inputParentElement.tagName() << endl; - } - } - if (!inputParentElement.isNull()) { - break; - } - it = transGroup.findKeyword("InputPosition", it + 1, transGroup.end()); - } - - if (inputParentElement.isNull()) { - if (hasInputDefault(outputName)) { - if (isDebug) { - cout << endl << "Could not traverse input position, " << - "using default value: " << - InputDefault(outputName) << endl; - } - return PvlTranslationTable::Translate( outputName ); - } - else { - QString msg = "Failed traversing input position. [" + - inputPosition.name() + "] element does not have a child element named [" + - childName + "]."; - throw IException(IException::Unknown, msg, _FILEINFO_); - } - } - -/* for (int i = 0; i < inputPosition. csize(); i++) { + for (int i = 0; i < inputPosition.size(); i++) { QString childName = inputPosition[i]; inputParentElement = inputParentElement.firstChildElement(childName); if(inputParentElement.isNull()) { @@ -299,7 +254,8 @@ namespace Isis { } else { QString msg = "Failed traversing input position. [" + - inputPosition.name() + "] element does not have a child element named [" + + inputParentElement.parentNode().toElement().tagName() + + "] element does not have a child element named [" + childName + "]."; throw IException(IException::Unknown, msg, _FILEINFO_); } @@ -308,9 +264,7 @@ namespace Isis { indent += " "; cout << indent << inputParentElement.tagName() << endl; } - }*/ - - + } QDomElement inputKeyElement = inputParentElement.firstChildElement(inputKey); if (isDebug) { indent += " "; -- GitLab From 3a90727c1cda67e94bbb942f692b10f3dedb19ef Mon Sep 17 00:00:00 2001 From: Oxez Date: Sat, 17 Feb 2018 14:24:58 -0700 Subject: [PATCH 032/620] Changes output directory for apptests and help apps find TestPreferences --- isis/cmake/RunMakeFileTest.cmake | 16 +++-- isis/make/isismake.tsts | 102 +++++++++++++++---------------- 2 files changed, 58 insertions(+), 60 deletions(-) diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake index 8d221c9e22..30e8480fac 100644 --- a/isis/cmake/RunMakeFileTest.cmake +++ b/isis/cmake/RunMakeFileTest.cmake @@ -49,21 +49,21 @@ function(run_app_makefile_test makefile inputFolder outputFolder truthFolder bin # set(code "") # execute_process(COMMAND rm -rf ${outputFolder}) # execute_process(COMMAND rm -f ${logFile}) - + execute_process(COMMAND make test WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) - + if (result MATCHES "OK") set(failed "OFF") else() - set(failed "ON") + set(failed "ON") endif() - + # If any file failed, the test is a failure. if(${failed}) message(FATAL_ERROR "Test failed.") - endif() - + endif() + endfunction() @@ -76,6 +76,4 @@ endfunction() # Needed for IsisPreferences and other test data to be found set(ENV{ISIS3DATA} "${DATA_ROOT}") -run_app_makefile_test(${MAKEFILE} ${INPUT_DIR} ${OUTPUT_DIR} ${TRUTH_DIR} ${BIN_DIR}) - - +run_app_makefile_test(${MAKEFILE} ${INPUT_DIR} ${testOutputDir} ${TRUTH_DIR} ${BIN_DIR}) diff --git a/isis/make/isismake.tsts b/isis/make/isismake.tsts index 76155b0af9..ce9cd55351 100644 --- a/isis/make/isismake.tsts +++ b/isis/make/isismake.tsts @@ -83,7 +83,7 @@ endif # Make sure all apps use the correct preferences file when testing, unless # they have set NOPREFERENCES. This is valid for non-Isis apps. ifeq ($(origin NOPREFERENCES), undefined) - APPNAME += -preference=$(ISISROOT)/src/base/objs/Preference/TestPreferences + APPNAME += -preference=$(ISISROOT)/TestPreferences endif # set the output variable to the output directory @@ -105,7 +105,7 @@ FILECOUNTMISMATCH =echo Failed ... Number of files in truth and output folder do NOTALLMATCH =echo Failed ... Not all files in truth and output folders match # Set test arguments for use in category tests -TSTARGS = -preference=$(ISISROOT)/src/base/objs/Preference/TestPreferences +TSTARGS = -preference=$(ISISROOT)/TestPreferences DIRPATTERN=2774 FILEPATTERN=2664 @@ -113,7 +113,7 @@ DIRLISTPATTERN="drwxrwsr--" #---------------------------------------------------------------------------- # Target = help -# Dependencies = +# Dependencies = # # Displays a list of targets and their descriptions. #---------------------------------------------------------------------------- @@ -190,19 +190,19 @@ test: FORCE clean if [ "$(findstring $(TESTNOCLEAN), $(MODE))" != "$(TESTNOCLEAN)" ]; \ then \ $(MAKE) ccsafeclean; \ - fi; - + fi; + #------------------------------------------------------------------------- --- -# Target = compare -# Dependencies = All files in the truth and output directories -# -# Iterates over the list of files in the truth directory and -# compares the files against the files in the output directory. -# If successful (indicated by presence of casesucceeded.txt), -# prints success message. If not, prints all errors that were -# encountered (found in errors.txt). +# Target = compare +# Dependencies = All files in the truth and output directories +# +# Iterates over the list of files in the truth directory and +# compares the files against the files in the output directory. +# If successful (indicated by presence of casesucceeded.txt), +# prints success message. If not, prints all errors that were +# encountered (found in errors.txt). #------------------------------------------------------------------------- --- -compare: FORCE +compare: FORCE if [ -d "$(OUTPUT)" ]; then \ if [ -d "$(TRUTH)" ]; then \ TRUTHDIR=`$(LS) $(TRUTH)`; \ @@ -249,7 +249,7 @@ compare: FORCE # Target = comparefiles # Dependencies = All files in the truth and output directories # -# Iterates over the list of files in the truth directory and +# Iterates over the list of files in the truth directory and # compares the files against the files in the output # directory. If there are any files that are not recognized # then an unknown file message is printed. If and only if all @@ -260,7 +260,7 @@ compare: FORCE # # Some parts of this target are not very straightforward. For comparing cubes, # users may specify make variables within their tests to indicate tolerance or -# to ignore special pixels when running cubediff +# to ignore special pixels when running cubediff # (i.e. test_cube.cub.TOLERANCE=0.0000001). The problem here is that within # this target, we have the current filename that is being compared stored in a # bash variable. We know that the *make* tolerance variable, if it exists, will @@ -279,7 +279,7 @@ compare: FORCE # # The workaround is to use make's special variable that is a space-separated # list of currently defined make variable *names* (NOT values). This variable -# is .VARIABLES. The names of each of the currently defined make .TOLERANCE +# is .VARIABLES. The names of each of the currently defined make .TOLERANCE # variables are extracted from this list, and their values are looked up as # well. A new bash variable is used to hold these name/values pairs for each of # the tolerances (the name and value is separated by a semicolon). The list of @@ -292,11 +292,11 @@ compare: FORCE # This is only a workaround. The real solution would be to completely get rid # of make variable tolerances from all tests and force the use of .DIFF files # (like pvldiff uses). However, around 138 tests are currently using make -# variables to do this, so it would be a considerable undertaking. -# -# +# variables to do this, so it would be a considerable undertaking. +# +# # 2012-06-26 - Jeannie Backer - Sent stderr of pvldiff and cnetdiff to error -# files instead of /dev/null. If errors exist, test fails and +# files instead of /dev/null. If errors exist, test fails and # error messages are reported to stdout. This was already # being handled for cubediff. #---------------------------------------------------------------------------- @@ -502,7 +502,7 @@ comparefiles: FORCE #---------------------------------------------------------------------------- # Target = truthdata -# Dependencies = +# Dependencies = # # Copies the contents of the output directory to the truth # directory. If the truth directory doesn't exist it is created. @@ -514,10 +514,10 @@ truthdata: FORCE #---------------------------------------------------------------------------- # Target = ostruthdata -# Dependencies = +# Dependencies = # # Copies the contents of the output directory to the truth -# directory. If the truth directory corresponding to the +# directory. If the truth directory corresponding to the # OS the test is being run on doesn't exist it is created. #---------------------------------------------------------------------------- ostruthdata: FORCE @@ -536,12 +536,12 @@ ostruthdata: FORCE # Target = output # Dependencies = FORCE commands modifyFiles # -# Masks target command with a better name to just run the -# commands. If the output directory doesn't exist it is +# Masks target command with a better name to just run the +# commands. If the output directory doesn't exist it is # created. The force target is needed because the directory # output causes make to check the directory output if there # is no dependency. Runs the commands and then -# modifies the output files based on the variables set +# modifies the output files based on the variables set # in the test. #---------------------------------------------------------------------------- output: FORCE clean @@ -550,14 +550,14 @@ output: FORCE clean $(MAKE) modifyFiles; #---------------------------------------------------------------------------- -# This target is needed to make the output target work. When used as a +# This target is needed to make the output target work. When used as a # dependency to a target, it forces make to always execute that target. #---------------------------------------------------------------------------- FORCE: #---------------------------------------------------------------------------- # Target = clean -# Dependencies = +# Dependencies = # # Deletes the output directory and all temporary files. #---------------------------------------------------------------------------- @@ -567,7 +567,7 @@ clean: FORCE #---------------------------------------------------------------------------- # Target = ccsafeclean -# Dependencies = +# Dependencies = # # Deletes the output directory and all temporary files except the code # coverage files. @@ -580,11 +580,11 @@ ccsafeclean: FORCE # Target = modifyFiles # Dependencies = modText modBin # -# Performs the modifications to the files in the output -# directory. Iterates over the output files and modifies +# Performs the modifications to the files in the output +# directory. Iterates over the output files and modifies # the file based on variables such as .SKIPLINES # Utilizes the modText and modBin targets to carryout -# the modifactions. +# the modifactions. #---------------------------------------------------------------------------- modifyFiles: FORCE files="$(notdir $(wildcard $(OUTPUT)/*.txt) )"; \ @@ -602,7 +602,7 @@ modifyFiles: FORCE #---------------------------------------------------------------------------- # Target = modText -# Dependencies = +# Dependencies = # # Handles the modifactions of text files in the output # directory. Looks at variables .SKIPLINES and .IGNORELINES. @@ -637,12 +637,12 @@ modText: FORCE #---------------------------------------------------------------------------- # Target = modBin -# Dependencies = +# Dependencies = # # Handles the modifactions of bin files in the output # directory. Looks at variables .BINSKIP and .BINCOUNT. # The variable FILE must be set to the name of the file in -# the output directory to be modified. +# the output directory to be modified. #---------------------------------------------------------------------------- modBin: FORCE if [ "$(FILE)" != "" ]; \ @@ -665,7 +665,7 @@ modBin: FORCE # Target = checkin # Dependencies = copyInTruth # -# Copies data from the test into the test data area. +# Copies data from the test into the test data area. # ISIS3TESTDATA needs to be set to know where to copy # data for this test to. Data in the input and all of the truth # directories are copied to the test data area. @@ -720,12 +720,12 @@ checkin: FORCE #---------------------------------------------------------------------------- # Target = copyInTruth -# Dependencies = +# Dependencies = # -# Copies all of the truth directories to the value in the +# Copies all of the truth directories to the value in the # variable DEST. Iterates over all of the directories in the # test that have truth in it. Creates the directory in DEST -# and then copies all of the files in the truth directory to +# and then copies all of the files in the truth directory to # directory in DEST. #---------------------------------------------------------------------------- copyInTruth: FORCE @@ -744,11 +744,11 @@ copyInTruth: FORCE # Target = checkout # Dependencies = dirs copyOutTruth # -# Copies data from the test data area into the test. +# Copies data from the test data area into the test. # ISIS3TESTDATA needs to be set to know where to get the # test data from. Uses the TESTDATA_PATH to get the data -# for this test. Copies the files from the input directory in the -# TESTDATA_PATH to the input directory of the test. Then +# for this test. Copies the files from the input directory in the +# TESTDATA_PATH to the input directory of the test. Then # copies all of the truth directories and their contents to the test. # If the input or truth directories exist in the local test a warning # is printed and no copying takes place. @@ -781,10 +781,10 @@ checkout: FORCE #---------------------------------------------------------------------------- # Target = copyOutTruth -# Dependencies = +# Dependencies = # -# Copies all of the truth directories from the value in the -# variable DEST. Iterates over all of the directories in +# Copies all of the truth directories from the value in the +# variable DEST. Iterates over all of the directories in # DEST that have truth in it. Creates the directory in test # and then copies all of the files from the DEST directory # to the one in the test. @@ -850,7 +850,7 @@ release: FORCE clean #---------------------------------------------------------------------------- # Target = dirs -# Dependencies = +# Dependencies = # # Creates the necessary directories for the test. #---------------------------------------------------------------------------- @@ -859,14 +859,14 @@ dirs: FORCE #---------------------------------------------------------------------------- # Target=changePerms -# Dependencies = +# Dependencies = # # Changes the directory permissions starting at DEST_PATH # and preceding up the directory path till a directory is found -# that matches the DIRLISTPATTERN variable. Both the +# that matches the DIRLISTPATTERN variable. Both the # LOOKUP and DEST_PATH variables need to be set in order -# to work properly. LOOKUP is the first directory to start checking -# folder permissions on, and DEST_PATH is the full directory +# to work properly. LOOKUP is the first directory to start checking +# folder permissions on, and DEST_PATH is the full directory # path above the LOOKUP directory. #---------------------------------------------------------------------------- changePerms: FORCE -- GitLab From 44443b63b7c8300d6f155c47453ec7cca71c1054 Mon Sep 17 00:00:00 2001 From: Cole <34170587+cneubauerUSGS@users.noreply.github.com> Date: Sat, 17 Feb 2018 15:56:15 -0700 Subject: [PATCH 033/620] Changed Command To Execute App Tests Previous change ruined the command and stopped execution of App Tests --- isis/cmake/RunMakeFileTest.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake index 30e8480fac..c510e64f4a 100644 --- a/isis/cmake/RunMakeFileTest.cmake +++ b/isis/cmake/RunMakeFileTest.cmake @@ -76,4 +76,4 @@ endfunction() # Needed for IsisPreferences and other test data to be found set(ENV{ISIS3DATA} "${DATA_ROOT}") -run_app_makefile_test(${MAKEFILE} ${INPUT_DIR} ${testOutputDir} ${TRUTH_DIR} ${BIN_DIR}) +run_app_makefile_test(${MAKEFILE} ${INPUT_DIR} ${OUTPUT_DIR} ${TRUTH_DIR} ${BIN_DIR}) -- GitLab From e0255d32718120cae453c26554da1b5bf1ff0691 Mon Sep 17 00:00:00 2001 From: Oxez Date: Sun, 18 Feb 2018 11:23:01 -0700 Subject: [PATCH 034/620] Added a copy of 3rdParty dependencies into 3rdParty structure --- isis/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index ea14a0411b..5dcce256ab 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -237,6 +237,14 @@ foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) endif() endforeach() + +# Some unit and app test rely on their plugins being loaded into 3rdParty +# After all the files are in the lib directory do a copy of all the files +execute_process(command mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib/ ${CMAKE_BINARY_DIR}/3rdParty/plugins/) +execute_process(COMMAND cp -r ${CMAKE_BINARY_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/3rdParty/lib/) +execute_process(COMMAND ls ${CMAKE_BINARY_DIR}/lib/ | grep -v '.so' | xargs cp -t ${CMAKE_BINARY_DIR}/3rdParty/lib/) + + # Set up documentation build target. # - This script is called by running "make docs". # - This long call passes all desired variables to the script. -- GitLab From ef572ca3f9623b7ebfe4d6f49eb6fc231bca4d75 Mon Sep 17 00:00:00 2001 From: Oxez Date: Sun, 18 Feb 2018 11:40:59 -0700 Subject: [PATCH 035/620] Same changes but better --- isis/CMakeLists.txt | 15 +++++++-------- isis/cmake/AddIsisModule.cmake | 4 ++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 5dcce256ab..78fbcf686b 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -226,6 +226,10 @@ add_subdirectory(src objects) # Set up third party libraries for installation install_third_party() +# create 3rdParty directory and its subdirectories +execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib ${CMAKE_BINARY_DIR}/3rdParty/plugins) + + # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. # - This is required so that the plugins can be found during unit tests. # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. @@ -234,17 +238,12 @@ foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) execute_process(COMMAND ln -s "${plugin}" ${pluginName} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + + execute_process(COMMAND ln -s "${plugin}" ${pluginName} + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}3rdParty/plugins") endif() endforeach() - -# Some unit and app test rely on their plugins being loaded into 3rdParty -# After all the files are in the lib directory do a copy of all the files -execute_process(command mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib/ ${CMAKE_BINARY_DIR}/3rdParty/plugins/) -execute_process(COMMAND cp -r ${CMAKE_BINARY_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/3rdParty/lib/) -execute_process(COMMAND ls ${CMAKE_BINARY_DIR}/lib/ | grep -v '.so' | xargs cp -t ${CMAKE_BINARY_DIR}/3rdParty/lib/) - - # Set up documentation build target. # - This script is called by running "make docs". # - This long call passes all desired variables to the script. diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 8c3d369fd7..749c56a02a 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -181,6 +181,10 @@ function(add_isis_obj folder reqLibs) cat(${plugins} ${pluginPath}) install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) + set(pluginPath ${CMAKE_BINARY_DIR}/3rdParty/lib/${pluginName}) + cat(${plugins} ${pluginPath}) + install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) + # Record this library name for the caller set(newPluginLib ${libName} PARENT_SCOPE) endif() -- GitLab From 029a4289a63683d295ed2147fb4af14141de0708 Mon Sep 17 00:00:00 2001 From: Oxez Date: Sun, 18 Feb 2018 12:04:30 -0700 Subject: [PATCH 036/620] Changes --- isis/CMakeLists.txt | 14 +++++++------- isis/cmake/AddIsisModule.cmake | 5 ----- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 78fbcf686b..cffc6ff1d9 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -226,10 +226,6 @@ add_subdirectory(src objects) # Set up third party libraries for installation install_third_party() -# create 3rdParty directory and its subdirectories -execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib ${CMAKE_BINARY_DIR}/3rdParty/plugins) - - # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. # - This is required so that the plugins can be found during unit tests. # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. @@ -238,12 +234,16 @@ foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) execute_process(COMMAND ln -s "${plugin}" ${pluginName} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - - execute_process(COMMAND ln -s "${plugin}" ${pluginName} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}3rdParty/plugins") endif() endforeach() + +# Some unit and app test rely on their plugins being loaded into 3rdParty +# After all the files are in the lib directory do a copy of all the files +execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib/ ${CMAKE_BINARY_DIR}/3rdParty/plugins/) +#execute_process(COMMAND cp -r ${CMAKE_BINARY_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/3rdParty/lib/) +execute_process(COMMAND cp ${CMAKE_BINARY_DIR}/lib/* ${CMAKE_BINARY_DIR}/3rdParty/plugins/) + # Set up documentation build target. # - This script is called by running "make docs". # - This long call passes all desired variables to the script. diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 749c56a02a..969036d1ce 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -180,11 +180,6 @@ function(add_isis_obj folder reqLibs) set(pluginPath ${CMAKE_BINARY_DIR}/lib/${pluginName}) cat(${plugins} ${pluginPath}) install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) - - set(pluginPath ${CMAKE_BINARY_DIR}/3rdParty/lib/${pluginName}) - cat(${plugins} ${pluginPath}) - install(PROGRAMS ${pluginPath} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/) - # Record this library name for the caller set(newPluginLib ${libName} PARENT_SCOPE) endif() -- GitLab From f344ad1aa8fd7e09cb785f0c48800a831ac0c739 Mon Sep 17 00:00:00 2001 From: Oxez Date: Sun, 18 Feb 2018 12:09:22 -0700 Subject: [PATCH 037/620] Changes --- isis/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index cffc6ff1d9..a712a9c880 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -226,6 +226,9 @@ add_subdirectory(src objects) # Set up third party libraries for installation install_third_party() +# Some unit and app test rely on a 3rdParty structure and need to be copied +execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib ${CMAKE_BINARY_DIR}/3rdParty/plugins) + # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. # - This is required so that the plugins can be found during unit tests. # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. @@ -234,15 +237,16 @@ foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) execute_process(COMMAND ln -s "${plugin}" ${pluginName} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + execute_process(COMMAND cp ${CMAKE_BINARY_DIR}/lib/${pluginName} ${CMAKE_BINARY_DIR}/3rdParty/plugins/) endif() endforeach() # Some unit and app test rely on their plugins being loaded into 3rdParty # After all the files are in the lib directory do a copy of all the files -execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib/ ${CMAKE_BINARY_DIR}/3rdParty/plugins/) +#execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib/ ${CMAKE_BINARY_DIR}/3rdParty/plugins/) #execute_process(COMMAND cp -r ${CMAKE_BINARY_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/3rdParty/lib/) -execute_process(COMMAND cp ${CMAKE_BINARY_DIR}/lib/* ${CMAKE_BINARY_DIR}/3rdParty/plugins/) +#execute_process(COMMAND cp ${CMAKE_BINARY_DIR}/lib/* ${CMAKE_BINARY_DIR}/3rdParty/plugins/) # Set up documentation build target. # - This script is called by running "make docs". -- GitLab From 2aa509b1c582f3a838727cd47c21f4c4257a6e53 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Sun, 18 Feb 2018 13:14:20 -0700 Subject: [PATCH 038/620] Unit Test and App Test work --- isis/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index a712a9c880..d2904973bd 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -237,7 +237,7 @@ foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) execute_process(COMMAND ln -s "${plugin}" ${pluginName} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - execute_process(COMMAND cp ${CMAKE_BINARY_DIR}/lib/${pluginName} ${CMAKE_BINARY_DIR}/3rdParty/plugins/) + execute_process(COMMAND cp -r ${CMAKE_BINARY_DIR}/lib/${pluginName} ${CMAKE_BINARY_DIR}/3rdParty/plugins/) endif() endforeach() -- GitLab From d614f52fd61db529765027aefa2e46e84f0e664c Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 20 Feb 2018 13:01:40 -0700 Subject: [PATCH 039/620] things and stuff --- isis/cmake/RunUnitTest.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 14bb5fe8fd..e7b69e385d 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -50,7 +50,6 @@ set(comp1 ${outputFile}) set(comp2 ${TRUTH_FILE}) set(exclusionPath ${truthFolder}/unitTest.exclude) if(EXISTS ${exclusionPath}) - message("Using Exlusion file ${exclusionPath}") set(comp1 ${tempDir}/output_exclude.txt) set(comp2 ${tempDir}/truth_exclude.txt) # This throws out all lines containing a word from the exclusion file. -- GitLab From 6ad4aabaac26bc50085dbd48f35df5c1dfe108de Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Tue, 20 Feb 2018 23:32:04 -0700 Subject: [PATCH 040/620] opted for adding an exclude file rather than chaning file info --- isis/src/base/objs/IException/unitTest.exclude | 1 + 1 file changed, 1 insertion(+) create mode 100644 isis/src/base/objs/IException/unitTest.exclude diff --git a/isis/src/base/objs/IException/unitTest.exclude b/isis/src/base/objs/IException/unitTest.exclude new file mode 100644 index 0000000000..220f4aa98a --- /dev/null +++ b/isis/src/base/objs/IException/unitTest.exclude @@ -0,0 +1 @@ +File -- GitLab From fe989c54e84a8a07db9fcf2292ea165a1cebbd51 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Wed, 21 Feb 2018 14:28:26 -0700 Subject: [PATCH 041/620] Cleanup --- isis/CMakeLists.txt | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index d2904973bd..76767dba46 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -227,7 +227,7 @@ add_subdirectory(src objects) install_third_party() # Some unit and app test rely on a 3rdParty structure and need to be copied -execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib ${CMAKE_BINARY_DIR}/3rdParty/plugins) +execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib ${CMAKE_BINARY_DIR}/3rdParty/plugins) # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. # - This is required so that the plugins can be found during unit tests. @@ -241,13 +241,6 @@ foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) endif() endforeach() - -# Some unit and app test rely on their plugins being loaded into 3rdParty -# After all the files are in the lib directory do a copy of all the files -#execute_process(COMMAND mkdir ${CMAKE_BINARY_DIR}/3rdParty ${CMAKE_BINARY_DIR}/3rdParty/lib/ ${CMAKE_BINARY_DIR}/3rdParty/plugins/) -#execute_process(COMMAND cp -r ${CMAKE_BINARY_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/3rdParty/lib/) -#execute_process(COMMAND cp ${CMAKE_BINARY_DIR}/lib/* ${CMAKE_BINARY_DIR}/3rdParty/plugins/) - # Set up documentation build target. # - This script is called by running "make docs". # - This long call passes all desired variables to the script. -- GitLab From aa28c540dd9c73faf648afada8b0c187ae48d4eb Mon Sep 17 00:00:00 2001 From: Oxez Date: Thu, 22 Feb 2018 10:46:28 -0700 Subject: [PATCH 042/620] A bit of a hacky fix for cmake docs --- isis/cmake/BuildDocs.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake index 98ddb27faa..3f8edb541c 100644 --- a/isis/cmake/BuildDocs.cmake +++ b/isis/cmake/BuildDocs.cmake @@ -495,8 +495,12 @@ function(build_docs) message("Building object documentation") build_object_docs() + execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/docBuild) + execute_process(COMMAND cp -rf ${docInstallFolder} ${CMAKE_BINARY_DIR}) + message("Finished building object documentation!") + endfunction(build_docs) -- GitLab From ab7daaa309bb125413d3945bcaedf4ac51f9eccc Mon Sep 17 00:00:00 2001 From: Oxez Date: Thu, 22 Feb 2018 12:09:36 -0700 Subject: [PATCH 043/620] Non hacky fix for docs --- isis/cmake/BuildDocs.cmake | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake index 3f8edb541c..cc47754710 100644 --- a/isis/cmake/BuildDocs.cmake +++ b/isis/cmake/BuildDocs.cmake @@ -460,7 +460,7 @@ function(build_docs) # Set up output directory and a temporary directory for building set(docBuildFolder ${CMAKE_BINARY_DIR}/docBuild) set(appDataFolder ${docBuildFolder}/Application/data) - set(docInstallFolder ${CMAKE_INSTALL_PREFIX}/doc) # Final output documentation + set(docInstallFolder ${CMAKE_BINARY_DIR}/docs) # Final output documentation # Clean up existing files execute_process(COMMAND rm -rf ${docBuildFolder}) @@ -495,8 +495,7 @@ function(build_docs) message("Building object documentation") build_object_docs() - execute_process(COMMAND rm -rf ${CMAKE_BINARY_DIR}/docBuild) - execute_process(COMMAND cp -rf ${docInstallFolder} ${CMAKE_BINARY_DIR}) + install(COMMAND cp -rf ${docInstallFolder} ${CMAKE_INSTALL_PREFIX}) message("Finished building object documentation!") -- GitLab From 3c3a6dcdb1aac001cac28f998975a9086475a650 Mon Sep 17 00:00:00 2001 From: Oxez Date: Thu, 22 Feb 2018 12:17:35 -0700 Subject: [PATCH 044/620] Forgot how install worked for a second --- isis/cmake/BuildDocs.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake index cc47754710..a4e5e3eb1f 100644 --- a/isis/cmake/BuildDocs.cmake +++ b/isis/cmake/BuildDocs.cmake @@ -495,7 +495,7 @@ function(build_docs) message("Building object documentation") build_object_docs() - install(COMMAND cp -rf ${docInstallFolder} ${CMAKE_INSTALL_PREFIX}) + install(DIRECTORY ${docInstallFolder} DESTINATION ${CMAKE_INSTALL_PREFIX}) message("Finished building object documentation!") -- GitLab From 8c6f7b4580e3d09ef00a2b859ab0745533ae57a1 Mon Sep 17 00:00:00 2001 From: Oxez Date: Thu, 22 Feb 2018 12:26:42 -0700 Subject: [PATCH 045/620] Commented code and changed command --- isis/cmake/BuildDocs.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake index a4e5e3eb1f..1335fc5a49 100644 --- a/isis/cmake/BuildDocs.cmake +++ b/isis/cmake/BuildDocs.cmake @@ -495,7 +495,8 @@ function(build_docs) message("Building object documentation") build_object_docs() - install(DIRECTORY ${docInstallFolder} DESTINATION ${CMAKE_INSTALL_PREFIX}) + # copy the built docs in the build directory over to the install directory on install + execute_process(COMMAND cp -rf ${docInstallFolder} ${CMAKE_INSTALL_PREFIX}) message("Finished building object documentation!") -- GitLab From 355ac2aaa015f2138f841c07c8d95e708dd206b6 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 22 Feb 2018 19:46:36 -0700 Subject: [PATCH 046/620] removed from source files --- isis/CMakeLists.txt | 37 +++++++++---------- isis/cmake/FindAllDependencies.cmake | 2 +- isis/cmake/FindSuperLU.cmake | 2 +- isis/cmake/RunUnitTest.cmake | 6 ++- .../apps/autoregtemplate/autoregtemplate.cpp | 2 +- .../base/apps/isisminer/StrategyFactory.cpp | 4 +- .../src/base/objs/Application/Application.cpp | 2 +- .../AtmosModelFactory/AtmosModelFactory.cpp | 2 +- .../objs/AutoRegFactory/AutoRegFactory.cpp | 2 +- .../base/objs/CameraFactory/CameraFactory.cpp | 2 +- isis/src/base/objs/Cube/Cube.cpp | 2 +- .../src/base/objs/Environment/Environment.cpp | 8 ++-- isis/src/base/objs/FileName/FileName.h | 8 ++-- isis/src/base/objs/Gui/Gui.cpp | 2 +- isis/src/base/objs/Gui/GuiCubeParameter.cpp | 2 +- .../src/base/objs/IException/unitTest.exclude | 1 + .../src/base/objs/ImportPdsTable/unitTest.cpp | 2 +- isis/src/base/objs/Isis/Isis.h | 4 -- .../NormModelFactory/NormModelFactory.cpp | 4 +- .../PhotoModelFactory/PhotoModelFactory.cpp | 2 +- isis/src/base/objs/Plugin/Plugin.cpp | 2 +- .../PolygonSeederFactory.cpp | 2 +- isis/src/base/objs/Preference/Preference.cpp | 6 +-- .../objs/ProgramLauncher/ProgramLauncher.cpp | 2 +- .../base/objs/ProgramLauncher/unitTest.cpp | 4 +- .../ProjectionFactory/ProjectionFactory.cpp | 4 +- isis/src/base/objs/UserInterface/unitTest.cpp | 9 +++-- .../InterestOperatorFactory.cpp | 2 +- .../apps/cneteditor/CnetEditorWindow.cpp | 2 +- isis/src/qisis/apps/qmos/qmos.cpp | 2 +- isis/src/qisis/apps/qnet/qnet.cpp | 2 +- isis/src/qisis/apps/qtie/qtie.cpp | 2 +- isis/src/qisis/apps/qview/qview.cpp | 2 +- .../ControlMeasureEditWidget.cpp | 2 +- .../ControlPointEdit/ControlPointEdit.cpp | 2 +- isis/src/qisis/objs/HelpTool/HelpTool.cpp | 2 +- isis/src/qisis/objs/MatchTool/MatchTool.cpp | 2 +- isis/src/qisis/objs/QnetTools/QnetTool.cpp | 2 +- .../system/apps/isiscomplete/isiscomplete.cpp | 2 +- isis/src/viking/apps/vik2isis/vik2isis.cpp | 2 +- isis/src/voyager/apps/voy2isis/voy2isis.cpp | 2 +- 41 files changed, 75 insertions(+), 78 deletions(-) create mode 100644 isis/src/base/objs/IException/unitTest.exclude diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 79d49209c6..acdc254a2a 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -93,7 +93,6 @@ message("Detected Operating System: ${osVersionString}") # as a static library using some specialized code in Utilities.cmake. set(BUILD_SHARED_LIBS ON) - # Specify flags used set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) #set(thirdPartyCppFlags -Wall -ansi -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) @@ -106,7 +105,7 @@ option(buildCore "Build the core ISIS modules" ON ) option(buildMissions "Build the mission specific modules" ON ) option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) option(buildTests "Set up unit, application, and module tests." ON ) - +option(JP2KFLAG "Whether or not to build using JPEG200 support" OFF ) if(EXISTS ${isis3Data}) set(ENV{ISIS3DATA} "${isis3Data}") @@ -157,19 +156,17 @@ include(FindAllDependencies) include_directories(SYSTEM ${ALLINCDIRS}) link_directories(${ALLLIBDIRS}) -# add isis headers - +# inject ISISROOT +add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) +add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) +# add isis headers file(GLOB ISIS_HEADERS ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp) file(COPY ${ISIS_HEADERS} DESTINATION ${CMAKE_BINARY_DIR}/inc) include_directories(${CMAKE_BINARY_DIR}/inc) -# install scripts -# file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/scripts) -# file(COPY ${CMAKE_SOURCE_DIR}/scripts DESTINATION ${CMAKE_INSTALL_PREFIX}) - set(CORE_LIB_NAME isis3) # Specify relative library include paths which will be set up on @@ -225,18 +222,18 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX}) add_subdirectory(src objects) # Set up third party libraries for installation -install_third_party() - -# Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. -# - This is required so that the plugins can be found during unit tests. -# TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. -foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) - get_filename_component(pluginName ${plugin} NAME) - if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) - execute_process(COMMAND ln -s "${plugin}" ${pluginName} - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - endif() -endforeach() +# install_third_party() + +# # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. +# # - This is required so that the plugins can be found during unit tests. +# # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. +# foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) +# get_filename_component(pluginName ${plugin} NAME) +# if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) +# execute_process(COMMAND ln -s "${plugin}" ${pluginName} +# WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") +# endif() +# endforeach() # Set up documentation build target. # - This script is called by running "make docs". diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 80cb9dcecc..adf5c2d9b0 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -18,7 +18,6 @@ if(APPLE) set(PLUGIN_DIR "${thirdPartyDir}/ports/libexec/qt5/plugins") endif(APPLE) -set(JP2KFLAG 1) # Add thirdPartyCppFlags set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) @@ -148,6 +147,7 @@ find_package(Jama REQUIRED) # Only include Kakadu if it is available if(${JP2KFLAG}) + message("ENABLING KAKADU") find_package(Kakadu) endif(${JP2KFLAG}) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 4f06ce7cd1..6f41ea114f 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -11,7 +11,7 @@ find_path(SUPERLU_INCLUDE_DIR ) find_library(SUPERLU_LIBRARY - NAMES superlu_4.3 + NAMES superlu_4.3 superlu ) get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index e7b69e385d..9309ab95ef 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -53,16 +53,18 @@ if(EXISTS ${exclusionPath}) set(comp1 ${tempDir}/output_exclude.txt) set(comp2 ${tempDir}/truth_exclude.txt) # This throws out all lines containing a word from the exclusion file. - execute_process(COMMAND "cat ${outputFile} | grep -v -f ${exclusionPath}" + execute_process(COMMAND cat ${outputFile} COMMAND grep -v -f ${exclusionPath} OUTPUT_FILE "${comp1}") - execute_process(COMMAND "cat ${TRUTH_FILE} | grep -v -f ${exclusionPath}" + execute_process(COMMAND cat ${TRUTH_FILE} COMMAND grep -v -f ${exclusionPath} OUTPUT_FILE "${comp2}") + endif() # Verify that the files are exactly the same execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files ${comp1} ${comp2} RESULT_VARIABLE DIFFERENT) + if(DIFFERENT) message(FATAL_ERROR "Test failed - files differ") # On error the result file is left around to aid in debugging. diff --git a/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp b/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp index 4ce21f69c6..b1184c4e0a 100644 --- a/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp +++ b/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp @@ -11,7 +11,7 @@ void IsisMain() { // Get user interface UserInterface &ui = Application::GetUserInterface(); - Pvl algos("$ISISROOT/lib/AutoReg.plugin"); + Pvl algos(QString(ISISROOT) + "/lib/AutoReg.plugin"); Pvl p; // Begin creating the mapping group diff --git a/isis/src/base/apps/isisminer/StrategyFactory.cpp b/isis/src/base/apps/isisminer/StrategyFactory.cpp index 6ea67e42f0..568cbaa996 100644 --- a/isis/src/base/apps/isisminer/StrategyFactory.cpp +++ b/isis/src/base/apps/isisminer/StrategyFactory.cpp @@ -507,8 +507,8 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; } // Append the ISIS library path - if ( !dirlist.contains("$ISISROOT/lib") ) { - dirlist.push_back("$ISISROOT/lib"); + if ( !dirlist.contains(QString(ISISROOT) + "/lib") ) { + dirlist.push_back(QString(ISISROOT) + "/lib"); } // Attempt to load the library diff --git a/isis/src/base/objs/Application/Application.cpp b/isis/src/base/objs/Application/Application.cpp index 1e32f38704..c40614467b 100644 --- a/isis/src/base/objs/Application/Application.cpp +++ b/isis/src/base/objs/Application/Application.cpp @@ -124,7 +124,7 @@ namespace Isis { Preference::Preferences(f.name() == "unitTest.xml"); if (!f.fileExists()) { - f = "$ISISROOT/bin/xml/" + f.name(); + f = QString(ISISROOT) + "/bin/xml/" + f.name(); if (!f.fileExists()) { QString message = Message::FileOpen(f.expanded()); throw IException(IException::Io, message, _FILEINFO_); diff --git a/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp b/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp index 457798556b..e59a296639 100644 --- a/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp +++ b/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp @@ -83,7 +83,7 @@ namespace Isis { p->read("AtmosModel.plugin"); } else { - p->read("$ISISROOT/lib/AtmosModel.plugin"); + p->read(QString(ISISROOT) + "/lib/AtmosModel.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp b/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp index f2640197e2..2a0ff3f332 100644 --- a/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp +++ b/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp @@ -70,7 +70,7 @@ namespace Isis { p.read("AutoReg.plugin"); } else { - p.read("$ISISROOT/lib/AutoReg.plugin"); + p.read(QString(ISISROOT) + "/lib/AutoReg.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/CameraFactory/CameraFactory.cpp b/isis/src/base/objs/CameraFactory/CameraFactory.cpp index a40bf25881..d6bf74079d 100644 --- a/isis/src/base/objs/CameraFactory/CameraFactory.cpp +++ b/isis/src/base/objs/CameraFactory/CameraFactory.cpp @@ -110,7 +110,7 @@ namespace Isis { if (localFile.fileExists()) m_cameraPlugin.read(localFile.expanded()); - FileName systemFile("$ISISROOT/lib/Camera.plugin"); + FileName systemFile(QString(ISISROOT) + "/lib/Camera.plugin"); if (systemFile.fileExists()) m_cameraPlugin.read(systemFile.expanded()); } diff --git a/isis/src/base/objs/Cube/Cube.cpp b/isis/src/base/objs/Cube/Cube.cpp index 1079e499ee..7456c9dab6 100644 --- a/isis/src/base/objs/Cube/Cube.cpp +++ b/isis/src/base/objs/Cube/Cube.cpp @@ -2106,7 +2106,7 @@ namespace Isis { parameters += " to=" + tempCube.expanded(); if (iApp == NULL) { - QString command = "$ISISROOT/bin/pds2isis " + parameters; + QString command = QString(ISISROOT) + "/bin/pds2isis " + parameters; ProgramLauncher::RunSystemCommand(command); } else { diff --git a/isis/src/base/objs/Environment/Environment.cpp b/isis/src/base/objs/Environment/Environment.cpp index b0d5726d75..06cab9f5ad 100644 --- a/isis/src/base/objs/Environment/Environment.cpp +++ b/isis/src/base/objs/Environment/Environment.cpp @@ -136,7 +136,7 @@ namespace Isis { * @returns the Isis version in the format isis?.?.?.?qualifier | date */ QString Environment::isisVersion() { - TextFile versionFile("$ISISROOT/version"); + TextFile versionFile(QString(ISISROOT) + "/version"); QString line1, line2, line3, line4; versionFile.GetLine(line1); versionFile.GetLine(line2); @@ -148,7 +148,7 @@ namespace Isis { line1 = validPartOfLine.cap(); } else { - IString msg = "$ISISROOT/version line 1, no valid text found"; + IString msg = QString(ISISROOT) + "/version line 1, no valid text found"; throw IException(IException::Programmer, msg, _FILEINFO_); } @@ -156,7 +156,7 @@ namespace Isis { line2 = validPartOfLine.cap(); } else { - IString msg = "$ISISROOT/version line 2, no valid text found"; + IString msg = QString(ISISROOT) + "/version line 2, no valid text found"; throw IException(IException::Programmer, msg, _FILEINFO_); } @@ -164,7 +164,7 @@ namespace Isis { line4 = validPartOfLine.cap(); } else { - IString msg = "$ISISROOT/version line 4, no valid text found"; + IString msg = QString(ISISROOT) + "/version line 4, no valid text found"; throw IException(IException::Programmer, msg, _FILEINFO_); } diff --git a/isis/src/base/objs/FileName/FileName.h b/isis/src/base/objs/FileName/FileName.h index abfcdfbf42..417632d25f 100644 --- a/isis/src/base/objs/FileName/FileName.h +++ b/isis/src/base/objs/FileName/FileName.h @@ -234,7 +234,7 @@ namespace Isis { * @returns QString *
        *   for a full file specification of:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        *   expanded() gives:
        *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
        * 
@@ -248,9 +248,9 @@ namespace Isis { * @returns QString containing every character in the file name and the path *
        *   for a full file specification of:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        *   original() gives:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        * 
*/ QString original() const; @@ -402,7 +402,7 @@ namespace Isis { * @returns QString *
        *   for a full file specification of:
-       *    "$ISISROOT/tmp/Peaks.cub+Bsq"
+       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
        *   toString() gives:
        *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
        * 
diff --git a/isis/src/base/objs/Gui/Gui.cpp b/isis/src/base/objs/Gui/Gui.cpp index a9436ae8a2..6cb179ac9d 100644 --- a/isis/src/base/objs/Gui/Gui.cpp +++ b/isis/src/base/objs/Gui/Gui.cpp @@ -876,7 +876,7 @@ namespace Isis { // Show help for the current app void Gui::AboutProgram() { Isis::FileName file((QString) - "$ISISROOT/doc/Application/presentation/PrinterFriendly/" + + QString(ISISROOT) + "/doc/Application/presentation/PrinterFriendly/" + Isis::Application::GetUserInterface().ProgramName() + "/" + Isis::Application::GetUserInterface().ProgramName() + diff --git a/isis/src/base/objs/Gui/GuiCubeParameter.cpp b/isis/src/base/objs/Gui/GuiCubeParameter.cpp index 34eca24fad..1c2f7721c2 100644 --- a/isis/src/base/objs/Gui/GuiCubeParameter.cpp +++ b/isis/src/base/objs/Gui/GuiCubeParameter.cpp @@ -152,7 +152,7 @@ namespace Isis { temp.close(); // Open the cube in Qview - QString command = "$ISISROOT/bin/qview " + cubeName + " &"; + QString command = QString(ISISROOT) + "/bin/qview " + cubeName + " &"; ProgramLauncher::RunSystemCommand(command); } // Throw an error if no cube name was entered diff --git a/isis/src/base/objs/IException/unitTest.exclude b/isis/src/base/objs/IException/unitTest.exclude new file mode 100644 index 0000000000..220f4aa98a --- /dev/null +++ b/isis/src/base/objs/IException/unitTest.exclude @@ -0,0 +1 @@ +File diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.cpp b/isis/src/base/objs/ImportPdsTable/unitTest.cpp index f34a8caacd..39eda92fbc 100644 --- a/isis/src/base/objs/ImportPdsTable/unitTest.cpp +++ b/isis/src/base/objs/ImportPdsTable/unitTest.cpp @@ -91,7 +91,7 @@ class ImportPdsTableTester : public ImportPdsTable { */ int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); - Isis::FileName data("$ISISROOT/../src/base/objs/ImportPdsTable/data/"); + Isis::FileName data(QString(ISISROOT) + "/src/base/objs/ImportPdsTable/data/"); QString inputFile = data.expanded() + "VIR_IR_1A_1_332974737_1_HK.LBL"; if (--argc == 1) { inputFile = argv[1]; } diff --git a/isis/src/base/objs/Isis/Isis.h b/isis/src/base/objs/Isis/Isis.h index df6889d3e2..eb0cd853d0 100644 --- a/isis/src/base/objs/Isis/Isis.h +++ b/isis/src/base/objs/Isis/Isis.h @@ -120,10 +120,6 @@ int main(int argc, char *argv[]) { Isis::Application::p_applicationForceGuiApp = true; #endif - // Add the plugin directory so QT looks at the Isis plugin dir - Isis::FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); - QCoreApplication::addLibraryPath(qtpluginpath.expanded()); - Isis::Application *app = new Isis::Application(argc, argv); app->RegisterGuiHelpers(GuiHelpers()); int status = app->Run(APPLICATION); diff --git a/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp b/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp index 9a043a7729..a5770b36fc 100644 --- a/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp +++ b/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp @@ -73,7 +73,7 @@ namespace Isis { p->read("NormModel.plugin"); } else { - p->read("$ISISROOT/lib/NormModel.plugin"); + p->read(QString(ISISROOT) + "/lib/NormModel.plugin"); } // Get the algorithm specific plugin and return it @@ -129,7 +129,7 @@ namespace Isis { p->read("NormModel.plugin"); } else { - p->read("$ISISROOT/lib/NormModel.plugin"); + p->read(QString(ISISROOT) + "/lib/NormModel.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp b/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp index a550e209e2..082bf1f14a 100644 --- a/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp +++ b/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp @@ -73,7 +73,7 @@ namespace Isis { p->read("PhotoModel.plugin"); } else { - p->read("$ISISROOT/lib/PhotoModel.plugin"); + p->read(QString(ISISROOT) + "/lib/PhotoModel.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/Plugin/Plugin.cpp b/isis/src/base/objs/Plugin/Plugin.cpp index a36ec5b2c1..a3141aec72 100644 --- a/isis/src/base/objs/Plugin/Plugin.cpp +++ b/isis/src/base/objs/Plugin/Plugin.cpp @@ -69,7 +69,7 @@ namespace Isis { bool loadedOk = lib.load(); if(!loadedOk) { - path = "$ISISROOT/lib/"; + path = QString(ISISROOT) + "/lib/"; libraryFile = path + library; } diff --git a/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp b/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp index 6c527fb2cc..4413a3ed51 100644 --- a/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp +++ b/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp @@ -61,7 +61,7 @@ namespace Isis { p.read("PolygonSeeder.plugin"); } else { - p.read("$ISISROOT/lib/PolygonSeeder.plugin"); + p.read(QString(ISISROOT) + "/lib/PolygonSeeder.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index 7056379210..59ddfc8269 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -115,11 +115,11 @@ namespace Isis { // If its a unitTest then load with the unitTest preference file if(unitTest) { - p_preference->Load("$ISISROOT/TestPreferences"); + p_preference->Load(QString(ISISROOT) + "/TestPreferences"); } // Otherwise load the Isis system and personal preferences. else { - p_preference->Load("$ISISROOT/IsisPreferences"); + p_preference->Load(QString(ISISROOT) + "/IsisPreferences"); Isis::FileName userPref("$HOME/.Isis/IsisPreferences"); if(userPref.fileExists()) { @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load("$ISISROOT/../src/base/objs/Preference/TestPreferences"); + p_preference->Load(QString(ISISROOT) + "/src/base/objs/Preference/TestPreferences"); } return *p_preference; diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp index 495b22998b..4862ab6417 100644 --- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp +++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp @@ -53,7 +53,7 @@ namespace Isis { void ProgramLauncher::RunIsisProgram(QString programName, QString parameters) { FileName program(programName); - FileName isisExecutableFileName("$ISISROOT/bin/" + program.name()); + FileName isisExecutableFileName(QString(ISISROOT) + "/bin/" + program.name()); bool isIsisProgram = false; if(isisExecutableFileName.fileExists()) { diff --git a/isis/src/base/objs/ProgramLauncher/unitTest.cpp b/isis/src/base/objs/ProgramLauncher/unitTest.cpp index b4aa17dcaf..0d1ac99a64 100644 --- a/isis/src/base/objs/ProgramLauncher/unitTest.cpp +++ b/isis/src/base/objs/ProgramLauncher/unitTest.cpp @@ -63,7 +63,7 @@ void IsisMain() { cerr << "That is the reason for the OS specific truth files. Please ignore the exit codes." << endl; cerr << endl; try { - ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats " + ProgramLauncher::RunSystemCommand(QString(ISISROOT) + "/bin/stats " "from=\\$base/testData/ab102401_ideal.cub -pid=999 " "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences"); } @@ -77,7 +77,7 @@ void IsisMain() { << endl; cerr << endl; try { - ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats " + ProgramLauncher::RunSystemCommand(QString(ISISROOT) + "/bin/stats " "from=unitTest.cub " "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences"); } diff --git a/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp b/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp index d2b8cc7194..079cf50a66 100644 --- a/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp +++ b/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp @@ -75,7 +75,7 @@ namespace Isis { if (localFile.fileExists()) m_projPlugin.read(localFile.expanded()); - FileName systemFile("$ISISROOT/lib/Projection.plugin"); + FileName systemFile(QString(ISISROOT) + "/lib/Projection.plugin"); if (systemFile.fileExists()) m_projPlugin.read(systemFile.expanded()); } @@ -143,7 +143,7 @@ namespace Isis { if (localFile.fileExists()) m_projPlugin.read(localFile.expanded()); - FileName systemFile("$ISISROOT/lib/Projection.plugin"); + FileName systemFile(QString(ISISROOT) + "/lib/Projection.plugin"); if (systemFile.fileExists()) m_projPlugin.read(systemFile.expanded()); } diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp index 46eb7b222b..2b9ea7b032 100644 --- a/isis/src/base/objs/UserInterface/unitTest.cpp +++ b/isis/src/base/objs/UserInterface/unitTest.cpp @@ -14,8 +14,9 @@ int main(int argc, char *argv[]) { cout << "Unit test for Isis::UserInterface ..." << endl; - QString unitTestXml = Isis::FileName("$ISISROOT/unitTest/isis3_unit_test_UserInterface.xml").expanded(); - QString highpass = Isis::FileName("$ISISROOT/bin/xml/highpass.xml").expanded(); + QString unitTestXml = Isis::FileName(ISISBUILDDIR + "/unitTest/isis3_unit_test_UserInterface.xml").expanded(); + QString highpass = Isis::FileName(ISISBUILDDIR + "/bin/xml/highpass.xml").expanded(); + char *myArgv[15];// = {"unitTest", "from=input.cub", "to=output.cub"}; for (int i = 0; i < 15; i++) @@ -299,7 +300,7 @@ int main(int argc, char *argv[]) { cout << "Testing Invalid Parameter" << endl; try { int myArgc = 0; - strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); + strcpy(myArgv[myArgc++], QString(ISISROOT) + "/src/base/apps/highpass/highpass"); strcpy(myArgv[myArgc++], "bogus=parameter"); Isis::UserInterface ui(unitTestXml, myArgc, myArgv); @@ -887,7 +888,7 @@ int main(int argc, char *argv[]) { cout << "Testing -RESTORE with invalid (non-existing) .par file" << endl; try { int myArgc = 0; - strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); + strcpy(myArgv[myArgc++], QString(ISISROOT) + "/src/base/apps/highpass/highpass"); strcpy(myArgv[myArgc++], "-restore=junk.par"); Isis::UserInterface ui(unitTestXml, myArgc, myArgv); diff --git a/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp b/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp index c23a4de8d7..2021046f1f 100644 --- a/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp +++ b/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp @@ -62,7 +62,7 @@ namespace Isis { p.read("InterestOperator.plugin"); } else { - p.read("$ISISROOT/lib/InterestOperator.plugin"); + p.read(QString(ISISROOT) + "/lib/InterestOperator.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp b/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp index 3ce1c246a5..7ba7f077a8 100644 --- a/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp +++ b/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp @@ -55,7 +55,7 @@ namespace Isis { CnetEditorWindow::CnetEditorWindow() { // Add the Qt plugin directory to the library path - FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); + FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); // For some reason GUI style is not detected correctly by Qt for Isis. diff --git a/isis/src/qisis/apps/qmos/qmos.cpp b/isis/src/qisis/apps/qmos/qmos.cpp index b39bec5ef8..fd34c674cf 100644 --- a/isis/src/qisis/apps/qmos/qmos.cpp +++ b/isis/src/qisis/apps/qmos/qmos.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) { Isis::Gui::checkX11(); // Add the Qt plugin directory to the library path - FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); + FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); QApplication *app = new QIsisApplication(argc, argv); diff --git a/isis/src/qisis/apps/qnet/qnet.cpp b/isis/src/qisis/apps/qnet/qnet.cpp index cdcfe8ae6c..a11f3779a5 100644 --- a/isis/src/qisis/apps/qnet/qnet.cpp +++ b/isis/src/qisis/apps/qnet/qnet.cpp @@ -45,7 +45,7 @@ int main(int argc, char *argv[]) { try { // Add the Qt plugin directory to the library path - FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); + FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); diff --git a/isis/src/qisis/apps/qtie/qtie.cpp b/isis/src/qisis/apps/qtie/qtie.cpp index 852a869d11..5c0ff6a860 100644 --- a/isis/src/qisis/apps/qtie/qtie.cpp +++ b/isis/src/qisis/apps/qtie/qtie.cpp @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) { try { // Add the Qt plugin directory to the library path - FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); + FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); QApplication *app = new QApplication(argc, argv); diff --git a/isis/src/qisis/apps/qview/qview.cpp b/isis/src/qisis/apps/qview/qview.cpp index 95253f46c5..a503eac05e 100644 --- a/isis/src/qisis/apps/qview/qview.cpp +++ b/isis/src/qisis/apps/qview/qview.cpp @@ -63,7 +63,7 @@ int main(int argc, char *argv[]) { Isis::Gui::checkX11(); // Add the Qt plugin directory to the library path - FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); + FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); // Check to see if the user wants to force a new window diff --git a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp index 140d2b5fab..f5d7ec129a 100644 --- a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp +++ b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp @@ -1659,7 +1659,7 @@ namespace Isis { toString((int)(m_rightMeasure->GetSample())) + "_" + toString((int)(m_rightMeasure->GetLine())) + "_"; QString fname = baseFile + "Search.cub"; - QString command = "$ISISROOT/bin/qview \'" + fname + "\'"; + QString command = QString(ISISROOT) + "/bin/qview \'" + fname + "\'"; m_autoRegFact->RegistrationSearchChip()->Write(fname); fname = baseFile + "Pattern.cub"; command += " \'" + fname + "\'"; diff --git a/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp b/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp index 9efdfb6b49..a26c2c3c41 100644 --- a/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp +++ b/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp @@ -1595,7 +1595,7 @@ namespace Isis { toString((int)(p_rightMeasure->GetSample())) + "_" + toString((int)(p_rightMeasure->GetLine())) + "_"; QString fname = baseFile + "Search.cub"; - QString command = "$ISISROOT/bin/qview \'" + fname + "\'"; + QString command = QString(ISISROOT) + "/bin/qview \'" + fname + "\'"; p_autoRegFact->RegistrationSearchChip()->Write(fname); fname = baseFile + "Pattern.cub"; command += " \'" + fname + "\'"; diff --git a/isis/src/qisis/objs/HelpTool/HelpTool.cpp b/isis/src/qisis/objs/HelpTool/HelpTool.cpp index 63486ef413..5be87d812d 100644 --- a/isis/src/qisis/objs/HelpTool/HelpTool.cpp +++ b/isis/src/qisis/objs/HelpTool/HelpTool.cpp @@ -61,7 +61,7 @@ namespace Isis { */ void HelpTool::aboutProgram() { FileName file( - "$ISISROOT/doc/Application/presentation/PrinterFriendly/" + + QString(ISISROOT) + "/doc/Application/presentation/PrinterFriendly/" + QApplication::applicationName() + "/" + QApplication::applicationName() + ".html"); diff --git a/isis/src/qisis/objs/MatchTool/MatchTool.cpp b/isis/src/qisis/objs/MatchTool/MatchTool.cpp index f7e4622208..7f4a6276ac 100644 --- a/isis/src/qisis/objs/MatchTool/MatchTool.cpp +++ b/isis/src/qisis/objs/MatchTool/MatchTool.cpp @@ -209,7 +209,7 @@ namespace Isis { m_pointEditor->templateFileName()); m_templateFileNameLabel->setToolTip("Sub-pixel registration template File."); // QString patternMatchDoc = -// FileName("$ISISROOT/doc/documents/PatternMatch/PatternMatch.html").fileName(); +// FileName(QString(ISISROOT) + "/doc/documents/PatternMatch/PatternMatch.html").fileName(); // m_templateFileNameLabel->setOpenExternalLinks(true); m_templateFileNameLabel->setWhatsThis("FileName of the sub-pixel " "registration template. Refer to $ISISROOT/doc/documents/" diff --git a/isis/src/qisis/objs/QnetTools/QnetTool.cpp b/isis/src/qisis/objs/QnetTools/QnetTool.cpp index 74be1f6a70..259b55959d 100644 --- a/isis/src/qisis/objs/QnetTools/QnetTool.cpp +++ b/isis/src/qisis/objs/QnetTools/QnetTool.cpp @@ -182,7 +182,7 @@ namespace Isis { m_pointEditor->templateFileName()); m_templateFileNameLabel->setToolTip("Sub-pixel registration template File."); // QString patternMatchDoc = -// FileName("$ISISROOT/doc/documents/PatternMatch/PatternMatch.html").fileName(); +// FileName(QString(ISISROOT) + "/doc/documents/PatternMatch/PatternMatch.html").fileName(); // m_templateFileNameLabel->setOpenExternalLinks(true); m_templateFileNameLabel->setWhatsThis("FileName of the sub-pixel " "registration template. Refer to $ISISROOT/doc/documents/" diff --git a/isis/src/system/apps/isiscomplete/isiscomplete.cpp b/isis/src/system/apps/isiscomplete/isiscomplete.cpp index bc90d0ed81..a879fcb7ab 100644 --- a/isis/src/system/apps/isiscomplete/isiscomplete.cpp +++ b/isis/src/system/apps/isiscomplete/isiscomplete.cpp @@ -64,7 +64,7 @@ void MakeCompletion(const QString &appName) { } if(appName.compare("isisui") == 0) { - QString binPath = FileName("$ISISROOT/bin").expanded(); + QString binPath = FileName(QString(ISISROOT) + "/bin").expanded(); cout << "complete isisui 'n@*@F:" << binPath << "/@'; "; return; } diff --git a/isis/src/viking/apps/vik2isis/vik2isis.cpp b/isis/src/viking/apps/vik2isis/vik2isis.cpp index c1eb241c30..6d26685fb7 100644 --- a/isis/src/viking/apps/vik2isis/vik2isis.cpp +++ b/isis/src/viking/apps/vik2isis/vik2isis.cpp @@ -40,7 +40,7 @@ void IsisMain() { } catch(IException &e) { tempFile = true; - QString command = "$ISISROOT/bin/vdcomp " + in.expanded() + " " + + QString command = QString(ISISROOT) + "/bin/vdcomp " + in.expanded() + " " + temp.expanded() + " > /dev/null 2>&1"; int returnValue = system(command.toLatin1().data()) >> 8; if(returnValue) { diff --git a/isis/src/voyager/apps/voy2isis/voy2isis.cpp b/isis/src/voyager/apps/voy2isis/voy2isis.cpp index 5c6b6002a2..1aab0316e8 100644 --- a/isis/src/voyager/apps/voy2isis/voy2isis.cpp +++ b/isis/src/voyager/apps/voy2isis/voy2isis.cpp @@ -51,7 +51,7 @@ void IsisMain() { QString ext = in.extension().toUpper(); if (ext == "IMQ") { try { - QString command = "$ISISROOT/bin/vdcomp " + in.expanded() + " " + temp.expanded(); + QString command = QString(ISISROOT) + "/bin/vdcomp " + in.expanded() + " " + temp.expanded(); // don't pretend vdcomp is a standard Isis program, just run it ProgramLauncher::RunSystemCommand(command); in = temp.expanded(); -- GitLab From be5504b4ac6b93f6507d5d0be4474818bf95561d Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 00:29:56 -0700 Subject: [PATCH 047/620] makeTruth script may not be worth the effort to call the script --- isis/scripts/makeTruth.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 isis/scripts/makeTruth.py diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py new file mode 100644 index 0000000000..28d13f95f5 --- /dev/null +++ b/isis/scripts/makeTruth.py @@ -0,0 +1,11 @@ +''' +Script to create truthData for unitTests. This might be more work +using the scripts then just documenting what you have to do to save +output as Truth +''' + +unitTestExecutable = sys.argv[1] + +unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" + +os.system(unitTestExecutable + ">&" + unitTestName) -- GitLab From 5ddd416f7a9ecc5c2dabef9ce059fe22c8844b87 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 00:33:34 -0700 Subject: [PATCH 048/620] missing imports --- isis/scripts/makeTruth.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index 28d13f95f5..07b81b6118 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -4,6 +4,9 @@ using the scripts then just documenting what you have to do to save output as Truth ''' +import sys +import os + unitTestExecutable = sys.argv[1] unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" -- GitLab From fc6e15abe1f37367d158850222fae697257c42ed Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 00:42:32 -0700 Subject: [PATCH 049/620] added path --- isis/scripts/makeTruth.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index 07b81b6118..fae87c0293 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -10,5 +10,10 @@ import os unitTestExecutable = sys.argv[1] unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" +# we should probably append the path to the front so it ends up in +# in the same directory as the test +unitTestPath = unitTestExecutable.split("/") +del unitTestPath[-1] +unitTestPath = "/".join(unitTestPath) -os.system(unitTestExecutable + ">&" + unitTestName) +os.system(unitTestExecutable + ">&" + unitTestPath + "/" unitTestName) -- GitLab From b650fa67aa1bef277c505a7b2c4727d409d70215 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Fri, 23 Feb 2018 00:46:05 -0700 Subject: [PATCH 050/620] forgot a plus --- isis/scripts/makeTruth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index fae87c0293..5c8aaa26db 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -16,4 +16,4 @@ unitTestPath = unitTestExecutable.split("/") del unitTestPath[-1] unitTestPath = "/".join(unitTestPath) -os.system(unitTestExecutable + ">&" + unitTestPath + "/" unitTestName) +os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) -- GitLab From 0a2f2fbc1ed4127d7afdd6c71bd07a707fc3cb1a Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 16:11:09 -0700 Subject: [PATCH 051/620] added app option --- isis/scripts/makeTruth.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index fae87c0293..ab732b05ae 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -7,13 +7,29 @@ output as Truth import sys import os -unitTestExecutable = sys.argv[1] +if not os.environ['ISISROOT']: + print("The $ISISROOT variable is not set") + return -unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" -# we should probably append the path to the front so it ends up in -# in the same directory as the test -unitTestPath = unitTestExecutable.split("/") -del unitTestPath[-1] -unitTestPath = "/".join(unitTestPath) +if sys.argv[1].contains("_unit_"): + unitTestExecutable = sys.argv[1] -os.system(unitTestExecutable + ">&" + unitTestPath + "/" unitTestName) + unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" + # we should probably append the path to the front so it ends up in + # in the same directory as the test + unitTestPath = unitTestExecutable.split("/") + del unitTestPath[-1] + unitTestPath = "/".join(unitTestPath) + + os.system(unitTestExecutable + ">&" + unitTestPath + "/" unitTestName) + +else: + builddir = os.environ['ISISROOT'] + apptest = sys.arg[1] + makefilePath = "" + with open(builddir + "/objects/CTestTestfile.cmake") as testFile + for line in testFile: + if apptest in line: + makefilePath = line.split("-P")[1][3:] + break + print(makefilePath) -- GitLab From 87653edc47099b97386b6d140506578d2d595b4b Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 16:24:39 -0700 Subject: [PATCH 052/620] changes --- isis/scripts/makeTruth.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index ab732b05ae..998e5fa803 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -9,9 +9,9 @@ import os if not os.environ['ISISROOT']: print("The $ISISROOT variable is not set") - return -if sys.argv[1].contains("_unit_"): + +elif "_unit_" in sys.argv[1]: unitTestExecutable = sys.argv[1] unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" @@ -21,15 +21,15 @@ if sys.argv[1].contains("_unit_"): del unitTestPath[-1] unitTestPath = "/".join(unitTestPath) - os.system(unitTestExecutable + ">&" + unitTestPath + "/" unitTestName) + os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) else: builddir = os.environ['ISISROOT'] - apptest = sys.arg[1] + apptest = sys.argv[1] makefilePath = "" - with open(builddir + "/objects/CTestTestfile.cmake") as testFile + with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: if apptest in line: - makefilePath = line.split("-P")[1][3:] + makefilePath = line.split(" ")[1][11:] break print(makefilePath) -- GitLab From 0b0310632dbc417ec317d0ca1cf3a84aa3ea0513 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 16:27:02 -0700 Subject: [PATCH 053/620] changes --- isis/scripts/makeTruth.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index 25c8f99ff1..be1e53d5e4 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -30,7 +30,6 @@ else: with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: if apptest in line: - makefilePath = line.split(" ")[1][11:] + makefilePath = line.split("\" \"")[1][11:] break print(makefilePath) - -- GitLab From d17065e35b366f86ead6e26ca0f3ee495f37712f Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 20:25:09 -0700 Subject: [PATCH 054/620] added path to src --- isis/scripts/makeTruth.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index be1e53d5e4..31a84d47b8 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -1,7 +1,14 @@ ''' -Script to create truthData for unitTests. This might be more work -using the scripts then just documenting what you have to do to save -output as Truth +Script to create truthData for tests. + +It expects the command in the form of: + python makeTruth.py testName +where testname is the cmake name for the unit or app test + +The unit tests are pretty trivial because +the executable outputs the results of the unitTest to stdout and stderr so we +just redirect the streams to the file named object.truth where object is the +ISIS object being tested ''' import sys @@ -33,3 +40,5 @@ else: makefilePath = line.split("\" \"")[1][11:] break print(makefilePath) + isissrc = makefilePath.split("src")[0] + print(isissrc) -- GitLab From 8e8089ca46a2e1064255e26e8298e22750b691dd Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 20:41:53 -0700 Subject: [PATCH 055/620] added cp to specific makefile --- isis/scripts/makeTruth.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index 31a84d47b8..c75a1c512e 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -42,3 +42,5 @@ else: print(makefilePath) isissrc = makefilePath.split("src")[0] print(isissrc) + os.system("cp " + makefilePath + $ISISROOT +"/testOutputDir") + -- GitLab From 809439efadf2e793e2e1ad27a44e2c8a60a39351 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 20:43:31 -0700 Subject: [PATCH 056/620] changes --- isis/scripts/makeTruth.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index c75a1c512e..c1449beba9 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -42,5 +42,4 @@ else: print(makefilePath) isissrc = makefilePath.split("src")[0] print(isissrc) - os.system("cp " + makefilePath + $ISISROOT +"/testOutputDir") - + os.system("cp " + makefilePath + builddir +"/testOutputDir") -- GitLab From 7f9c435bafa793b4bf1399dc518466347475fb23 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 20:44:35 -0700 Subject: [PATCH 057/620] changes --- isis/scripts/makeTruth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py index c1449beba9..e86f4093a5 100644 --- a/isis/scripts/makeTruth.py +++ b/isis/scripts/makeTruth.py @@ -42,4 +42,4 @@ else: print(makefilePath) isissrc = makefilePath.split("src")[0] print(isissrc) - os.system("cp " + makefilePath + builddir +"/testOutputDir") + os.system("cp " + makefilePath +" "+ builddir +"/testOutputDir") -- GitLab From d2919a92fd3b01b974f78a9e6c821513cd83cf79 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 21:30:06 -0700 Subject: [PATCH 058/620] changes --- isis/scripts/makeTruth.py | 45 --------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 isis/scripts/makeTruth.py diff --git a/isis/scripts/makeTruth.py b/isis/scripts/makeTruth.py deleted file mode 100644 index e86f4093a5..0000000000 --- a/isis/scripts/makeTruth.py +++ /dev/null @@ -1,45 +0,0 @@ -''' -Script to create truthData for tests. - -It expects the command in the form of: - python makeTruth.py testName -where testname is the cmake name for the unit or app test - -The unit tests are pretty trivial because -the executable outputs the results of the unitTest to stdout and stderr so we -just redirect the streams to the file named object.truth where object is the -ISIS object being tested -''' - -import sys -import os - -if not os.environ['ISISROOT']: - print("The $ISISROOT variable is not set") - - -elif "_unit_" in sys.argv[1]: - unitTestExecutable = sys.argv[1] - - unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" - # we should probably append the path to the front so it ends up in - # in the same directory as the test - unitTestPath = unitTestExecutable.split("/") - del unitTestPath[-1] - unitTestPath = "/".join(unitTestPath) - - os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) - -else: - builddir = os.environ['ISISROOT'] - apptest = sys.argv[1] - makefilePath = "" - with open(builddir + "/objects/CTestTestfile.cmake") as testFile: - for line in testFile: - if apptest in line: - makefilePath = line.split("\" \"")[1][11:] - break - print(makefilePath) - isissrc = makefilePath.split("src")[0] - print(isissrc) - os.system("cp " + makefilePath +" "+ builddir +"/testOutputDir") -- GitLab From 12a474d95ae6f7d36ac30359064a51ed4acedbfb Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 21:44:33 -0700 Subject: [PATCH 059/620] makes more sense to have two scripts one to get and see output and one to actually change truth files --- isis/scripts/makeOutput.py | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 isis/scripts/makeOutput.py diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py new file mode 100644 index 0000000000..ef4723df0e --- /dev/null +++ b/isis/scripts/makeOutput.py @@ -0,0 +1,50 @@ +''' +Script to create truthData for tests. + +It expects the command in the form of: + python makeTruth.py testName +where testname is the cmake name for the unit or app test + +The unit tests are pretty trivial because +the executable outputs the results of the unitTest to stdout and stderr so we +just redirect the streams to the file named object.truth where object is the +ISIS object being tested +''' + +import sys +import os + +if not os.environ['ISISROOT']: + print("The $ISISROOT variable is not set") + + +elif "_unit_" in sys.argv[1]: + unitTestExecutable = sys.argv[1] + + unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" + # we should probably append the path to the front so it ends up in + # in the same directory as the test + unitTestPath = unitTestExecutable.split("/") + del unitTestPath[-1] + unitTestPath = "/".join(unitTestPath) + + os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) + +else: + builddir = os.environ['ISISROOT'] + apptest = sys.argv[1] + makefilePath = "" + with open(builddir + "/objects/CTestTestfile.cmake") as testFile: + for line in testFile: + if apptest in line: + makefilePath = line.split("\" \"")[1][11:] + break + print(makefilePath) + + makefilePath = makefilePath.split("/") + del makefilePath[-1] + makefilePath = "/".join(makefilePath) + + isissrc = makefilePath.split("src")[0] + print(isissrc) + os.system("cd " + makefilePath) -- GitLab From 34fadd3cad03268d33fbd36d0c05267579b25d76 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 21:49:13 -0700 Subject: [PATCH 060/620] changes --- isis/scripts/makeOutput.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index ef4723df0e..9be5c5a790 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -44,7 +44,9 @@ else: makefilePath = makefilePath.split("/") del makefilePath[-1] makefilePath = "/".join(makefilePath) + print(makefilePath) isissrc = makefilePath.split("src")[0] print(isissrc) os.system("cd " + makefilePath) + os.system("mkdir test") -- GitLab From b3ae4c5a23bb9cde4d3e6a82e2882005e4d28534 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 21:53:11 -0700 Subject: [PATCH 061/620] changes --- isis/scripts/makeOutput.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 9be5c5a790..4a5d7966bb 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -48,5 +48,5 @@ else: isissrc = makefilePath.split("src")[0] print(isissrc) - os.system("cd " + makefilePath) + os.chdir(makefilePath) os.system("mkdir test") -- GitLab From f18264b8946d491c37bad774730af24ebed783cc Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:14:58 -0700 Subject: [PATCH 062/620] changes --- isis/scripts/makeOutput.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 4a5d7966bb..2196f26dc7 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -49,4 +49,13 @@ else: isissrc = makefilePath.split("src")[0] print(isissrc) os.chdir(makefilePath) - os.system("mkdir test") + os.system("make checkout") + os.system("make output") + os.system("make truthdata") + os.system("cp truth " + builddir + "/testOutputDir") + + if os.argc == 3: + if os.argv[2] == "truth": + os.system("make checkin") + + os.system("make release") -- GitLab From 50daf6e05da82e0611800cd901c62095a42c3a5b Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:16:23 -0700 Subject: [PATCH 063/620] changes --- isis/scripts/makeOutput.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 2196f26dc7..d98b7099c9 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -54,7 +54,7 @@ else: os.system("make truthdata") os.system("cp truth " + builddir + "/testOutputDir") - if os.argc == 3: + if len(os.argv) == 3: if os.argv[2] == "truth": os.system("make checkin") -- GitLab From 221be5962c136c39940192a6be758ee5bafb2619 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:18:55 -0700 Subject: [PATCH 064/620] changes --- isis/scripts/makeOutput.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index d98b7099c9..62ad1b3777 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -52,10 +52,11 @@ else: os.system("make checkout") os.system("make output") os.system("make truthdata") - os.system("cp truth " + builddir + "/testOutputDir") + os.system("rm -r " + builddir + "/testOutputDir/truth") + os.system("cp -rf truth " + builddir + "/testOutputDir") - if len(os.argv) == 3: - if os.argv[2] == "truth": + if sys.argc == 3: + if sys.argv[2] == "truth": os.system("make checkin") os.system("make release") -- GitLab From 6946b0715584ccfbbb814dbd211f66525b4ee3af Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:22:00 -0700 Subject: [PATCH 065/620] changes --- isis/scripts/makeOutput.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 62ad1b3777..d5f4aad433 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -52,10 +52,10 @@ else: os.system("make checkout") os.system("make output") os.system("make truthdata") - os.system("rm -r " + builddir + "/testOutputDir/truth") - os.system("cp -rf truth " + builddir + "/testOutputDir") + os.system("rm -rf " + builddir + "/testOutputDir/truth") + os.system("cp -r truth " + builddir + "/testOutputDir") - if sys.argc == 3: + if len(sys.argv) == 3: if sys.argv[2] == "truth": os.system("make checkin") -- GitLab From ea80a711541a80012126b2ec87418ac70258ef17 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:28:30 -0700 Subject: [PATCH 066/620] changes --- isis/scripts/makeOutput.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index d5f4aad433..569a437772 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -59,4 +59,6 @@ else: if sys.argv[2] == "truth": os.system("make checkin") - os.system("make release") + # doing this instead of make release because make release + # can give feedback to the user that we would rather avoid + os.system("rm -rf input output truth print.prt") -- GitLab From aa36c32dfe167faaffdff388882094764fda2f4d Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:32:44 -0700 Subject: [PATCH 067/620] changes --- isis/scripts/makeOutput.py | 1 + 1 file changed, 1 insertion(+) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 569a437772..b4d1301c68 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -58,6 +58,7 @@ else: if len(sys.argv) == 3: if sys.argv[2] == "truth": os.system("make checkin") + print("Checked In Truth Data") # doing this instead of make release because make release # can give feedback to the user that we would rather avoid -- GitLab From 4ac5f2e53796f6865f8cfabf7ec84ffa9c5751d5 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:36:58 -0700 Subject: [PATCH 068/620] changes --- isis/scripts/makeOutput.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index b4d1301c68..7b4593fb60 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -44,17 +44,14 @@ else: makefilePath = makefilePath.split("/") del makefilePath[-1] makefilePath = "/".join(makefilePath) - print(makefilePath) - isissrc = makefilePath.split("src")[0] - print(isissrc) os.chdir(makefilePath) os.system("make checkout") os.system("make output") os.system("make truthdata") os.system("rm -rf " + builddir + "/testOutputDir/truth") os.system("cp -r truth " + builddir + "/testOutputDir") - + print("App Test Output In " + builddir + "/testOutputDir/truth) if len(sys.argv) == 3: if sys.argv[2] == "truth": os.system("make checkin") -- GitLab From 1634f067c0cc838f4ab1de1ae7ff790829e6c59e Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:37:38 -0700 Subject: [PATCH 069/620] changes --- isis/scripts/makeOutput.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 7b4593fb60..b2739f472e 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -51,7 +51,7 @@ else: os.system("make truthdata") os.system("rm -rf " + builddir + "/testOutputDir/truth") os.system("cp -r truth " + builddir + "/testOutputDir") - print("App Test Output In " + builddir + "/testOutputDir/truth) + print("App Test Output In " + builddir + "/testOutputDir/truth") if len(sys.argv) == 3: if sys.argv[2] == "truth": os.system("make checkin") -- GitLab From a4f092d8d747563fe47048d660bb90a2bab21db0 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:40:04 -0700 Subject: [PATCH 070/620] Make Truth for app test now fully functional --- isis/scripts/makeOutput.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index b2739f472e..25497b0801 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -39,12 +39,12 @@ else: if apptest in line: makefilePath = line.split("\" \"")[1][11:] break - print(makefilePath) makefilePath = makefilePath.split("/") del makefilePath[-1] makefilePath = "/".join(makefilePath) + # change dir to test dir and run make commands os.chdir(makefilePath) os.system("make checkout") os.system("make output") @@ -52,6 +52,8 @@ else: os.system("rm -rf " + builddir + "/testOutputDir/truth") os.system("cp -r truth " + builddir + "/testOutputDir") print("App Test Output In " + builddir + "/testOutputDir/truth") + + # check if the user wants data checked in if len(sys.argv) == 3: if sys.argv[2] == "truth": os.system("make checkin") -- GitLab From 0a1244e4dd93be4b4a98c7e0653675564425aaf4 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:55:45 -0700 Subject: [PATCH 071/620] changes --- isis/scripts/makeOutput.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 25497b0801..b582f50cba 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -14,10 +14,10 @@ ISIS object being tested import sys import os + if not os.environ['ISISROOT']: print("The $ISISROOT variable is not set") - elif "_unit_" in sys.argv[1]: unitTestExecutable = sys.argv[1] @@ -29,6 +29,19 @@ elif "_unit_" in sys.argv[1]: unitTestPath = "/".join(unitTestPath) os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) + print("App Test Output In " + unitTestPath + " As " + unitTestName) + + if len(sys.argv) == 3: + if sys.argv[2] == "truth": + with open(builddir + "/objects/CTestTestfile.cmake") as testFile: + for line in testFile: + if unitTestName in line: + unitTestPath = line.split("\" \"")[2][13:] + print(unitTestPath) + break + + print("Checked In Truth Data") + else: builddir = os.environ['ISISROOT'] -- GitLab From 75e2f72ed849b4f5665ad2ff2541ed82194906a3 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 22:58:57 -0700 Subject: [PATCH 072/620] changes --- isis/scripts/makeOutput.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index b582f50cba..041b31de0d 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -17,8 +17,11 @@ import os if not os.environ['ISISROOT']: print("The $ISISROOT variable is not set") + sys.exit() -elif "_unit_" in sys.argv[1]: +builddir = os.environ['ISISROOT'] + +if "_unit_" in sys.argv[1]: unitTestExecutable = sys.argv[1] unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" @@ -44,7 +47,6 @@ elif "_unit_" in sys.argv[1]: else: - builddir = os.environ['ISISROOT'] apptest = sys.argv[1] makefilePath = "" with open(builddir + "/objects/CTestTestfile.cmake") as testFile: -- GitLab From 00635ffc2798335b8f96aed1d0dc9bf4173080fe Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 23:07:40 -0700 Subject: [PATCH 073/620] changes --- isis/scripts/makeOutput.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 041b31de0d..ae336ae598 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -32,18 +32,18 @@ if "_unit_" in sys.argv[1]: unitTestPath = "/".join(unitTestPath) os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) - print("App Test Output In " + unitTestPath + " As " + unitTestName) + print("Unit Test Output In " + unitTestPath + " As " + unitTestName) if len(sys.argv) == 3: if sys.argv[2] == "truth": with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: if unitTestName in line: - unitTestPath = line.split("\" \"")[2][13:] - print(unitTestPath) + unitTestSrcPath = line.split("\" \"")[2][13:] + os.system("cp -f " + unitTestPath/unitTestName + " " + unitTestSrcPath) break - print("Checked In Truth Data") + print("Checked In Truth Data To " + unitTestSrcPath) else: -- GitLab From ebaebf6b7d923818003314d3b0c1cdc5cc272826 Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 23:08:45 -0700 Subject: [PATCH 074/620] changes --- isis/scripts/makeOutput.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index ae336ae598..e8855235d2 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -40,7 +40,7 @@ if "_unit_" in sys.argv[1]: for line in testFile: if unitTestName in line: unitTestSrcPath = line.split("\" \"")[2][13:] - os.system("cp -f " + unitTestPath/unitTestName + " " + unitTestSrcPath) + os.system("cp -f " + unitTestPath + "/" + unitTestName + " " + unitTestSrcPath) break print("Checked In Truth Data To " + unitTestSrcPath) -- GitLab From 52886eac0910a37db4acca13e65a96ac0e7efb4c Mon Sep 17 00:00:00 2001 From: Oxez Date: Fri, 23 Feb 2018 23:18:21 -0700 Subject: [PATCH 075/620] Make script fully functional --- isis/scripts/makeOutput.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index e8855235d2..2ad25a8093 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -1,14 +1,18 @@ ''' Script to create truthData for tests. -It expects the command in the form of: - python makeTruth.py testName +For output it expects the command in the form of: + python makeOutput.py testName where testname is the cmake name for the unit or app test -The unit tests are pretty trivial because -the executable outputs the results of the unitTest to stdout and stderr so we -just redirect the streams to the file named object.truth where object is the -ISIS object being tested +To check in truth data the command should be in the form of: + python makeOutput.py testName truth + +The unit tests are pretty trivial because the executable outputs the results of +the unitTest to stdout and stderr so we just redirect the streams to the file \ +named object.truth where object is the ISIS object being tested. + +The app tests output has to rely on the old make system because the app test do ''' import sys -- GitLab From 58bce8f51d65f19003061cb1a18500a15bc11ff2 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 26 Feb 2018 11:27:24 -0700 Subject: [PATCH 076/620] CMake no longer copies xmls during build time, now symlinks during test time --- isis/cmake/AddIsisModule.cmake | 7 ------- isis/cmake/RunUnitTest.cmake | 20 +++++++++++--------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 22ceec74a6..e62f4ba9a7 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -82,13 +82,6 @@ function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) # Generate a name for the executable set(executableName "${moduleName}_unit_test_${filename}") - # check for the existance of a unitTest.xml as they need - # to be copies over to somehwere the unitTest can access. - set(test_xml "${folder}/unitTest.xml") - if(EXISTS "${test_xml}") - configure_file("${test_xml}" "${CMAKE_BINARY_DIR}/unitTest/${executableName}.xml" COPYONLY) - endif() - # Create the executable and link it to the module library add_executable( ${executableName} ${testFile}) set(depLibs "${reqLibs};${matchedLibs}") diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 9309ab95ef..64b92a316b 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -24,16 +24,18 @@ get_filename_component(truthFolder ${TRUTH_FILE} DIRECTORY) get_filename_component(binFolder ${TEST_PROG} DIRECTORY) get_filename_component(binName ${TEST_PROG} NAME) -set(tempDir ${binFolder}/${binName}_temp) -set(tempLink ${tempDir}/unitTest) -execute_process(COMMAND rm -rf ${tempDir}) -execute_process(COMMAND mkdir -p ${tempDir}) execute_process(COMMAND ln -s ${TEST_PROG} ${tempLink}) -execute_process(COMMAND ln -s ${truthFolder}/unitTest.xml ${tempDir}/unitTest.xml) +execute_process(COMMAND ln -s ${truthFolder}/unitTest.xml ${truthFolder}/${binName}.xml) + +message("TEMP DIR: ${tempDir}") +message("Bin Name: ${binName}") +message("Bin Folder: ${binFolder}") +message("TEST_PROG: ${TEST_PROG}") +message("tempLink: " ${tempLink}) +message("truthFolder" ${truthFolder}) # Run the unit test executable and pipe the output to a text file. -#execute_process(COMMAND ${TEST_PROG} -execute_process(COMMAND ${tempLink} +execute_process(COMMAND ${TEST_PROG} WORKING_DIRECTORY ${truthFolder} OUTPUT_FILE ${outputFile} ERROR_FILE ${outputFile} @@ -69,8 +71,8 @@ if(DIFFERENT) message(FATAL_ERROR "Test failed - files differ") # On error the result file is left around to aid in debugging. else() - file(REMOVE ${outputFile}) # On success, clean out the result file. + # file(REMOVE ${outputFile}) # On success, clean out the result file. endif() # Clean up our temporary folder -execute_process(COMMAND rm -f ${tempDir}) +execute_process(COMMAND rm -f ${truthFolder}/${binName}.xml) -- GitLab From 2ae0a01af0a006fdd1a1d04c32fac045aab9f270 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 26 Feb 2018 11:29:29 -0700 Subject: [PATCH 077/620] undo ISISROOT change --- .../apps/autoregtemplate/autoregtemplate.cpp | 2 +- .../base/apps/isisminer/StrategyFactory.cpp | 312 +++++++++--------- .../src/base/objs/Application/Application.cpp | 2 +- .../AtmosModelFactory/AtmosModelFactory.cpp | 2 +- .../objs/AutoRegFactory/AutoRegFactory.cpp | 2 +- .../base/objs/CameraFactory/CameraFactory.cpp | 2 +- isis/src/base/objs/Cube/Cube.cpp | 2 +- .../src/base/objs/Environment/Environment.cpp | 8 +- isis/src/base/objs/Gui/Gui.cpp | 2 +- isis/src/base/objs/Gui/GuiCubeParameter.cpp | 2 +- .../src/base/objs/ImportPdsTable/unitTest.cpp | 2 +- .../NormModelFactory/NormModelFactory.cpp | 4 +- .../PhotoModelFactory/PhotoModelFactory.cpp | 2 +- isis/src/base/objs/Plugin/Plugin.cpp | 2 +- .../PolygonSeederFactory.cpp | 2 +- isis/src/base/objs/Preference/Preference.cpp | 6 +- .../objs/ProgramLauncher/ProgramLauncher.cpp | 2 +- .../base/objs/ProgramLauncher/unitTest.cpp | 4 +- .../ProjectionFactory/ProjectionFactory.cpp | 4 +- isis/src/base/objs/UserInterface/unitTest.cpp | 4 +- .../InterestOperatorFactory.cpp | 2 +- .../apps/cneteditor/CnetEditorWindow.cpp | 2 +- isis/src/qisis/apps/qmos/qmos.cpp | 2 +- isis/src/qisis/apps/qnet/qnet.cpp | 2 +- isis/src/qisis/apps/qtie/qtie.cpp | 2 +- isis/src/qisis/apps/qview/qview.cpp | 2 +- .../ControlMeasureEditWidget.cpp | 2 +- .../ControlPointEdit/ControlPointEdit.cpp | 2 +- isis/src/qisis/objs/HelpTool/HelpTool.cpp | 2 +- isis/src/qisis/objs/MatchTool/MatchTool.cpp | 2 +- isis/src/qisis/objs/QnetTools/QnetTool.cpp | 2 +- .../system/apps/isiscomplete/isiscomplete.cpp | 2 +- isis/src/viking/apps/vik2isis/vik2isis.cpp | 2 +- isis/src/voyager/apps/voy2isis/voy2isis.cpp | 2 +- 34 files changed, 198 insertions(+), 198 deletions(-) diff --git a/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp b/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp index b1184c4e0a..4ce21f69c6 100644 --- a/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp +++ b/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp @@ -11,7 +11,7 @@ void IsisMain() { // Get user interface UserInterface &ui = Application::GetUserInterface(); - Pvl algos(QString(ISISROOT) + "/lib/AutoReg.plugin"); + Pvl algos("$ISISROOT/lib/AutoReg.plugin"); Pvl p; // Begin creating the mapping group diff --git a/isis/src/base/apps/isisminer/StrategyFactory.cpp b/isis/src/base/apps/isisminer/StrategyFactory.cpp index 568cbaa996..3c172e0f97 100644 --- a/isis/src/base/apps/isisminer/StrategyFactory.cpp +++ b/isis/src/base/apps/isisminer/StrategyFactory.cpp @@ -1,26 +1,26 @@ -/** - * @file +/** + * @file * $Revision: 6513 $ * $Date: 2016-01-14 16:04:44 -0700 (Thu, 14 Jan 2016) $ * $Id: StrategyFactory.cpp 6513 2016-01-14 23:04:44Z kbecker@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ #include "StrategyFactory.h" // Qt library @@ -66,17 +66,17 @@ using namespace std; namespace Isis { /** - * A static instance of the strategy factory class. It is initialized to NULL - * and instantiated when the instance() method is called. + * A static instance of the strategy factory class. It is initialized to NULL + * and instantiated when the instance() method is called. */ StrategyFactory *StrategyFactory::m_strategymaker = 0; - - - /** - * Private default constructor so that this class is only instatiated through - * the instance() method. This ensures that only a singleton object is - * constructed. - */ + + + /** + * Private default constructor so that this class is only instatiated through + * the instance() method. This ensures that only a singleton object is + * constructed. + */ StrategyFactory::StrategyFactory() { // This ensures this singleton is shut down when the application exists, // so the GEOS system can be shut down cleanly. @@ -84,38 +84,38 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; m_numberMade = 0; return; } - - - /** + + + /** * Destroys the StrategyFactory object. - */ - StrategyFactory::~StrategyFactory() { + */ + StrategyFactory::~StrategyFactory() { } - - - /** - * Gets the singleton instance of this class. If it has not been instantiated - * yet, the default constructor is called. - * + + + /** + * Gets the singleton instance of this class. If it has not been instantiated + * yet, the default constructor is called. + * * @return StrategyFactory A pointer to the StrategyFactory singleton object. - */ - StrategyFactory *StrategyFactory::instance() { + */ + StrategyFactory *StrategyFactory::instance() { if (!m_strategymaker) { m_strategymaker = new StrategyFactory(); } return (m_strategymaker); } - - + + /** - * @brief Add a shared resource to global parameter list - * - * Users can add to an internal list of global resource keywords that will be - * provide to every Strategy created by this factory. This provides a consistent - * base of keyword substitutions when strategies apply() functions are called. - * + * @brief Add a shared resource to global parameter list + * + * Users can add to an internal list of global resource keywords that will be + * provide to every Strategy created by this factory. This provides a consistent + * base of keyword substitutions when strategies apply() functions are called. + * * @author 2015-05-08 Kris Becker - * + * * @param global Shared global resource for parameter substitution */ void StrategyFactory::addGlobal(SharedResource &global) { @@ -124,13 +124,13 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; } /** - * @brief Return list of current global parameters - * - * The list returned by this method will be used to create new strategies - * providing a consistent approach to keyword parameter substitution. - * + * @brief Return list of current global parameters + * + * The list returned by this method will be used to create new strategies + * providing a consistent approach to keyword parameter substitution. + * * @author 2015-05-08 Kris Becker - * + * * @return ResourceList List of global parameters */ const ResourceList &StrategyFactory::getGlobals() const { @@ -151,22 +151,22 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; return (create(definition, getGlobals())); } - /** - * Uses the given configuration file and global resource of keywords to build - * a list of Strategy objects. The configuration file should be in PVL format - * with an object named "IsisMiner" that contains the configuration for the - * Strategy objects to be constructed. The IsisMiner PVL is pulled from the - * file and buildRun(PvlObject, SharedResource) is called. + /** + * Uses the given configuration file and global resource of keywords to build + * a list of Strategy objects. The configuration file should be in PVL format + * with an object named "IsisMiner" that contains the configuration for the + * Strategy objects to be constructed. The IsisMiner PVL is pulled from the + * file and buildRun(PvlObject, SharedResource) is called. * - * Below is an example of an IsisMiner PVL that, when passed into buildRun(), - * will create a StrategyList of size 2: + * Below is an example of an IsisMiner PVL that, when passed into buildRun(), + * will create a StrategyList of size 2: * @code * * Object = IsisMiner - * + * * Name = StrategyBuilder * ParametersRequired = ( inputdir, outputdir ) - * + * * Object = Strategy * Name = TestWithIdentity * Type = CnetReader @@ -176,7 +176,7 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; * IdentityArgs = (PointId) * Description = "Test the default functionality of CnetReader" * EndObject - * + * * Object=Strategy * Name = WriteCsvTest1 * Type = CsvWriter @@ -184,7 +184,7 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; * CsvFileArgs = "outputdir" * Mode = Create * Header = True - * + * * # Write all input fields as read in as noop should match exactly * Keywords = (ChooserName, Created, DateTime, Description, * LastModified, Line, MeasureType,NetworkId, PointId, @@ -197,45 +197,45 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; * * @endcode * - * @param configFile The name of the configuration file containing the + * @param configFile The name of the configuration file containing the * IsisMiner PvlObject with configuration information * needed to construct each of the Strategy objects. * @param globals List of global keywords to use in argument substitutions - * - * @return StrategyList The list of Strategy objects created from the + * + * @return StrategyList The list of Strategy objects created from the * given configuration and resource. - * @throw IException::User "Strategy config file does not contain + * @throw IException::User "Strategy config file does not contain * IsisMiner strategies object." - */ + */ StrategyList StrategyFactory::buildRun(const QString &configFile, const ResourceList &globals) const { Pvl pvl(configFile); if (!pvl.hasObject("IsisMiner") ) { - throw IException(IException::User, - "Strategy config file [" + configFile + + throw IException(IException::User, + "Strategy config file [" + configFile + "] does not contain IsisMiner strategies object.", _FILEINFO_); } return (buildRun(pvl.findObject("IsisMiner"), globals)); } - - - /** - * Uses the given PVL configuration object and global resource of keywords to - * build a list of Strategy objects. For each Strategy object to be created, - * the PVL configuration object must contain a PVL object named "Strategy." - * This method is called by the buildRun(QString, SharedResource) method. + + + /** + * Uses the given PVL configuration object and global resource of keywords to + * build a list of Strategy objects. For each Strategy object to be created, + * the PVL configuration object must contain a PVL object named "Strategy." + * This method is called by the buildRun(QString, SharedResource) method. * * @see buildRun(QString, SharedResource) * - * @param config A PVL object containing the configuration needed for + * @param config A PVL object containing the configuration needed for * constructing each Strategy object. * @param globals List of global keywords to use in argument substitutions - * - * @return StrategyList The list of Strategy objects created from the + * + * @return StrategyList The list of Strategy objects created from the * given configuration and resource. - */ + */ StrategyList StrategyFactory::buildRun(const PvlObject &config, const ResourceList &globals) const { @@ -249,23 +249,23 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; } return (slist); } - - + + /** - * Constructs a Strategy object from the given PVL definition object and - * global resource of keywords. If the PVL does not contain a valid - * configuration for a known Strategy, then an exception is thrown. Each time - * this method is successfully invoked, the number of manufactured Strategy - * objects increments. + * Constructs a Strategy object from the given PVL definition object and + * global resource of keywords. If the PVL does not contain a valid + * configuration for a known Strategy, then an exception is thrown. Each time + * this method is successfully invoked, the number of manufactured Strategy + * objects increments. * - * @param definition A PVL object containing the configuration needed to + * @param definition A PVL object containing the configuration needed to * construct the Strategy object. * @param globals List of global keywords to use in argument substitutions - * - * @return Strategy* A pointer to the Strategy constructed from the + * + * @return Strategy* A pointer to the Strategy constructed from the * given definition and globals. * @throw IException::User "Could not find a strategy for type." - */ + */ Strategy *StrategyFactory::create(const PvlObject &definition, const ResourceList &globals) const { Strategy *strategy = findStrategy(definition, globals); @@ -273,41 +273,41 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; QString sname("UNKNOWN"), stype("UNKNOWN"); if ( definition.hasKeyword("Name") ) { sname = definition["Name"][0]; } if ( definition.hasKeyword("Type") ) { stype = definition["Type"][0]; } - QString mess = "Could not create a " + sname + + QString mess = "Could not create a " + sname + " strategy for type [" + stype + "]."; throw IException(IException::User, mess, _FILEINFO_); } m_numberMade++; return (strategy); } - - + + /** * Gets the number of Strategy objects that have been manufactured. * * @return int The number of Strategy objects constructed by this factory. - */ + */ int StrategyFactory::manufactured() const { return (m_numberMade); } - + /** - * @brief Check that required user parameters are provided in resource list - * - * This method will look for a keyword called RequiredParameter in the provided - * container. If it exists, it will check the provided resource list (assumed - * to be globals) for existance. If any don't exist, an exception is thrown - * reporting the missing parameters. - * + * @brief Check that required user parameters are provided in resource list + * + * This method will look for a keyword called RequiredParameter in the provided + * container. If it exists, it will check the provided resource list (assumed + * to be globals) for existance. If any don't exist, an exception is thrown + * reporting the missing parameters. + * * @author 2015-06-04 Kris Becker - * - * @param conf PvlContainer to look for RequiredParameters keyword and + * + * @param conf PvlContainer to look for RequiredParameters keyword and * validate existance in parameters list. - * @param parameters List of parameters resources to search for keywords that + * @param parameters List of parameters resources to search for keywords that * must be provided by users. */ - void StrategyFactory::validateUserParameters(const PvlContainer &conf, - const ResourceList ¶meters) + void StrategyFactory::validateUserParameters(const PvlContainer &conf, + const ResourceList ¶meters) const { if ( conf.hasKeyword("RequiredParameters") ) { @@ -328,7 +328,7 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; if ( !missing.isEmpty() ) { QString mess = "Users of this configuration must provide the " - "following parameter(s) but they were not found: " + + "following parameter(s) but they were not found: " + missing.join(", "); throw IException(IException::User, mess, _FILEINFO_); } @@ -336,34 +336,34 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; return; } - - /** - * Attempts to construct a Strategy from the known Strategy classes using the - * given information in the PVL definition object and the given global - * resource of keywords. The Strategy type is pulled from the definition file - * and compared to the known Strategy types. If found, this method attempts to - * construct the corresponding Strategy object from the definition and - * globals. + + /** + * Attempts to construct a Strategy from the known Strategy classes using the + * given information in the PVL definition object and the given global + * resource of keywords. The Strategy type is pulled from the definition file + * and compared to the known Strategy types. If found, this method attempts to + * construct the corresponding Strategy object from the definition and + * globals. * - * @param definition A PVL object containing the configuration needed to + * @param definition A PVL object containing the configuration needed to * construct the Strategy object. * @param globals A shared pointer to the global resource of keywords used * to construct the Strategy object. - * - * @return Strategy* A pointer to the Strategy constructed from the + * + * @return Strategy* A pointer to the Strategy constructed from the * given definition and globals. - */ - Strategy *StrategyFactory::findStrategy(const PvlObject &definition, + */ + Strategy *StrategyFactory::findStrategy(const PvlObject &definition, const ResourceList &globals) const { QString stype; try { - stype = definition["Type"][0].toLower(); + stype = definition["Type"][0].toLower(); } catch (IException &ie) { QString sname("UNKNOWN"); if ( definition.hasKeyword("Name") ) { sname = definition["Name"][0]; } - QString mess = "Strategy Type does not exist in configuration for " + + QString mess = "Strategy Type does not exist in configuration for " + sname + " strategy!"; throw IException(ie, IException::User, mess, _FILEINFO_); } @@ -444,54 +444,54 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; } /** - * @brief Create a strategy from an external plugin library - * - * This method will take the plugin group definition and load the strategy from - * an external library implemented as a plugin. The definition has the basic - * qualifications: - * - * @code + * @brief Create a strategy from an external plugin library + * + * This method will take the plugin group definition and load the strategy from + * an external library implemented as a plugin. The definition has the basic + * qualifications: + * + * @code * Group = Plugin * StrategyPluginPath=("../../plugin/src/RunCommandStrategy","plugin/src/RunCommandStrategy", * "/Users/kbecker/IsisDevelopment/MissionSWPush/DeveloperSubmissions/isis/src/base/apps/isisminer/plugin/src/RunCommandStrategy") * Library = RunCommandStrategy * Routine = RunCommandStrategyPlugin * EndGroup - * @endcode - * - * In the above definition, the StrategyPluginPath is added to the search path - * for finding shared plugin libraries specfified in the Library keyword. The - * Routine keyword contains the name of the routine implemented to construct and - * return a Stategy algorith. The Routine must be declared callable via an + * @endcode + * + * In the above definition, the StrategyPluginPath is added to the search path + * for finding shared plugin libraries specfified in the Library keyword. The + * Routine keyword contains the name of the routine implemented to construct and + * return a Stategy algorith. The Routine must be declared callable via an * extern reference. Here is an example implementation found in * RunCommandStrategy.cpp: - * + * * @code * extern "C" Isis::Strategy *RunCommandStrategyPlugin(const Isis::PvlObject * &definition,const Isis::ResourceList &globals) { * return new Isis::RunCommandStrategy(definition, globals); * } - * @endcode -* + * @endcode +* * The Strategy algorithm can be implemented just like any other Strategy be * inheriting the Strategy class. Note that when the library is loaded attempts * are made to load all the symbols before the Routine is called to instantiate * the Strategy. - * + * * @author 2015-05-08 Kris Becker - * + * * @param plugindef PvlGroup container of plugin definition - * @param definition PvlObject definition of strategy that is implemented in the + * @param definition PvlObject definition of strategy that is implemented in the * plugin * @param globals List of global keywords to use in argument substitutions - * + * * @return Strategy* Pointer to strategy invoked from the plugin */ - Strategy *StrategyFactory::loadStrategyPlugin(const PvlContainer &plugindef, + Strategy *StrategyFactory::loadStrategyPlugin(const PvlContainer &plugindef, const PvlObject &definition, const ResourceList &globals) const { - PvlFlatMap pluginkeys(plugindef); + PvlFlatMap pluginkeys(plugindef); Strategy *strategy(0); try { // Create a list of plugin paths starting with no path and local directory first @@ -507,8 +507,8 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; } // Append the ISIS library path - if ( !dirlist.contains(QString(ISISROOT) + "/lib") ) { - dirlist.push_back(QString(ISISROOT) + "/lib"); + if ( !dirlist.contains("$ISISROOT/lib") ) { + dirlist.push_back("$ISISROOT/lib"); } // Attempt to load the library @@ -554,13 +554,13 @@ StrategyFactory *StrategyFactory::m_strategymaker = 0; /** * @brief Exit termination routine * - * This (static) method ensure this object is destroyed when Qt exits. + * This (static) method ensure this object is destroyed when Qt exits. * * Note that it is error to add this to the system _atexit() routine because * this object utilizes Qt classes. At the time the atexit call stack is - * executed, Qt is long gone resulting in Very Bad Things. Fortunately, Qt - * has an exit stack function as well. This method is added to the Qt exit - * call stack. + * executed, Qt is long gone resulting in Very Bad Things. Fortunately, Qt + * has an exit stack function as well. This method is added to the Qt exit + * call stack. */ void StrategyFactory::dieAtExit() { delete m_strategymaker; diff --git a/isis/src/base/objs/Application/Application.cpp b/isis/src/base/objs/Application/Application.cpp index c40614467b..1e32f38704 100644 --- a/isis/src/base/objs/Application/Application.cpp +++ b/isis/src/base/objs/Application/Application.cpp @@ -124,7 +124,7 @@ namespace Isis { Preference::Preferences(f.name() == "unitTest.xml"); if (!f.fileExists()) { - f = QString(ISISROOT) + "/bin/xml/" + f.name(); + f = "$ISISROOT/bin/xml/" + f.name(); if (!f.fileExists()) { QString message = Message::FileOpen(f.expanded()); throw IException(IException::Io, message, _FILEINFO_); diff --git a/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp b/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp index e59a296639..457798556b 100644 --- a/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp +++ b/isis/src/base/objs/AtmosModelFactory/AtmosModelFactory.cpp @@ -83,7 +83,7 @@ namespace Isis { p->read("AtmosModel.plugin"); } else { - p->read(QString(ISISROOT) + "/lib/AtmosModel.plugin"); + p->read("$ISISROOT/lib/AtmosModel.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp b/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp index 2a0ff3f332..f2640197e2 100644 --- a/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp +++ b/isis/src/base/objs/AutoRegFactory/AutoRegFactory.cpp @@ -70,7 +70,7 @@ namespace Isis { p.read("AutoReg.plugin"); } else { - p.read(QString(ISISROOT) + "/lib/AutoReg.plugin"); + p.read("$ISISROOT/lib/AutoReg.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/CameraFactory/CameraFactory.cpp b/isis/src/base/objs/CameraFactory/CameraFactory.cpp index d6bf74079d..a40bf25881 100644 --- a/isis/src/base/objs/CameraFactory/CameraFactory.cpp +++ b/isis/src/base/objs/CameraFactory/CameraFactory.cpp @@ -110,7 +110,7 @@ namespace Isis { if (localFile.fileExists()) m_cameraPlugin.read(localFile.expanded()); - FileName systemFile(QString(ISISROOT) + "/lib/Camera.plugin"); + FileName systemFile("$ISISROOT/lib/Camera.plugin"); if (systemFile.fileExists()) m_cameraPlugin.read(systemFile.expanded()); } diff --git a/isis/src/base/objs/Cube/Cube.cpp b/isis/src/base/objs/Cube/Cube.cpp index 7456c9dab6..1079e499ee 100644 --- a/isis/src/base/objs/Cube/Cube.cpp +++ b/isis/src/base/objs/Cube/Cube.cpp @@ -2106,7 +2106,7 @@ namespace Isis { parameters += " to=" + tempCube.expanded(); if (iApp == NULL) { - QString command = QString(ISISROOT) + "/bin/pds2isis " + parameters; + QString command = "$ISISROOT/bin/pds2isis " + parameters; ProgramLauncher::RunSystemCommand(command); } else { diff --git a/isis/src/base/objs/Environment/Environment.cpp b/isis/src/base/objs/Environment/Environment.cpp index 06cab9f5ad..b0d5726d75 100644 --- a/isis/src/base/objs/Environment/Environment.cpp +++ b/isis/src/base/objs/Environment/Environment.cpp @@ -136,7 +136,7 @@ namespace Isis { * @returns the Isis version in the format isis?.?.?.?qualifier | date */ QString Environment::isisVersion() { - TextFile versionFile(QString(ISISROOT) + "/version"); + TextFile versionFile("$ISISROOT/version"); QString line1, line2, line3, line4; versionFile.GetLine(line1); versionFile.GetLine(line2); @@ -148,7 +148,7 @@ namespace Isis { line1 = validPartOfLine.cap(); } else { - IString msg = QString(ISISROOT) + "/version line 1, no valid text found"; + IString msg = "$ISISROOT/version line 1, no valid text found"; throw IException(IException::Programmer, msg, _FILEINFO_); } @@ -156,7 +156,7 @@ namespace Isis { line2 = validPartOfLine.cap(); } else { - IString msg = QString(ISISROOT) + "/version line 2, no valid text found"; + IString msg = "$ISISROOT/version line 2, no valid text found"; throw IException(IException::Programmer, msg, _FILEINFO_); } @@ -164,7 +164,7 @@ namespace Isis { line4 = validPartOfLine.cap(); } else { - IString msg = QString(ISISROOT) + "/version line 4, no valid text found"; + IString msg = "$ISISROOT/version line 4, no valid text found"; throw IException(IException::Programmer, msg, _FILEINFO_); } diff --git a/isis/src/base/objs/Gui/Gui.cpp b/isis/src/base/objs/Gui/Gui.cpp index 6cb179ac9d..a9436ae8a2 100644 --- a/isis/src/base/objs/Gui/Gui.cpp +++ b/isis/src/base/objs/Gui/Gui.cpp @@ -876,7 +876,7 @@ namespace Isis { // Show help for the current app void Gui::AboutProgram() { Isis::FileName file((QString) - QString(ISISROOT) + "/doc/Application/presentation/PrinterFriendly/" + + "$ISISROOT/doc/Application/presentation/PrinterFriendly/" + Isis::Application::GetUserInterface().ProgramName() + "/" + Isis::Application::GetUserInterface().ProgramName() + diff --git a/isis/src/base/objs/Gui/GuiCubeParameter.cpp b/isis/src/base/objs/Gui/GuiCubeParameter.cpp index 1c2f7721c2..34eca24fad 100644 --- a/isis/src/base/objs/Gui/GuiCubeParameter.cpp +++ b/isis/src/base/objs/Gui/GuiCubeParameter.cpp @@ -152,7 +152,7 @@ namespace Isis { temp.close(); // Open the cube in Qview - QString command = QString(ISISROOT) + "/bin/qview " + cubeName + " &"; + QString command = "$ISISROOT/bin/qview " + cubeName + " &"; ProgramLauncher::RunSystemCommand(command); } // Throw an error if no cube name was entered diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.cpp b/isis/src/base/objs/ImportPdsTable/unitTest.cpp index 39eda92fbc..968692d13e 100644 --- a/isis/src/base/objs/ImportPdsTable/unitTest.cpp +++ b/isis/src/base/objs/ImportPdsTable/unitTest.cpp @@ -91,7 +91,7 @@ class ImportPdsTableTester : public ImportPdsTable { */ int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); - Isis::FileName data(QString(ISISROOT) + "/src/base/objs/ImportPdsTable/data/"); + Isis::FileName data("$ISISROOT/src/base/objs/ImportPdsTable/data/"); QString inputFile = data.expanded() + "VIR_IR_1A_1_332974737_1_HK.LBL"; if (--argc == 1) { inputFile = argv[1]; } diff --git a/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp b/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp index a5770b36fc..9a043a7729 100644 --- a/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp +++ b/isis/src/base/objs/NormModelFactory/NormModelFactory.cpp @@ -73,7 +73,7 @@ namespace Isis { p->read("NormModel.plugin"); } else { - p->read(QString(ISISROOT) + "/lib/NormModel.plugin"); + p->read("$ISISROOT/lib/NormModel.plugin"); } // Get the algorithm specific plugin and return it @@ -129,7 +129,7 @@ namespace Isis { p->read("NormModel.plugin"); } else { - p->read(QString(ISISROOT) + "/lib/NormModel.plugin"); + p->read("$ISISROOT/lib/NormModel.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp b/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp index 082bf1f14a..a550e209e2 100644 --- a/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp +++ b/isis/src/base/objs/PhotoModelFactory/PhotoModelFactory.cpp @@ -73,7 +73,7 @@ namespace Isis { p->read("PhotoModel.plugin"); } else { - p->read(QString(ISISROOT) + "/lib/PhotoModel.plugin"); + p->read("$ISISROOT/lib/PhotoModel.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/Plugin/Plugin.cpp b/isis/src/base/objs/Plugin/Plugin.cpp index a3141aec72..a36ec5b2c1 100644 --- a/isis/src/base/objs/Plugin/Plugin.cpp +++ b/isis/src/base/objs/Plugin/Plugin.cpp @@ -69,7 +69,7 @@ namespace Isis { bool loadedOk = lib.load(); if(!loadedOk) { - path = QString(ISISROOT) + "/lib/"; + path = "$ISISROOT/lib/"; libraryFile = path + library; } diff --git a/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp b/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp index 4413a3ed51..6c527fb2cc 100644 --- a/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp +++ b/isis/src/base/objs/PolygonSeederFactory/PolygonSeederFactory.cpp @@ -61,7 +61,7 @@ namespace Isis { p.read("PolygonSeeder.plugin"); } else { - p.read(QString(ISISROOT) + "/lib/PolygonSeeder.plugin"); + p.read("$ISISROOT/lib/PolygonSeeder.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index 59ddfc8269..26566c2372 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -115,11 +115,11 @@ namespace Isis { // If its a unitTest then load with the unitTest preference file if(unitTest) { - p_preference->Load(QString(ISISROOT) + "/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } // Otherwise load the Isis system and personal preferences. else { - p_preference->Load(QString(ISISROOT) + "/IsisPreferences"); + p_preference->Load("$ISISROOT/IsisPreferences"); Isis::FileName userPref("$HOME/.Isis/IsisPreferences"); if(userPref.fileExists()) { @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load(QString(ISISROOT) + "/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); } return *p_preference; diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp index 4862ab6417..495b22998b 100644 --- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp +++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.cpp @@ -53,7 +53,7 @@ namespace Isis { void ProgramLauncher::RunIsisProgram(QString programName, QString parameters) { FileName program(programName); - FileName isisExecutableFileName(QString(ISISROOT) + "/bin/" + program.name()); + FileName isisExecutableFileName("$ISISROOT/bin/" + program.name()); bool isIsisProgram = false; if(isisExecutableFileName.fileExists()) { diff --git a/isis/src/base/objs/ProgramLauncher/unitTest.cpp b/isis/src/base/objs/ProgramLauncher/unitTest.cpp index 0d1ac99a64..b4aa17dcaf 100644 --- a/isis/src/base/objs/ProgramLauncher/unitTest.cpp +++ b/isis/src/base/objs/ProgramLauncher/unitTest.cpp @@ -63,7 +63,7 @@ void IsisMain() { cerr << "That is the reason for the OS specific truth files. Please ignore the exit codes." << endl; cerr << endl; try { - ProgramLauncher::RunSystemCommand(QString(ISISROOT) + "/bin/stats " + ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats " "from=\\$base/testData/ab102401_ideal.cub -pid=999 " "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences"); } @@ -77,7 +77,7 @@ void IsisMain() { << endl; cerr << endl; try { - ProgramLauncher::RunSystemCommand(QString(ISISROOT) + "/bin/stats " + ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats " "from=unitTest.cub " "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences"); } diff --git a/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp b/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp index 079cf50a66..d2b8cc7194 100644 --- a/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp +++ b/isis/src/base/objs/ProjectionFactory/ProjectionFactory.cpp @@ -75,7 +75,7 @@ namespace Isis { if (localFile.fileExists()) m_projPlugin.read(localFile.expanded()); - FileName systemFile(QString(ISISROOT) + "/lib/Projection.plugin"); + FileName systemFile("$ISISROOT/lib/Projection.plugin"); if (systemFile.fileExists()) m_projPlugin.read(systemFile.expanded()); } @@ -143,7 +143,7 @@ namespace Isis { if (localFile.fileExists()) m_projPlugin.read(localFile.expanded()); - FileName systemFile(QString(ISISROOT) + "/lib/Projection.plugin"); + FileName systemFile("$ISISROOT/lib/Projection.plugin"); if (systemFile.fileExists()) m_projPlugin.read(systemFile.expanded()); } diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp index 5c31d657ce..971d808a57 100644 --- a/isis/src/base/objs/UserInterface/unitTest.cpp +++ b/isis/src/base/objs/UserInterface/unitTest.cpp @@ -301,7 +301,7 @@ int main(int argc, char *argv[]) { try { int myArgc = 0; <<<<<<< HEAD - strcpy(myArgv[myArgc++], QString(ISISROOT) + "/src/base/apps/highpass/highpass"); + strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); ======= strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass/highpass"); >>>>>>> fc8baa5a35cffe7b23a01f3cabbc9ff729d42cd5 @@ -893,7 +893,7 @@ int main(int argc, char *argv[]) { try { int myArgc = 0; <<<<<<< HEAD - strcpy(myArgv[myArgc++], QString(ISISROOT) + "/src/base/apps/highpass/highpass"); + strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); ======= strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass"); >>>>>>> fc8baa5a35cffe7b23a01f3cabbc9ff729d42cd5 diff --git a/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp b/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp index 2021046f1f..c23a4de8d7 100644 --- a/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp +++ b/isis/src/control/objs/InterestOperatorFactory/InterestOperatorFactory.cpp @@ -62,7 +62,7 @@ namespace Isis { p.read("InterestOperator.plugin"); } else { - p.read(QString(ISISROOT) + "/lib/InterestOperator.plugin"); + p.read("$ISISROOT/lib/InterestOperator.plugin"); } // Get the algorithm specific plugin and return it diff --git a/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp b/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp index 7ba7f077a8..3ce1c246a5 100644 --- a/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp +++ b/isis/src/qisis/apps/cneteditor/CnetEditorWindow.cpp @@ -55,7 +55,7 @@ namespace Isis { CnetEditorWindow::CnetEditorWindow() { // Add the Qt plugin directory to the library path - FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); + FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); // For some reason GUI style is not detected correctly by Qt for Isis. diff --git a/isis/src/qisis/apps/qmos/qmos.cpp b/isis/src/qisis/apps/qmos/qmos.cpp index fd34c674cf..b39bec5ef8 100644 --- a/isis/src/qisis/apps/qmos/qmos.cpp +++ b/isis/src/qisis/apps/qmos/qmos.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) { Isis::Gui::checkX11(); // Add the Qt plugin directory to the library path - FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); + FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); QApplication *app = new QIsisApplication(argc, argv); diff --git a/isis/src/qisis/apps/qnet/qnet.cpp b/isis/src/qisis/apps/qnet/qnet.cpp index a11f3779a5..cdcfe8ae6c 100644 --- a/isis/src/qisis/apps/qnet/qnet.cpp +++ b/isis/src/qisis/apps/qnet/qnet.cpp @@ -45,7 +45,7 @@ int main(int argc, char *argv[]) { try { // Add the Qt plugin directory to the library path - FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); + FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); diff --git a/isis/src/qisis/apps/qtie/qtie.cpp b/isis/src/qisis/apps/qtie/qtie.cpp index 5c0ff6a860..852a869d11 100644 --- a/isis/src/qisis/apps/qtie/qtie.cpp +++ b/isis/src/qisis/apps/qtie/qtie.cpp @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) { try { // Add the Qt plugin directory to the library path - FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); + FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); QApplication *app = new QApplication(argc, argv); diff --git a/isis/src/qisis/apps/qview/qview.cpp b/isis/src/qisis/apps/qview/qview.cpp index a503eac05e..95253f46c5 100644 --- a/isis/src/qisis/apps/qview/qview.cpp +++ b/isis/src/qisis/apps/qview/qview.cpp @@ -63,7 +63,7 @@ int main(int argc, char *argv[]) { Isis::Gui::checkX11(); // Add the Qt plugin directory to the library path - FileName qtpluginpath(QString(ISISROOT) + "/3rdParty/plugins"); + FileName qtpluginpath("$ISISROOT/3rdParty/plugins"); QCoreApplication::addLibraryPath(qtpluginpath.expanded()); // Check to see if the user wants to force a new window diff --git a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp index f5d7ec129a..140d2b5fab 100644 --- a/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp +++ b/isis/src/qisis/objs/ControlMeasureEditWidget/ControlMeasureEditWidget.cpp @@ -1659,7 +1659,7 @@ namespace Isis { toString((int)(m_rightMeasure->GetSample())) + "_" + toString((int)(m_rightMeasure->GetLine())) + "_"; QString fname = baseFile + "Search.cub"; - QString command = QString(ISISROOT) + "/bin/qview \'" + fname + "\'"; + QString command = "$ISISROOT/bin/qview \'" + fname + "\'"; m_autoRegFact->RegistrationSearchChip()->Write(fname); fname = baseFile + "Pattern.cub"; command += " \'" + fname + "\'"; diff --git a/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp b/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp index a26c2c3c41..9efdfb6b49 100644 --- a/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp +++ b/isis/src/qisis/objs/ControlPointEdit/ControlPointEdit.cpp @@ -1595,7 +1595,7 @@ namespace Isis { toString((int)(p_rightMeasure->GetSample())) + "_" + toString((int)(p_rightMeasure->GetLine())) + "_"; QString fname = baseFile + "Search.cub"; - QString command = QString(ISISROOT) + "/bin/qview \'" + fname + "\'"; + QString command = "$ISISROOT/bin/qview \'" + fname + "\'"; p_autoRegFact->RegistrationSearchChip()->Write(fname); fname = baseFile + "Pattern.cub"; command += " \'" + fname + "\'"; diff --git a/isis/src/qisis/objs/HelpTool/HelpTool.cpp b/isis/src/qisis/objs/HelpTool/HelpTool.cpp index 5be87d812d..63486ef413 100644 --- a/isis/src/qisis/objs/HelpTool/HelpTool.cpp +++ b/isis/src/qisis/objs/HelpTool/HelpTool.cpp @@ -61,7 +61,7 @@ namespace Isis { */ void HelpTool::aboutProgram() { FileName file( - QString(ISISROOT) + "/doc/Application/presentation/PrinterFriendly/" + + "$ISISROOT/doc/Application/presentation/PrinterFriendly/" + QApplication::applicationName() + "/" + QApplication::applicationName() + ".html"); diff --git a/isis/src/qisis/objs/MatchTool/MatchTool.cpp b/isis/src/qisis/objs/MatchTool/MatchTool.cpp index 7f4a6276ac..f7e4622208 100644 --- a/isis/src/qisis/objs/MatchTool/MatchTool.cpp +++ b/isis/src/qisis/objs/MatchTool/MatchTool.cpp @@ -209,7 +209,7 @@ namespace Isis { m_pointEditor->templateFileName()); m_templateFileNameLabel->setToolTip("Sub-pixel registration template File."); // QString patternMatchDoc = -// FileName(QString(ISISROOT) + "/doc/documents/PatternMatch/PatternMatch.html").fileName(); +// FileName("$ISISROOT/doc/documents/PatternMatch/PatternMatch.html").fileName(); // m_templateFileNameLabel->setOpenExternalLinks(true); m_templateFileNameLabel->setWhatsThis("FileName of the sub-pixel " "registration template. Refer to $ISISROOT/doc/documents/" diff --git a/isis/src/qisis/objs/QnetTools/QnetTool.cpp b/isis/src/qisis/objs/QnetTools/QnetTool.cpp index 259b55959d..74be1f6a70 100644 --- a/isis/src/qisis/objs/QnetTools/QnetTool.cpp +++ b/isis/src/qisis/objs/QnetTools/QnetTool.cpp @@ -182,7 +182,7 @@ namespace Isis { m_pointEditor->templateFileName()); m_templateFileNameLabel->setToolTip("Sub-pixel registration template File."); // QString patternMatchDoc = -// FileName(QString(ISISROOT) + "/doc/documents/PatternMatch/PatternMatch.html").fileName(); +// FileName("$ISISROOT/doc/documents/PatternMatch/PatternMatch.html").fileName(); // m_templateFileNameLabel->setOpenExternalLinks(true); m_templateFileNameLabel->setWhatsThis("FileName of the sub-pixel " "registration template. Refer to $ISISROOT/doc/documents/" diff --git a/isis/src/system/apps/isiscomplete/isiscomplete.cpp b/isis/src/system/apps/isiscomplete/isiscomplete.cpp index a879fcb7ab..bc90d0ed81 100644 --- a/isis/src/system/apps/isiscomplete/isiscomplete.cpp +++ b/isis/src/system/apps/isiscomplete/isiscomplete.cpp @@ -64,7 +64,7 @@ void MakeCompletion(const QString &appName) { } if(appName.compare("isisui") == 0) { - QString binPath = FileName(QString(ISISROOT) + "/bin").expanded(); + QString binPath = FileName("$ISISROOT/bin").expanded(); cout << "complete isisui 'n@*@F:" << binPath << "/@'; "; return; } diff --git a/isis/src/viking/apps/vik2isis/vik2isis.cpp b/isis/src/viking/apps/vik2isis/vik2isis.cpp index 6d26685fb7..c1eb241c30 100644 --- a/isis/src/viking/apps/vik2isis/vik2isis.cpp +++ b/isis/src/viking/apps/vik2isis/vik2isis.cpp @@ -40,7 +40,7 @@ void IsisMain() { } catch(IException &e) { tempFile = true; - QString command = QString(ISISROOT) + "/bin/vdcomp " + in.expanded() + " " + + QString command = "$ISISROOT/bin/vdcomp " + in.expanded() + " " + temp.expanded() + " > /dev/null 2>&1"; int returnValue = system(command.toLatin1().data()) >> 8; if(returnValue) { diff --git a/isis/src/voyager/apps/voy2isis/voy2isis.cpp b/isis/src/voyager/apps/voy2isis/voy2isis.cpp index 1aab0316e8..5c6b6002a2 100644 --- a/isis/src/voyager/apps/voy2isis/voy2isis.cpp +++ b/isis/src/voyager/apps/voy2isis/voy2isis.cpp @@ -51,7 +51,7 @@ void IsisMain() { QString ext = in.extension().toUpper(); if (ext == "IMQ") { try { - QString command = QString(ISISROOT) + "/bin/vdcomp " + in.expanded() + " " + temp.expanded(); + QString command = "$ISISROOT/bin/vdcomp " + in.expanded() + " " + temp.expanded(); // don't pretend vdcomp is a standard Isis program, just run it ProgramLauncher::RunSystemCommand(command); in = temp.expanded(); -- GitLab From bc1a1f9384f4f2ef4e4f3c4ad0ac7cf4e2cdf8d2 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 26 Feb 2018 13:44:59 -0700 Subject: [PATCH 078/620] Removed QT_PLUGIN_PATH being set by setisis, hardcoded lib load dirs --- isis/scripts/isis3Startup.sh | 4 ---- .../src/base/objs/Environment/Environment.cpp | 21 +++++++------------ isis/src/base/objs/UserInterface/unitTest.cpp | 12 ++--------- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/isis/scripts/isis3Startup.sh b/isis/scripts/isis3Startup.sh index de0dfcac52..d9728383d5 100755 --- a/isis/scripts/isis3Startup.sh +++ b/isis/scripts/isis3Startup.sh @@ -37,7 +37,3 @@ else PATH="$ISISROOT/bin" fi export PATH - -# Create QT_PLUGIN_PATH env variable -QT_PLUGIN_PATH="$ISISROOT/3rdParty/plugins" -export QT_PLUGIN_PATH diff --git a/isis/src/base/objs/Environment/Environment.cpp b/isis/src/base/objs/Environment/Environment.cpp index b0d5726d75..4486c5e693 100644 --- a/isis/src/base/objs/Environment/Environment.cpp +++ b/isis/src/base/objs/Environment/Environment.cpp @@ -28,12 +28,7 @@ if ( !core ) { std::cout << "**** Qt Plugin Path is not set because no instance of QCoreApplication ****\n"; } - else { - Isis::IString thirdPartyPluginPath = root + "/3rdParty/plugins"; - pluginPaths << thirdPartyPluginPath.ToQt(); - core->setLibraryPaths(pluginPaths); - } - + return; } @@ -102,7 +97,7 @@ namespace Isis { QString Environment::userName() { return getEnvironmentValue("USER", "Unknown"); } - + /** * @returns the host name. Returns 'Unknown' if it cannot find the host name. @@ -110,8 +105,8 @@ namespace Isis { QString Environment::hostName() { return getEnvironmentValue("HOST", "Unknown"); } - - + + /** * @param variable The environment variable to get * @param defaultValue The returned value for variable if variable doesn't @@ -121,16 +116,16 @@ namespace Isis { */ QString Environment::getEnvironmentValue(QString variable, QString defaultValue) { - + QString value = defaultValue; - + char *envValue = getenv(variable.toLatin1().data()); if (envValue) value = envValue; - + return value; } - + /** * @returns the Isis version in the format isis?.?.?.?qualifier | date diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp index 971d808a57..d07d5d6f15 100644 --- a/isis/src/base/objs/UserInterface/unitTest.cpp +++ b/isis/src/base/objs/UserInterface/unitTest.cpp @@ -14,8 +14,8 @@ int main(int argc, char *argv[]) { cout << "Unit test for Isis::UserInterface ..." << endl; - QString unitTestXml = Isis::FileName(ISISBUILDDIR + "/unitTest/isis3_unit_test_UserInterface.xml").expanded(); - QString highpass = Isis::FileName(ISISBUILDDIR + "/bin/xml/highpass.xml").expanded(); + QString unitTestXml = Isis::FileName(QString(ISISBUILDDIR) + "/unitTest/isis3_unit_test_UserInterface.xml").expanded(); + QString highpass = Isis::FileName(QString(ISISBUILDDIR) + "/bin/xml/highpass.xml").expanded(); char *myArgv[15];// = {"unitTest", "from=input.cub", "to=output.cub"}; @@ -300,11 +300,7 @@ int main(int argc, char *argv[]) { cout << "Testing Invalid Parameter" << endl; try { int myArgc = 0; -<<<<<<< HEAD - strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); -======= strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass/highpass"); ->>>>>>> fc8baa5a35cffe7b23a01f3cabbc9ff729d42cd5 strcpy(myArgv[myArgc++], "bogus=parameter"); Isis::UserInterface ui(unitTestXml, myArgc, myArgv); @@ -892,11 +888,7 @@ int main(int argc, char *argv[]) { cout << "Testing -RESTORE with invalid (non-existing) .par file" << endl; try { int myArgc = 0; -<<<<<<< HEAD - strcpy(myArgv[myArgc++], "$ISISROOT/src/base/apps/highpass/highpass"); -======= strcpy(myArgv[myArgc++], "$ISISROOT/bin/highpass"); ->>>>>>> fc8baa5a35cffe7b23a01f3cabbc9ff729d42cd5 strcpy(myArgv[myArgc++], "-restore=junk.par"); Isis::UserInterface ui(unitTestXml, myArgc, myArgv); -- GitLab From 890f8df96d5037e08aa55c4637577e98f2304a94 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 26 Feb 2018 14:23:46 -0700 Subject: [PATCH 079/620] removed debug prints, unittests now run as ./unitTest --- isis/cmake/RunUnitTest.cmake | 12 ++++-------- isis/src/base/objs/Application/unitTest.exclude | 1 + isis/src/base/objs/Preference/Preference.cpp | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 64b92a316b..95cd547f63 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -23,19 +23,15 @@ get_filename_component(truthFolder ${TRUTH_FILE} DIRECTORY) # otherwise a GUI will pop up and ruin the test. get_filename_component(binFolder ${TEST_PROG} DIRECTORY) get_filename_component(binName ${TEST_PROG} NAME) +set(tempDir ${binFolder}/${binName}_temp) +execute_process(COMMAND rm -rf ${tempDir}) +execute_process(COMMAND mkdir -p ${tempDir}) execute_process(COMMAND ln -s ${TEST_PROG} ${tempLink}) execute_process(COMMAND ln -s ${truthFolder}/unitTest.xml ${truthFolder}/${binName}.xml) -message("TEMP DIR: ${tempDir}") -message("Bin Name: ${binName}") -message("Bin Folder: ${binFolder}") -message("TEST_PROG: ${TEST_PROG}") -message("tempLink: " ${tempLink}) -message("truthFolder" ${truthFolder}) - # Run the unit test executable and pipe the output to a text file. -execute_process(COMMAND ${TEST_PROG} +execute_process(COMMAND ./unitTest WORKING_DIRECTORY ${truthFolder} OUTPUT_FILE ${outputFile} ERROR_FILE ${outputFile} diff --git a/isis/src/base/objs/Application/unitTest.exclude b/isis/src/base/objs/Application/unitTest.exclude index 0fb6a5c297..6fd1eec123 100644 --- a/isis/src/base/objs/Application/unitTest.exclude +++ b/isis/src/base/objs/Application/unitTest.exclude @@ -6,4 +6,5 @@ IsisVersion Connect Cpu Program = +File diff --git a/isis/src/base/objs/Preference/Preference.cpp b/isis/src/base/objs/Preference/Preference.cpp index 26566c2372..ee455a5b7a 100644 --- a/isis/src/base/objs/Preference/Preference.cpp +++ b/isis/src/base/objs/Preference/Preference.cpp @@ -134,7 +134,7 @@ namespace Isis { else if(unitTest) { p_unitTest = unitTest; p_preference->clear(); - p_preference->Load("$ISISROOT/src/base/objs/Preference/TestPreferences"); + p_preference->Load("$ISISROOT/TestPreferences"); } return *p_preference; -- GitLab From 51ac060309b41f1eeba70f5c1f11f19443e0f095 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 26 Feb 2018 14:27:23 -0700 Subject: [PATCH 080/620] removed previous .xml logic --- isis/cmake/RunUnitTest.cmake | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 95cd547f63..5a30fa16a5 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -26,9 +26,7 @@ get_filename_component(binName ${TEST_PROG} NAME) set(tempDir ${binFolder}/${binName}_temp) execute_process(COMMAND rm -rf ${tempDir}) execute_process(COMMAND mkdir -p ${tempDir}) - -execute_process(COMMAND ln -s ${TEST_PROG} ${tempLink}) -execute_process(COMMAND ln -s ${truthFolder}/unitTest.xml ${truthFolder}/${binName}.xml) +execute_process(COMMAND ln -s ${TEST_PROG} ${truthFolder}/unitTest) # Run the unit test executable and pipe the output to a text file. execute_process(COMMAND ./unitTest -- GitLab From cbe729995752adb2a4fdf886b7df5f2f6bab432e Mon Sep 17 00:00:00 2001 From: Cole <34170587+cneubauerUSGS@users.noreply.github.com> Date: Mon, 26 Feb 2018 15:24:05 -0700 Subject: [PATCH 081/620] Docs Fix (#21) * Changed FileName uniteTest to reflect new ISISROOT * Made pathing changes to reflect build directory being ISISROOT for unitTest * Moved libs in build dir to 3rdParty * Unit Test work now * Revert Trash Commits This reverts commit 14f01a2802bdc0c8fb67022841a189ed79e9301e. * Revert Trash Commits This reverts commit 268033784ec0dfdfae1fa88fca5e8db4f6ffdf4a. * Changes output directory for apptests and help apps find TestPreferences * Changed Command To Execute App Tests Previous change ruined the command and stopped execution of App Tests * Added a copy of 3rdParty dependencies into 3rdParty structure * Same changes but better * Changes * Changes * Unit Test and App Test work * Cleanup * A bit of a hacky fix for cmake docs * Non hacky fix for docs * Forgot how install worked for a second * Commented code and changed command --- isis/cmake/BuildDocs.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/isis/cmake/BuildDocs.cmake b/isis/cmake/BuildDocs.cmake index 98ddb27faa..1335fc5a49 100644 --- a/isis/cmake/BuildDocs.cmake +++ b/isis/cmake/BuildDocs.cmake @@ -460,7 +460,7 @@ function(build_docs) # Set up output directory and a temporary directory for building set(docBuildFolder ${CMAKE_BINARY_DIR}/docBuild) set(appDataFolder ${docBuildFolder}/Application/data) - set(docInstallFolder ${CMAKE_INSTALL_PREFIX}/doc) # Final output documentation + set(docInstallFolder ${CMAKE_BINARY_DIR}/docs) # Final output documentation # Clean up existing files execute_process(COMMAND rm -rf ${docBuildFolder}) @@ -495,8 +495,12 @@ function(build_docs) message("Building object documentation") build_object_docs() + # copy the built docs in the build directory over to the install directory on install + execute_process(COMMAND cp -rf ${docInstallFolder} ${CMAKE_INSTALL_PREFIX}) + message("Finished building object documentation!") + endfunction(build_docs) -- GitLab From 75b86b66fcb6dd7455efd9bc7b3b289bff1f805a Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 26 Feb 2018 15:26:22 -0700 Subject: [PATCH 082/620] fixed some false positives --- isis/cmake/RunUnitTest.cmake | 5 +- .../src/base/objs/ImportPdsTable/unitTest.cpp | 2 +- .../ProgramLauncher/ProgramLauncher.truth | 70 ++++++++++--------- ...amLauncher_Darwin_x86_64_MacOSX10_11.truth | 3 +- .../base/objs/ProgramLauncher/unitTest.cpp | 8 +-- 5 files changed, 45 insertions(+), 43 deletions(-) diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 5a30fa16a5..1fc05e4f3d 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -65,8 +65,9 @@ if(DIFFERENT) message(FATAL_ERROR "Test failed - files differ") # On error the result file is left around to aid in debugging. else() - # file(REMOVE ${outputFile}) # On success, clean out the result file. + file(REMOVE ${outputFile}) # On success, clean out the result file. + execute_process(COMMAND rm -rf ${tempdir}) endif() # Clean up our temporary folder -execute_process(COMMAND rm -f ${truthFolder}/${binName}.xml) +execute_process(COMMAND rm -f ${truthFolder}/unitTest) diff --git a/isis/src/base/objs/ImportPdsTable/unitTest.cpp b/isis/src/base/objs/ImportPdsTable/unitTest.cpp index 968692d13e..0e59535441 100644 --- a/isis/src/base/objs/ImportPdsTable/unitTest.cpp +++ b/isis/src/base/objs/ImportPdsTable/unitTest.cpp @@ -91,7 +91,7 @@ class ImportPdsTableTester : public ImportPdsTable { */ int main(int argc, char *argv[]) { Isis::Preference::Preferences(true); - Isis::FileName data("$ISISROOT/src/base/objs/ImportPdsTable/data/"); + Isis::FileName data("data/"); QString inputFile = data.expanded() + "VIR_IR_1A_1_332974737_1_HK.LBL"; if (--argc == 1) { inputFile = argv[1]; } diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth index 67325455f4..7f794f7ff3 100644 --- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth +++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher.truth @@ -4,39 +4,41 @@ Testing ls, grep, sed and pipes ... ProgramLauncher.cpp ProgramLauncher.h -ProgramLauncher.o ProgramLauncher.truth Testing stats ... +greyscale: Working +0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed hist: Computing min/max for histogram 0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed hist: Gathering histogram 0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed Group = Results - From = /usgs/cpkgs/isis3/data/base/testData/ab102401_ide- - al.cub + From = unitTest.cub Band = 1 - Average = 0.040536894512714 - StandardDeviation = 0.01519314883071 - Variance = 2.30831771392117e-04 - Median = 0.037797920878468 - Mode = 0.034160507255072 - Skew = 0.54083067271281 - Minimum = 0.010204331949353 - Maximum = 0.095491595566273 - Sum = 31525.745547011 - TotalPixels = 1152000 - ValidPixels = 777705 + Average = 24.999999961853 + StandardDeviation = 14.728323083889 + Variance = 216.92350086341 + Median = 24.489967193103 + Mode = 0.0 + Skew = 0.10388815464838 + Minimum = 0.0 + Maximum = 50.0 + Sum = 62499.999904633 + TotalPixels = 2500 + ValidPixels = 2500 OverValidMaximumPixels = 0 UnderValidMinimumPixels = 0 - NullPixels = 353897 + NullPixels = 0 LisPixels = 0 LrsPixels = 0 HisPixels = 0 - HrsPixels = 20398 + HrsPixels = 0 End_Group Testing malformed command... +NOTE: The exit code for this test differs on each OS. +That is the reason for the OS specific truth files. Please ignore the exit codes. sh: -c: line 0: unexpected EOF while looking for matching `'' sh: -c: line 1: syntax error: unexpected end of file @@ -47,10 +49,11 @@ Testing non-existant Isis 3 program... **ERROR** Program [chocolatelab] does not appear to be a valid Isis 3 program. Testing using Isis 3 program as a system program... +NOTE: The exit code for this test differs on each OS. +That is the reason for the OS specific truth files. Please ignore the exit codes. -terminate called after throwing an instance of 'Isis::IException' - what(): **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999]. -**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/src/base/objs/Preference/TestPreferences] failed with return status [6]. +libc++abi.dylib: terminating with uncaught exception of type Isis::IException: **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999]. +**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [6]. Testing using Isis 3 program as a system program without pid... @@ -59,25 +62,24 @@ stats: Computing min/max for histogram stats: Gathering histogram 0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed Group = Results - From = /usgs/cpkgs/isis3/data/base/testData/ab102401_ide- - al.cub + From = unitTest.cub Band = 1 - Average = 0.040536894512714 - StandardDeviation = 0.01519314883071 - Variance = 2.30831771392117e-04 - Median = 0.037797920878468 - Mode = 0.034160507255072 - Skew = 0.54083067271281 - Minimum = 0.010204331949353 - Maximum = 0.095491595566273 - Sum = 31525.745547011 - TotalPixels = 1152000 - ValidPixels = 777705 + Average = 24.999999961853 + StandardDeviation = 14.728323083889 + Variance = 216.92350086341 + Median = 24.489967193103 + Mode = 0.0 + Skew = 0.10388815464838 + Minimum = 0.0 + Maximum = 50.0 + Sum = 62499.999904633 + TotalPixels = 2500 + ValidPixels = 2500 OverValidMaximumPixels = 0 UnderValidMinimumPixels = 0 - NullPixels = 353897 + NullPixels = 0 LisPixels = 0 LrsPixels = 0 HisPixels = 0 - HrsPixels = 20398 + HrsPixels = 0 End_Group diff --git a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth index 70eedde8c6..7f794f7ff3 100644 --- a/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth +++ b/isis/src/base/objs/ProgramLauncher/ProgramLauncher_Darwin_x86_64_MacOSX10_11.truth @@ -4,7 +4,6 @@ Testing ls, grep, sed and pipes ... ProgramLauncher.cpp ProgramLauncher.h -ProgramLauncher.o ProgramLauncher.truth Testing stats ... @@ -54,7 +53,7 @@ NOTE: The exit code for this test differs on each OS. That is the reason for the OS specific truth files. Please ignore the exit codes. libc++abi.dylib: terminating with uncaught exception of type Isis::IException: **ERROR** This process (program) was executed by an existing Isis 3 process. However, we failed to establish a communication channel with the parent (launcher) process. The parent process has a PID of [999]. -**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/src/base/objs/Preference/TestPreferences] failed with return status [6]. +**PROGRAMMER ERROR** Executing command [$ISISROOT/bin/stats from=\$base/testData/ab102401_ideal.cub -pid=999 -preference=\$ISISROOT/TestPreferences] failed with return status [6]. Testing using Isis 3 program as a system program without pid... diff --git a/isis/src/base/objs/ProgramLauncher/unitTest.cpp b/isis/src/base/objs/ProgramLauncher/unitTest.cpp index b4aa17dcaf..b71a426407 100644 --- a/isis/src/base/objs/ProgramLauncher/unitTest.cpp +++ b/isis/src/base/objs/ProgramLauncher/unitTest.cpp @@ -25,11 +25,11 @@ void IsisMain() { cerr << "Testing stats ... " << endl; cerr << endl; ProgramLauncher::RunSystemCommand("greyscale to=unitTest.cub enddn=50.0 samples=50 lines=50 " - "-preference=$ISISROOT/src/base/objs/Preference/TestPreferences"); + "-preference=$ISISROOT/TestPreferences"); ProgramLauncher::RunIsisProgram("stats", "from=unitTest.cub " - "-preference=$ISISROOT/src/base/objs/Preference/TestPreferences"); + "-preference=$ISISROOT/TestPreferences"); cerr << endl; cerr << "Testing malformed command... " << endl; @@ -65,7 +65,7 @@ void IsisMain() { try { ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats " "from=\\$base/testData/ab102401_ideal.cub -pid=999 " - "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences"); + "-preference=\\$ISISROOT/TestPreferences"); } catch(IException &e) { e.print(); @@ -79,7 +79,7 @@ void IsisMain() { try { ProgramLauncher::RunSystemCommand("$ISISROOT/bin/stats " "from=unitTest.cub " - "-preference=\\$ISISROOT/src/base/objs/Preference/TestPreferences"); + "-preference=\\$ISISROOT/TestPreferences"); } catch(IException &e) { e.print(); -- GitLab From fdf02197ee3681e089756dc6b52a132c1b9145f4 Mon Sep 17 00:00:00 2001 From: Christopher Ryan Combs Jr Date: Tue, 27 Feb 2018 10:47:16 -0700 Subject: [PATCH 083/620] Added generic superlu library name --- isis/cmake/FindSuperLU.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 5cf95e09b8..9365e0812a 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -11,7 +11,7 @@ find_path(SUPERLU_INCLUDE_DIR ) find_library(SUPERLU_LIBRARY - NAMES "superlu_${SuperLU_FIND_VERSION}" + NAMES "superlu_${SuperLU_FIND_VERSION}" "superlu" ) get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) -- GitLab From 42ef4b6b8c7f34640ad6c449d51913e82656f778 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 17:22:48 -0700 Subject: [PATCH 084/620] kakadu fix --- isis/CMakeLists.txt | 71 +++--- isis/cmake/FindAllDependencies.cmake | 46 +++- isis/cmake/FindBullet.cmake | 22 +- isis/cmake/FindCSPICE.cmake | 4 +- isis/cmake/FindCholmod.cmake | 16 +- isis/cmake/FindEigen.cmake | 2 +- isis/cmake/FindEmbree.cmake | 4 +- isis/cmake/FindGMM.cmake | 2 + isis/cmake/FindGSL.cmake | 4 + isis/cmake/FindGeoTIFF.cmake | 3 + isis/cmake/FindGeos.cmake | 6 +- isis/cmake/FindHDF5.cmake | 6 + isis/cmake/FindJama.cmake | 2 +- isis/cmake/FindKakadu.cmake | 3 + isis/cmake/FindNN.cmake | 3 + isis/cmake/FindOpenCV.cmake | 15 ++ isis/cmake/FindPCL.cmake | 5 + isis/cmake/FindProtobuf.cmake | 3 + isis/cmake/FindQwt.cmake | 3 + isis/cmake/FindSuperLU.cmake | 4 + isis/cmake/FindTIFF.cmake | 5 +- isis/cmake/FindTNT.cmake | 2 + isis/cmake/FindX11.cmake | 2 + isis/cmake/FindXercesC.cmake | 3 + isis/cmake/matching.py | 316 +++++++++++++++++++++++++++ 25 files changed, 470 insertions(+), 82 deletions(-) create mode 100644 isis/cmake/matching.py diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 88182d3989..1debc7d159 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -10,41 +10,7 @@ cmake_minimum_required(VERSION 3.4) # Point cmake to our other CMake files. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") -list(APPEND CMAKE_INCLUDE_PATH - /usgs/pkgs/local/v007/include/ - /usgs/pkgs/local/v007/bin/ - /usgs/pkgs/local/v007/lib/ - /usgs/pkgs/local/v007/objects/ - /usgs/pkgs/local/v007/include/google-protobuf/protobuf2.6.1/ - /usgs/pkgs/local/v007/include/xercesc/xercesc-3.1.2/ - /usgs/pkgs/local/v007/include/tiff/tiff-4.0.5/ - /usr/lib64/ -) - -set(CMAKE_PREFIX_PATH - /usgs/pkgs/local/v007/include/ - /usgs/pkgs/local/v007/bin/ - /usgs/pkgs/local/v007/lib/ - /usgs/pkgs/local/v007/libexec/ - /opt/usgs/v007/ports/Library/Frameworks/ - /opt/usgs/v007/ports/libexec/ - /opt/usgs/v007/ports/bin/ - /opt/usgs/v007/ports/lib/ - /opt/usgs/v007/ports/include/ - /opt/usgs/v007/ports/libexec/qt5 - /opt/usgs/v007/ports/libexec/qt5/bin/ - /opt/usgs/v007/ports/libexec/qt5/lib/ - /opt/usgs/v007/3rdparty/bin - /opt/usgs/v007/3rdparty/include/ - /opt/usgs/v007/3rdparty/lib/ - /opt/usgs/v007/proprietary/ - /opt/usgs/v007/proprietary/include/ - /opt/usgs/v007/proprietary/lib/ - /usr/lib/ - /usr/lib64/ - /usr/local/lib/ -) - +# always look for framworks last set(CMAKE_FIND_FRAMEWORK LAST) include(AddIsisModule) @@ -58,7 +24,6 @@ include(InstallThirdParty) project (USGS_ISIS) - # Short and long name of this package set(PACKAGE "ISIS") set(PACKAGE_NAME "USGS ISIS") @@ -95,17 +60,31 @@ set(BUILD_SHARED_LIBS ON) # Specify flags used set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) -#set(thirdPartyCppFlags -Wall -ansi -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) # Specify user options that can be passed in with the initial CMake command. -option(isis3Data "Directory containing Isis3Data" "NA") -option(isis3TestData "Directory containing Isis3TestData" "NA") -option(testOutputDir "Directory to store app test output folders" "NA") -option(buildCore "Build the core ISIS modules" ON ) -option(buildMissions "Build the mission specific modules" ON ) -option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) -option(buildTests "Set up unit, application, and module tests." ON ) -option(JP2KFLAG "Whether or not to build using JPEG200 support" OFF ) +option(isis3Data "Directory containing Isis3Data" OFF ) +option(isis3TestData "Directory containing Isis3TestData" OFF ) +option(testOutputDir "Directory to store app test output folders" OFF ) +option(buildCore "Build the core ISIS modules" ON ) +option(buildMissions "Build the mission specific modules" ON ) +option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) +option(buildTests "Set up unit, application, and module tests." ON ) +option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) +option(develop "Use a devleopment configuration" ON ) + +# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K +# needs to be either 1 or 0 for C style true false +if(JP2KFLAG) + set(JP2KFLAG 1) +endif() + +# Prioritize passed in variables over env vars, probably a better way to do this +if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data) + set(isis3Data $ENV{ISIS3DATA}) +endif() +if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData) + set(isis3TestData $ENV{ISIS3TESTDATA}) +endif() if(EXISTS ${isis3Data}) set(ENV{ISIS3DATA} "${isis3Data}") @@ -113,12 +92,14 @@ if(EXISTS ${isis3Data}) else() message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") endif() + if(EXISTS ${isis3TestData}) set(ENV{ISIS3TESTDATA} "${isis3TestData}") message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") else() message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") endif() + #if(EXISTS ${CMAKE_INSTALL_PREFIX}) # set(ENV{CMAKE_INSTALL_PREFIX} "${CMAKE_INSTALL_PREFIX}") # message("Using INSTALL PREFIX = $ENV{CMAKE_INSTALL_PREFIX}") diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 0c1be11430..29810c2a93 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -4,6 +4,41 @@ # go looking for them if they are not? #=============================================================================== +list(APPEND CMAKE_INCLUDE_PATH + /usgs/pkgs/local/v007/include/ + /usgs/pkgs/local/v007/bin/ + /usgs/pkgs/local/v007/lib/ + /usgs/pkgs/local/v007/objects/ + /usgs/pkgs/local/v007/include/google-protobuf/protobuf2.6.1/ + /usgs/pkgs/local/v007/include/xercesc/xercesc-3.1.2/ + /usgs/pkgs/local/v007/include/tiff/tiff-4.0.5/ + /usr/lib64/ +) + +set(CMAKE_PREFIX_PATH + /usgs/pkgs/local/v007/include/ + /usgs/pkgs/local/v007/bin/ + /usgs/pkgs/local/v007/lib/ + /usgs/pkgs/local/v007/libexec/ + /opt/usgs/v007/ports/Library/Frameworks/ + /opt/usgs/v007/ports/libexec/ + /opt/usgs/v007/ports/bin/ + /opt/usgs/v007/ports/lib/ + /opt/usgs/v007/ports/include/ + /opt/usgs/v007/ports/libexec/qt5 + /opt/usgs/v007/ports/libexec/qt5/bin/ + /opt/usgs/v007/ports/libexec/qt5/lib/ + /opt/usgs/v007/3rdparty/bin + /opt/usgs/v007/3rdparty/include/ + /opt/usgs/v007/3rdparty/lib/ + /opt/usgs/v007/proprietary/ + /opt/usgs/v007/proprietary/include/ + /opt/usgs/v007/proprietary/lib/ + /usr/lib/ + /usr/lib64/ + /usr/local/lib/ +) + # Specify top level directories set(thirdPartyDir "/usgs/pkgs/local/v007") set(INCLUDE_DIR "${thirdPartyDir}/include") @@ -66,7 +101,7 @@ if(APPLE) Widgets Xml XmlPatterns REQUIRED) -else() #oh god why +else() # oh god why find_path(QT5_CORE_INCLUDE_DIR NAMES qchar.h PATH_SUFFIXES qt/qt5.7.1/QtCore/) find_path(QT5_CONCURRENT_INCLUDE_DIR NAMES qtconcurrentmap.h PATH_SUFFIXES qt/qt5.7.1/QtConcurrent) find_path(QT5_DBUS_INCLUDE_DIR NAMES qdbusmacros.h PATH_SUFFIXES qt/qt5.7.1/QtDBus) @@ -147,6 +182,7 @@ find_package(TIFF 4.0.5 REQUIRED) # "tiff/tiff-${TIFF_FIND_VERSION}" find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 directory is "tnt/tnt126/" find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" find_package(X11 6 REQUIRED) +find_package(OpenGL REQUIRED) # v007 might have different versions installed for our mac and linux systems. # Im this case, we specify the version numbers being searched for in the non-traditional installs. @@ -156,14 +192,10 @@ else(APPLE) find_package(Geos 3.5.1 REQUIRED) endif(APPLE) - - - # Only include Kakadu if it is available -if(${JP2KFLAG}) - message("ENABLING KAKADU") +if(JP2KFLAG) find_package(Kakadu) -endif(${JP2KFLAG}) +endif() get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES foreach (_variableName ${_variableNames}) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index 999c3acb7d..3d4f96c01e 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -23,14 +23,14 @@ find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) -message( "BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) -message( "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) -message( "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) -message( "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) -message( "BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) -message( "BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) -message( "BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) -message( "BULLET3 DYNAMICS: " ${BULLET3_DYNAMICS_LIBRARY} ) -message( "BULLET3 COLLISION: " ${BULLET3_COLLISION_LIBRARY} ) -message( "BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) -message( "BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) +message( "-- BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) +message( "-- BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) +message( "-- BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) +message( "-- BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) +message( "-- BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) +message( "-- BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) +message( "-- BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) +message( "-- BULLET3 DYNAMICS: " ${BULLET3_DYNAMICS_LIBRARY} ) +message( "-- BULLET3 COLLISION: " ${BULLET3_COLLISION_LIBRARY} ) +message( "-- BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) +message( "-- BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index 513a3ced61..263d535b27 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -14,5 +14,5 @@ find_library(CSPICE_LIBRARY NAMES cspice ) -message( "CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) -message( "CSPICE LIB: " ${CSPICE_LIBRARY} ) +message( "-- CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) +message( "-- CSPICE LIB: " ${CSPICE_LIBRARY} ) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index d6d3cd10e2..5b2804e6c8 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -34,14 +34,14 @@ find_library(BLAS_LIBRARY NAMES blas) get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) -message( "CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) -message( "CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) -message( "CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) -message( "CAMD LIB: " ${CAMD_LIBRARY} ) -message( "AMD LIB: " ${AMD_LIBRARY} ) -message( "SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) -message( "FORTRAN LIB: " ${FORTRAN_LIBRARY} ) -message( "BLAS LIB: " ${BLAS_LIBRARY} ) +message( "-- CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) +message( "-- CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) +message( "-- CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) +message( "-- CAMD LIB: " ${CAMD_LIBRARY} ) +message( "-- AMD LIB: " ${AMD_LIBRARY} ) +message( "-- SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) +message( "-- FORTRAN LIB: " ${FORTRAN_LIBRARY} ) +message( "-- BLAS LIB: " ${BLAS_LIBRARY} ) if(NOT APPLE) message("LAPACK LIB" ${LAPACK_LIBRARY}) diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake index 0f278c2f94..ef0829284e 100644 --- a/isis/cmake/FindEigen.cmake +++ b/isis/cmake/FindEigen.cmake @@ -14,4 +14,4 @@ find_path(EIGEN_ROOT_INCLUDE_DIR PATH_SUFFIXES eigen eigen3 ) -message( "EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) +message( "-- EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake index 5fcdbf4be4..786e3307f6 100644 --- a/isis/cmake/FindEmbree.cmake +++ b/isis/cmake/FindEmbree.cmake @@ -16,5 +16,5 @@ find_library(EMBREE_LIBRARY get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY) -message("EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) -message("EMBREE LIB: " ${EMBREE_LIBRARY}) +message( "-- EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) +message( "-- EMBREE LIB: " ${EMBREE_LIBRARY}) diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake index 58f4717a4f..e2a7d8da50 100644 --- a/isis/cmake/FindGMM.cmake +++ b/isis/cmake/FindGMM.cmake @@ -10,3 +10,5 @@ find_path(GMM_INCLUDE_DIR ) get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) + +message( "-- GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake index 8a1675e5f2..cd38cf470f 100644 --- a/isis/cmake/FindGSL.cmake +++ b/isis/cmake/FindGSL.cmake @@ -19,3 +19,7 @@ find_library(GSL_CBLAS_LIBRARY ) get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY) + +message( "-- GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") +message( "-- GSL LIB: ${GSL_LIBRARY}") +message( "-- GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index 66930a9f75..293a4ae9c0 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -15,3 +15,6 @@ find_library(GEOTIFF_LIBRARY ) get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) + +message( "-- GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") +message( "-- GEOTIFF LIB: ${GSL_LIBRARY}") diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake index 3ef3be7682..8f4cf44249 100644 --- a/isis/cmake/FindGeos.cmake +++ b/isis/cmake/FindGeos.cmake @@ -17,8 +17,8 @@ find_library(GEOS_C_LIBRARY NAMES geos_c ) -message( "GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) -message( "GEOS LIB: " ${GEOS_LIBRARY} ) -message( "GEOS C LIB: " ${GEOS_C_LIBRARY} ) +message( "-- GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) +message( "-- GEOS LIB: " ${GEOS_LIBRARY} ) +message( "-- GEOS C LIB: " ${GEOS_C_LIBRARY} ) get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindHDF5.cmake b/isis/cmake/FindHDF5.cmake index 2fc9f7328e..e9abbc72b8 100644 --- a/isis/cmake/FindHDF5.cmake +++ b/isis/cmake/FindHDF5.cmake @@ -16,3 +16,9 @@ find_library(HDF5_HL_LIBRARY NAMES hdf5_hl) find_library(HDF5_HLCPP_LIBRARY NAMES hdf5_hl_cpp) get_filename_component(HDF5_ROOT_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" DIRECTORY) + +message( "-- HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") +message( "-- HDF5 LIB: ${HDF5_LIBRARY}") +message( "-- HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") +message( "-- HDF5 HL LIB: ${HDF5_HL_LIBRARY}") +message( "-- HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake index 33d0fa108f..71de34db60 100644 --- a/isis/cmake/FindJama.cmake +++ b/isis/cmake/FindJama.cmake @@ -11,4 +11,4 @@ find_path(JAMA_INCLUDE_DIR get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY) -message("JAMA FOUND") +message( "-- JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake index fc39cc61e7..0437d99e23 100644 --- a/isis/cmake/FindKakadu.cmake +++ b/isis/cmake/FindKakadu.cmake @@ -21,3 +21,6 @@ find_library(KAKADU_V_LIBRARY ) get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) + +message( "-- KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") +message( "-- KAKADU LIB DIR: ${KAKADU_A_LIBRARY}") diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake index bb8cd81385..17c030e282 100644 --- a/isis/cmake/FindNN.cmake +++ b/isis/cmake/FindNN.cmake @@ -14,3 +14,6 @@ find_library(NN_LIBRARY ) get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) + +message( "-- NN INCLUDE DIR: ${NN_INCLUDE_DIR}") +message( "-- NN LIB: ${NN_LIBRARY}") diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake index ecfe007fe2..d2b11cd400 100644 --- a/isis/cmake/FindOpenCV.cmake +++ b/isis/cmake/FindOpenCV.cmake @@ -27,3 +27,18 @@ find_library(OPENCV_HIGHGUI_LIBRARY NAMES opencv_highgui) find_library(OPENCV_FLANN_LIBRARY NAMES opencv_flann) get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY) + +message( "-- OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") +message( "-- OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") +message( "-- OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") +message( "-- OPENCV SUPERES LIB: ${OPENCV_SUPERRES_LIBRARY}") +message( "-- OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") +message( "-- OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") +message( "-- OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") +message( "-- OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") +message( "-- OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") +message( "-- OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") +message( "-- OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") +message( "-- OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") +message( "-- OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") +message( "-- OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index ae74c625c2..62883035ff 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -20,3 +20,8 @@ find_library(PCL_OCTREE_LIBRARY NAMES pcl_octree) find_library(PCL_IO_LIBRARY NAMES pcl_io) get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) + +message( "-- PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") +message( "-- PCL COMMON LIB: ${pcl_common}") +message( "-- PCL OCTREE LIB: ${pcl_octree}") +message( "-- PCL IO LIB: ${pcl_io}") diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake index 7bc7b7ce5b..5374cb50e8 100644 --- a/isis/cmake/FindProtobuf.cmake +++ b/isis/cmake/FindProtobuf.cmake @@ -6,3 +6,6 @@ find_path(PROTOBUF_INCLUDE_DIR find_library(PROTOBUF_LIBRARY NAMES protobuf) get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) + +message( "-- PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") +message( "-- PROTOBUF LIB: ${PROTOBUF_LIBRARY}") diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 7dbfa4c3a5..396ea6fac6 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -15,3 +15,6 @@ find_library(QWT_LIBRARY ) get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) + +message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") +message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 9365e0812a..7462e6dc9a 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -15,3 +15,7 @@ find_library(SUPERLU_LIBRARY ) get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) + + +message( "-- SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") +message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake index d97db9a969..6b7149b687 100644 --- a/isis/cmake/FindTIFF.cmake +++ b/isis/cmake/FindTIFF.cmake @@ -2,7 +2,8 @@ find_path(TIFF_INCLUDE_DIR NAMES tiff.h PATH_SUFFIXES "tiff/tiff-${TIFF_FIND_VERSION}" ) -# message("TIFF_INCLUDE_DIR = ${TIFF_INCLUDE_DIR}") find_library(TIFF_LIBRARY NAMES tiff) -# message("TIFF_LIBRARY = ${TIFF_LIBRARY}") + +message( "-- TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") +message( "-- TIFF LIB: ${TIFF_LIBRARY}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake index 7b05477d69..aea3a60d36 100644 --- a/isis/cmake/FindTNT.cmake +++ b/isis/cmake/FindTNT.cmake @@ -10,3 +10,5 @@ find_path(TNT_INCLUDE_DIR ) get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) + +message("-- TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake index f67e5b8b49..a1714cb526 100644 --- a/isis/cmake/FindX11.cmake +++ b/isis/cmake/FindX11.cmake @@ -7,3 +7,5 @@ find_library(X11_LIBRARY NAMES X11 ) + +message( "-- X11 LIB: " ${X11_LIBRARY} ) diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake index cf639e4394..6e72e533aa 100644 --- a/isis/cmake/FindXercesC.cmake +++ b/isis/cmake/FindXercesC.cmake @@ -5,3 +5,6 @@ find_path(XERCESC_INCLUDE_DIR # message("XERCESC_INCLUDE_DIR = ${XERCESC_INCLUDE_DIR}") find_library(XercesC_LIBRARY NAMES xerces-c) + +message( "-- XERCES LIB: " ${XercesC_LIBRARY} ) +message( "-- XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) diff --git a/isis/cmake/matching.py b/isis/cmake/matching.py new file mode 100644 index 0000000000..4ec3bf52c9 --- /dev/null +++ b/isis/cmake/matching.py @@ -0,0 +1,316 @@ +# Deal with annoying numpy warning +import warnings +warnings.filterwarnings("ignore") + +from shapely import wkt +import glob +import os + +import argparse + +import autocnet +from autocnet import CandidateGraph +from autocnet.graph.edge import Edge +from autocnet.matcher import suppression_funcs + +from shapely.geometry import Point +from PIL import Image, ImageDraw + +from scipy.stats.mstats import zscore +from scipy.stats import gaussian_kde + +import pandas as pd + +import geopandas as gpd +from shapely.geometry import Polygon, mapping, box + +from osgeo import gdal +from osgeo import osr +import numpy as np +from plio.io.io_gdal import GeoDataset + +import subprocess +from subprocess import Popen, PIPE + +from pysis.isis import spiceinit, footprintinit, jigsaw, pointreg, cam2map +from pysis.exceptions import ProcessError + +from plio.date import marstime +from collections import OrderedDict + +import yaml + +from functools import partial +import utils + + +record = OrderedDict({ + 'file_id1' : '', + 'file_id2' : '', + 'file_path1' : '', + 'file_path2': '', + 'localtime1' : 0, + 'localtime2' : 0, + 'solarlon1' : 0, + 'solarlon2' : 0, + 'mars_year1' : 0, + 'mars_year2' : 0, + 'delta_time' : 0, + 'residual_min' : 0, + 'residual_max' : 0, + 'incident_angle1' : 0, + 'incident_angle2' : 0, + 'stddev1' : 0, + 'stddev2' : 0, + 'avg1' : 0, + 'avg2' : 0, + 'min1' : 0, + 'min2' : 0, + 'max1' : 0, + 'max2' : 0, + 'diff_avg' : 0, + 'diff_stddev' : 0, +}) + + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('id1', action='store', help='Image ID for image one') + parser.add_argument('id2', action='store', help='Image ID for image two') + parser.add_argument('-c', '--config', action='store', help='path to config file', default='./config.yml') + parser.add_argument('-v', '--verbose', action='store_true', help='Activates verbose output', default=False) + parser.add_argument('-g', '--graph', action='store_true', help='Display graphs of the data as is goes through.', default=False) + args = parser.parse_args().__dict__ + + with open(args['config'], 'r') as ymlfile: + cfg = yaml.load(ymlfile) + + if args['verbose']: + def verboseprint(*args): + # Print each argument separately so caller doesn't need to + # stuff everything to be printed into a single string + import pprint + pp = pprint.PrettyPrinter(indent=2) + for arg in args: + pp.pprint(arg), + print() + else: + verboseprint = lambda *a: None # do-nothing function + + verboseprint('ARGS:', args) + verboseprint('CONFIG:', cfg) + # patch in davinci_bin onto run_davinci to prevent contstantly having to pass it in + run_davinci = partial(utils.run_davinci, root_dir=config['inpath']) + + files = [os.path.abspath('{}.lev1.cub'.format(id1)), os.path.abspath('{}.lev1.cub'.format(id2))] + img1, img2 = files + cubelis = '{}_{}.lis'.format(id1, id2) + + record['id1'] = args['id1'] + record['id2'] = args['id2'] + record['img1_path'] = img1 + record['img2_path'] = img2 + + ############################################################# + + cg = CandidateGraph.from_filelist(files) + + # The range of DN values over the data is small, so the threshold for differentiating interesting features must be small. + cg.extract_features(extractor_parameters={'contrastThreshold':0.0000000001}) + cg.match() + + e = cg.edge[0][1] + e.symmetry_check() + e.ratio_check(clean_keys=['symmetry']) + + cg.compute_fundamental_matrices(clean_keys=['symmetry', 'ratio'], reproj_threshold=1, mle_reproj_threshold=0.2) + cg.suppress(clean_keys=['fundamental'], suppression_func=suppression_funcs.distance, k=20, min_radius=10) + + cnet = '{}_{}'.format(filid1, filid2) + cnet_file = '{}.net'.format(cnet) + cg.create_control_network(clean_keys=['fundamental', 'suppression']) + cg.to_isis(cnet) + + intersection = e.destination.footprint.intersection(e.source.footprint) + + pointreg_params_pass1 = { + 'from_' : cubelis, + 'cnet' : cnet_file, + 'onet' : cnet_file, + 'deffile': 'pointreg_P71x151_S131x231.def' + } + + pointreg_params_pass2 = { + 'from_' : cubelis, + 'cnet' : cnet_file, + 'onet' : cnet_file, + 'deffile': 'pointreg_P51x51_S65x65.def' + } + + try: + pointreg(**pointreg_params_pass1) + pointreg(**pointreg_params_pass2) + except ProcessError as e: + print('Pointreg Error') + print("STDOUT:", e.stdout.decode('utf-8')) + print("STDERR:", e.stderr.decode('utf-8')) + + bundle_parameters = { + 'from_' : cubelis, + 'cnet' : cnet_file, + 'onet' : cnet_file, + 'radius' : 'yes', + 'update' : 'yes', + 'errorpropagation' : 'no', + 'outlier_rejection' : 'no', + 'sigma0' : '1.0e-10', + 'maxits' : 10, + 'camsolve' : 'accelerations', + 'twist' : 'yes', + 'overexisting' : 'yes', + 'spsolve' : 'no', + 'camera_angles_sigma' : .25, + 'camera_angular_velocity_sigma' : .1, + 'camera_angular_acceleration_sigma' : .01, + 'point_radius_sigma' : 50 + } + + try: + jigsaw(**bundle_parameters) + except ProcessError as e: + print('Jigsaw Error') + print("STDOUT:", e.stdout.decode('utf-8')) + print("STDERR:", e.stderr.decode('utf-8')) + + df = pd.read_csv('residuals.csv', header=1) + + residuals = df.iloc[1:]['residual.1'].astype(float) + + residual_min = min(residuals) + residual_max = max(residuals) + + df['residual'].iloc[1:].astype(float).describe() + + img1fh = GeoDataset(img1) + img2fh = GeoDataset(img2) + + + # need to clean up time stuff + print("Image 1 =======") + label = img1fh.metadata + starttime1 = label['IsisCube']['Instrument']['StartTime'] + endtime1 = label['IsisCube']['Instrument']['StopTime'] + print(marstime.getMTfromTime(starttime1 + (endtime1-starttime1)/2)[0]) + print(label[4][1]['SolarLongitude']) + print('LOCAL TIME', marstime.getLTfromTime(starttime1,0)) + + print() + print("Image 2 =======") + label = img2fh.metadata + starttime2 = label['IsisCube']['Instrument']['StartTime'] + endtime2 = label['IsisCube']['Instrument']['StopTime'] + + print('start time: ', starttime2) + earth_time2 = starttime2 + (endtime2-starttime2)/2 + print('EARTH_TIME: ', earth_time2) + print(label[4][1]['SolarLongitude']) + print('LOCAL TIME', marstime.getLTfromTime(starttime2,0)) + + + # Run spiceinit and footprintint - latter helps constrain the search + for f in files: + try: + footprintinit(from_=f) + except Exception as e: + print('FP Error') + print("STDOUT:", e.stdout.decode('utf-8')) + print("STDERR:", e.stderr.decode('utf-8')) + + img1fh = GeoDataset(img1) + img2fh = GeoDataset(img2) + + shape1 = wkt.loads(img1fh.footprint.GetGeometryRef(0).ExportToWkt()) + shape2 = wkt.loads(img2fh.footprint.GetGeometryRef(0).ExportToWkt()) + minlong, minlat, maxlong, maxlat = shape1.intersection(shape2).bounds + + img1proj = '{}.proj.cub'.format(img1.split('.')[0]) + img2proj = '{}.proj.cub'.format(img2.split('.')[0]) + + print(img1proj) + print(img2proj) + + cam2map_params1 = { + 'from_' : img1, + 'map' : 'equidistant.map', + 'to' : img1proj + } + + cam2map_params2 = { + 'from_' : img2, + 'map' : img1proj, + 'to' : img2proj, + 'matchmap' : 'yes' + } + + try: + print('Running cam2map on {}'.format(img1)) + cam2map(**cam2map_params1) + print('Running cam2map on {}'.format(img2)) + cam2map(**cam2map_params2) + except ProcessError as e: + print('cam2map Error') + print("STDOUT:", e.stdout.decode('utf-8')) + print("STDERR:", e.stderr.decode('utf-8')) + + args = ['deplaid=1','wnremove=1', 'autoradcorr=1', 'destreak=1'] + try: + out1, err1 = run_davinci('thm_post_process.dv', img1proj, img1proj, args=args) + out2, err2 = run_davinci('thm_post_process.dv', img2proj, img2proj, args=args) + except Exception as e: + print(e) + + try: + out1, err1 = run_davinci('thm_tb.dv', img1proj, img1proj) + out2, err2 = run_davinci('thm_tb.dv', img2proj, img2proj) + except Exception as e: + print(e) + + img1fh = GeoDataset(img1proj) + img2fh = GeoDataset(img2proj) + + img1data = img1fh.read_array(9) + img2data = img2fh.read_array(9) + + img1data = np.ma.MaskedArray(img1data, img1data == np.min(img1data)) + img2data = np.ma.MaskedArray(img2data, img2data == np.min(img2data)) + + print(np.min(img1data), np.min(img2data)) + print(img2data.shape) + print(img1data.shape) + + diff = np.ma.MaskedArray(img1data.data-img2data.data, img1data.mask | img2data.mask) + + hist(diff[~diff.mask], bins=200) + diffavg = np.mean(diff) + diffmin = np.min(diff) + diffmax = np.max(diff) + diffstddev = np.std(diff) + diffmin, diffmax, diffavg, diffstddev + + img1vals = img1inter[~img1inter.mask] + img2vals = img2inter[~img2inter.mask] + + img1min = np.min(img1vals) + img1max = np.max(img1vals) + img1min, img1max + + img2min = np.min(img2vals) + img2max = np.max(img2vals) + img2min, img2max + + img1avg = np.mean(img1inter) + img2avg = np.mean(img2inter) + img1avg, img2avg + + # write to csv -- GitLab From 4f8ba042070f0034bc8c6422f8a4fc91c4689715 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 17:27:43 -0700 Subject: [PATCH 085/620] removed unwanted file --- isis/cmake/matching.py | 316 ----------------------------------------- 1 file changed, 316 deletions(-) delete mode 100644 isis/cmake/matching.py diff --git a/isis/cmake/matching.py b/isis/cmake/matching.py deleted file mode 100644 index 4ec3bf52c9..0000000000 --- a/isis/cmake/matching.py +++ /dev/null @@ -1,316 +0,0 @@ -# Deal with annoying numpy warning -import warnings -warnings.filterwarnings("ignore") - -from shapely import wkt -import glob -import os - -import argparse - -import autocnet -from autocnet import CandidateGraph -from autocnet.graph.edge import Edge -from autocnet.matcher import suppression_funcs - -from shapely.geometry import Point -from PIL import Image, ImageDraw - -from scipy.stats.mstats import zscore -from scipy.stats import gaussian_kde - -import pandas as pd - -import geopandas as gpd -from shapely.geometry import Polygon, mapping, box - -from osgeo import gdal -from osgeo import osr -import numpy as np -from plio.io.io_gdal import GeoDataset - -import subprocess -from subprocess import Popen, PIPE - -from pysis.isis import spiceinit, footprintinit, jigsaw, pointreg, cam2map -from pysis.exceptions import ProcessError - -from plio.date import marstime -from collections import OrderedDict - -import yaml - -from functools import partial -import utils - - -record = OrderedDict({ - 'file_id1' : '', - 'file_id2' : '', - 'file_path1' : '', - 'file_path2': '', - 'localtime1' : 0, - 'localtime2' : 0, - 'solarlon1' : 0, - 'solarlon2' : 0, - 'mars_year1' : 0, - 'mars_year2' : 0, - 'delta_time' : 0, - 'residual_min' : 0, - 'residual_max' : 0, - 'incident_angle1' : 0, - 'incident_angle2' : 0, - 'stddev1' : 0, - 'stddev2' : 0, - 'avg1' : 0, - 'avg2' : 0, - 'min1' : 0, - 'min2' : 0, - 'max1' : 0, - 'max2' : 0, - 'diff_avg' : 0, - 'diff_stddev' : 0, -}) - - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('id1', action='store', help='Image ID for image one') - parser.add_argument('id2', action='store', help='Image ID for image two') - parser.add_argument('-c', '--config', action='store', help='path to config file', default='./config.yml') - parser.add_argument('-v', '--verbose', action='store_true', help='Activates verbose output', default=False) - parser.add_argument('-g', '--graph', action='store_true', help='Display graphs of the data as is goes through.', default=False) - args = parser.parse_args().__dict__ - - with open(args['config'], 'r') as ymlfile: - cfg = yaml.load(ymlfile) - - if args['verbose']: - def verboseprint(*args): - # Print each argument separately so caller doesn't need to - # stuff everything to be printed into a single string - import pprint - pp = pprint.PrettyPrinter(indent=2) - for arg in args: - pp.pprint(arg), - print() - else: - verboseprint = lambda *a: None # do-nothing function - - verboseprint('ARGS:', args) - verboseprint('CONFIG:', cfg) - # patch in davinci_bin onto run_davinci to prevent contstantly having to pass it in - run_davinci = partial(utils.run_davinci, root_dir=config['inpath']) - - files = [os.path.abspath('{}.lev1.cub'.format(id1)), os.path.abspath('{}.lev1.cub'.format(id2))] - img1, img2 = files - cubelis = '{}_{}.lis'.format(id1, id2) - - record['id1'] = args['id1'] - record['id2'] = args['id2'] - record['img1_path'] = img1 - record['img2_path'] = img2 - - ############################################################# - - cg = CandidateGraph.from_filelist(files) - - # The range of DN values over the data is small, so the threshold for differentiating interesting features must be small. - cg.extract_features(extractor_parameters={'contrastThreshold':0.0000000001}) - cg.match() - - e = cg.edge[0][1] - e.symmetry_check() - e.ratio_check(clean_keys=['symmetry']) - - cg.compute_fundamental_matrices(clean_keys=['symmetry', 'ratio'], reproj_threshold=1, mle_reproj_threshold=0.2) - cg.suppress(clean_keys=['fundamental'], suppression_func=suppression_funcs.distance, k=20, min_radius=10) - - cnet = '{}_{}'.format(filid1, filid2) - cnet_file = '{}.net'.format(cnet) - cg.create_control_network(clean_keys=['fundamental', 'suppression']) - cg.to_isis(cnet) - - intersection = e.destination.footprint.intersection(e.source.footprint) - - pointreg_params_pass1 = { - 'from_' : cubelis, - 'cnet' : cnet_file, - 'onet' : cnet_file, - 'deffile': 'pointreg_P71x151_S131x231.def' - } - - pointreg_params_pass2 = { - 'from_' : cubelis, - 'cnet' : cnet_file, - 'onet' : cnet_file, - 'deffile': 'pointreg_P51x51_S65x65.def' - } - - try: - pointreg(**pointreg_params_pass1) - pointreg(**pointreg_params_pass2) - except ProcessError as e: - print('Pointreg Error') - print("STDOUT:", e.stdout.decode('utf-8')) - print("STDERR:", e.stderr.decode('utf-8')) - - bundle_parameters = { - 'from_' : cubelis, - 'cnet' : cnet_file, - 'onet' : cnet_file, - 'radius' : 'yes', - 'update' : 'yes', - 'errorpropagation' : 'no', - 'outlier_rejection' : 'no', - 'sigma0' : '1.0e-10', - 'maxits' : 10, - 'camsolve' : 'accelerations', - 'twist' : 'yes', - 'overexisting' : 'yes', - 'spsolve' : 'no', - 'camera_angles_sigma' : .25, - 'camera_angular_velocity_sigma' : .1, - 'camera_angular_acceleration_sigma' : .01, - 'point_radius_sigma' : 50 - } - - try: - jigsaw(**bundle_parameters) - except ProcessError as e: - print('Jigsaw Error') - print("STDOUT:", e.stdout.decode('utf-8')) - print("STDERR:", e.stderr.decode('utf-8')) - - df = pd.read_csv('residuals.csv', header=1) - - residuals = df.iloc[1:]['residual.1'].astype(float) - - residual_min = min(residuals) - residual_max = max(residuals) - - df['residual'].iloc[1:].astype(float).describe() - - img1fh = GeoDataset(img1) - img2fh = GeoDataset(img2) - - - # need to clean up time stuff - print("Image 1 =======") - label = img1fh.metadata - starttime1 = label['IsisCube']['Instrument']['StartTime'] - endtime1 = label['IsisCube']['Instrument']['StopTime'] - print(marstime.getMTfromTime(starttime1 + (endtime1-starttime1)/2)[0]) - print(label[4][1]['SolarLongitude']) - print('LOCAL TIME', marstime.getLTfromTime(starttime1,0)) - - print() - print("Image 2 =======") - label = img2fh.metadata - starttime2 = label['IsisCube']['Instrument']['StartTime'] - endtime2 = label['IsisCube']['Instrument']['StopTime'] - - print('start time: ', starttime2) - earth_time2 = starttime2 + (endtime2-starttime2)/2 - print('EARTH_TIME: ', earth_time2) - print(label[4][1]['SolarLongitude']) - print('LOCAL TIME', marstime.getLTfromTime(starttime2,0)) - - - # Run spiceinit and footprintint - latter helps constrain the search - for f in files: - try: - footprintinit(from_=f) - except Exception as e: - print('FP Error') - print("STDOUT:", e.stdout.decode('utf-8')) - print("STDERR:", e.stderr.decode('utf-8')) - - img1fh = GeoDataset(img1) - img2fh = GeoDataset(img2) - - shape1 = wkt.loads(img1fh.footprint.GetGeometryRef(0).ExportToWkt()) - shape2 = wkt.loads(img2fh.footprint.GetGeometryRef(0).ExportToWkt()) - minlong, minlat, maxlong, maxlat = shape1.intersection(shape2).bounds - - img1proj = '{}.proj.cub'.format(img1.split('.')[0]) - img2proj = '{}.proj.cub'.format(img2.split('.')[0]) - - print(img1proj) - print(img2proj) - - cam2map_params1 = { - 'from_' : img1, - 'map' : 'equidistant.map', - 'to' : img1proj - } - - cam2map_params2 = { - 'from_' : img2, - 'map' : img1proj, - 'to' : img2proj, - 'matchmap' : 'yes' - } - - try: - print('Running cam2map on {}'.format(img1)) - cam2map(**cam2map_params1) - print('Running cam2map on {}'.format(img2)) - cam2map(**cam2map_params2) - except ProcessError as e: - print('cam2map Error') - print("STDOUT:", e.stdout.decode('utf-8')) - print("STDERR:", e.stderr.decode('utf-8')) - - args = ['deplaid=1','wnremove=1', 'autoradcorr=1', 'destreak=1'] - try: - out1, err1 = run_davinci('thm_post_process.dv', img1proj, img1proj, args=args) - out2, err2 = run_davinci('thm_post_process.dv', img2proj, img2proj, args=args) - except Exception as e: - print(e) - - try: - out1, err1 = run_davinci('thm_tb.dv', img1proj, img1proj) - out2, err2 = run_davinci('thm_tb.dv', img2proj, img2proj) - except Exception as e: - print(e) - - img1fh = GeoDataset(img1proj) - img2fh = GeoDataset(img2proj) - - img1data = img1fh.read_array(9) - img2data = img2fh.read_array(9) - - img1data = np.ma.MaskedArray(img1data, img1data == np.min(img1data)) - img2data = np.ma.MaskedArray(img2data, img2data == np.min(img2data)) - - print(np.min(img1data), np.min(img2data)) - print(img2data.shape) - print(img1data.shape) - - diff = np.ma.MaskedArray(img1data.data-img2data.data, img1data.mask | img2data.mask) - - hist(diff[~diff.mask], bins=200) - diffavg = np.mean(diff) - diffmin = np.min(diff) - diffmax = np.max(diff) - diffstddev = np.std(diff) - diffmin, diffmax, diffavg, diffstddev - - img1vals = img1inter[~img1inter.mask] - img2vals = img2inter[~img2inter.mask] - - img1min = np.min(img1vals) - img1max = np.max(img1vals) - img1min, img1max - - img2min = np.min(img2vals) - img2max = np.max(img2vals) - img2min, img2max - - img1avg = np.mean(img1inter) - img2avg = np.mean(img2inter) - img1avg, img2avg - - # write to csv -- GitLab From 0a7031bf7a6b16de613eff345a1493cbba587460 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 17:39:25 -0700 Subject: [PATCH 086/620] typo --- isis/cmake/FindBoost.cmake | 31 +++++++++++++++++++++++++++++++ isis/cmake/FindQwt.cmake | 4 ++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake index dafe981460..f374608226 100644 --- a/isis/cmake/FindBoost.cmake +++ b/isis/cmake/FindBoost.cmake @@ -14,81 +14,107 @@ get_filename_component(BOOST_ROOT_INCLUDE_DIR "${BOOST_INCLUDE_DIR}" DIRECTORY) find_library(BOOST_ATOMIC_MT_LIBRARY NAMES boost_atomic-mt boost_atomic ) + find_library(BOOST_LOG_MT_LIBRARY NAMES boost_log-mt boost_log ) + find_library(BOOST_REGEX_MT_LIBRARY NAMES boost_regex-mt boost_regex ) + find_library(BOOST_LOG_SETUP_MT_LIBRARY NAMES boost_log_setup-mt boost_log_setup ) + find_library(BOOST_SERIALIZATION_MT_LIBRARY NAMES boost_serialization-mt boost_serialization ) + find_library(BOOST_CHRONO_MT_LIBRARY NAMES boost_chrono-mt boost_chrono ) + find_library(BOOST_MATH_C99_MT_LIBRARY NAMES boost_math_c99-mt boost_math_c99 ) + find_library(BOOST_SIGNALS_MT_LIBRARY NAMES boost_signals-mt boost_signals ) + find_library(BOOST_CONTAINER_MT_LIBRARY NAMES boost_container-mt boost_container ) + find_library(BOOST_MATH_C99F_MT_LIBRARY NAMES boost_math_c99f-mt boost_math_c99f ) + find_library(BOOST_CONTEXT_MT_LIBRARY NAMES boost_context-mt boost_context ) + find_library(BOOST_MATH_C99L_MT_LIBRARY NAMES boost_math_c99l-mt boost_math_c99l ) + find_library(BOOST_SYSTEM_MT_LIBRARY NAMES boost_system-mt boost_system ) + find_library(BOOST_COROUTINE_MT_LIBRARY NAMES boost_coroutine-mt boost_coroutine ) + find_library(BOOST_MATH_TR1_MT_LIBRARY NAMES boost_math_tr1-mt boost_math_tr1 ) + find_library(BOOST_MATH_TR1F_MT_LIBRARY NAMES boost_math_tr1f-mt boost_math_tr1f ) + find_library(BOOST_MATH_TR1L_MT_LIBRARY NAMES boost_math_tr1l-mt boost_math_tr1l ) + find_library(BOOST_TEST_EXEC_MONITOR_MT_LIBRARY NAMES boost_test_exec_monitor-mt boost_test_exec_monitor ) + find_library(BOOST_DATE_TIME_MT_LIBRARY NAMES boost_date_time-mt boost_date_time ) + find_library(BOOST_THREAD_MT_LIBRARY NAMES boost_thread-mt boost_thread ) + find_library(BOOST_EXCEPTION_MT_LIBRARY NAMES boost_exception-mt boost_exception ) + find_library(BOOST_TIMER_MT_LIBRARY NAMES boost_timer-mt boost_timer ) + find_library(BOOST_FILESYSTEM_MT_LIBRARY NAMES boost_filesystem-mt boost_filesystem ) + find_library(BOOST_PRG_EXEC_MONITOR_MT_LIBRARY NAMES boost_prg_exec_monitor-mt boost_prg_exec_monitor ) + find_library(BOOST_PROGRAM_OPTIONS_MT_LIBRARY NAMES boost_program_options-mt boost_program_options ) + find_library(BOOST_UNIT_TEST_FRAMEWORK_MT_LIBRARY NAMES boost_unit_test_framework-mt boost_unit_test_framework ) + find_library(BOOST_IOSTREAMS_MT_LIBRARY NAMES boost_iostreams-mt boost_iostreams ) @@ -98,9 +124,11 @@ find_library(BOOST_IOSTREAMS_MT_LIBRARY #find_library(BOOST_PYTHON_MT_LIBRARY # NAMES boost_python-mt boost_python #) + find_library(BOOST_WAVE_MT_LIBRARY NAMES boost_wave-mt boost_wave ) + #tjw: not being linked against by ISIS presently #find_library(BOOST_LOCAL_MT_LIBRARY # NAMES boost_locale-mt boost_locale @@ -108,12 +136,15 @@ find_library(BOOST_WAVE_MT_LIBRARY find_library(BOOST_RANDOM_MT_LIBRARY NAMES boost_random-mt boost_random ) + find_library(BOOST_WSERIALIZATION_MT_LIBRARY NAMES boost_wserialization-mt boost_wserialization ) + find_library(PYTHON_LIBRARY NAMES python2 python2.7 python3 ) + find_library(C_LIBRARY NAMES c ) diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 396ea6fac6..8b52467945 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -16,5 +16,5 @@ find_library(QWT_LIBRARY get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) -message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") -message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") +message( "-- QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") +message( "-- QWT LIB: ${QWT_LIBRARY}") -- GitLab From 2ab90d3ead62daa1dedf2357f0256ec26ed8ec23 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 17:42:03 -0700 Subject: [PATCH 087/620] more typos --- isis/cmake/FindOpenCV.cmake | 2 +- isis/cmake/FindPCL.cmake | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake index d2b11cd400..0984686d94 100644 --- a/isis/cmake/FindOpenCV.cmake +++ b/isis/cmake/FindOpenCV.cmake @@ -31,7 +31,7 @@ get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY message( "-- OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") message( "-- OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") message( "-- OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") -message( "-- OPENCV SUPERES LIB: ${OPENCV_SUPERRES_LIBRARY}") +message( "-- OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") message( "-- OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") message( "-- OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") message( "-- OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index 62883035ff..625a6126d7 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -22,6 +22,6 @@ find_library(PCL_IO_LIBRARY NAMES pcl_io) get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) message( "-- PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") -message( "-- PCL COMMON LIB: ${pcl_common}") -message( "-- PCL OCTREE LIB: ${pcl_octree}") -message( "-- PCL IO LIB: ${pcl_io}") +message( "-- PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") +message( "-- PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") +message( "-- PCL IO LIB: ${PCL_IO_LIBRARY}") -- GitLab From ac2773b49bd14300c081b18c75282fb202961c04 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 18:43:39 -0700 Subject: [PATCH 088/620] typos4dayz --- isis/cmake/FindAllDependencies.cmake | 6 +---- isis/cmake/FindKakadu.cmake | 33 ++++++++++++++++------------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 29810c2a93..d0b21c05dd 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -183,6 +183,7 @@ find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 direct find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" find_package(X11 6 REQUIRED) find_package(OpenGL REQUIRED) +find_package(Kakadu) # v007 might have different versions installed for our mac and linux systems. # Im this case, we specify the version numbers being searched for in the non-traditional installs. @@ -192,11 +193,6 @@ else(APPLE) find_package(Geos 3.5.1 REQUIRED) endif(APPLE) -# Only include Kakadu if it is available -if(JP2KFLAG) - find_package(Kakadu) -endif() - get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES foreach (_variableName ${_variableNames}) #message("VAR=${_variableName}") diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake index 0437d99e23..a6edd15542 100644 --- a/isis/cmake/FindKakadu.cmake +++ b/isis/cmake/FindKakadu.cmake @@ -6,21 +6,26 @@ # KAKADU_A_LIBRARY # KAKADU_V_LIBRARY -find_path(KAKADU_INCLUDE_DIR - NAME kdu_kernels.h - PATH_SUFFIXES - kakadu/v7_9_1-01762L/ -) +if(JP2KFLAG) + find_path(KAKADU_INCLUDE_DIR + NAME kdu_kernels.h + PATH_SUFFIXES + kakadu/v7_9_1-01762L/ + ) -find_library(KAKADU_A_LIBRARY - NAMES kdu_a79R -) + find_library(KAKADU_A_LIBRARY + NAMES kdu_a79R + ) -find_library(KAKADU_V_LIBRARY - NAMES kdu_v79R -) + find_library(KAKADU_V_LIBRARY + NAMES kdu_v79R + ) -get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) + get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) -message( "-- KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") -message( "-- KAKADU LIB DIR: ${KAKADU_A_LIBRARY}") + message( "-- KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") + message( "-- KAKADU A LIB: ${KAKADU_A_LIBRARY}") + message( "-- KAKADU V LIB: ${KAKADU_V_LIBRARY}") +else() + message("-- KAKADU DISABLED") +endif() -- GitLab From 4fd6a96420f19e2bcf1c9ecfd1c8026404fa8db9 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 18:45:33 -0700 Subject: [PATCH 089/620] things --- isis/CMakeLists.txt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 1debc7d159..720ba04e4a 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -100,12 +100,9 @@ else() message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") endif() -#if(EXISTS ${CMAKE_INSTALL_PREFIX}) -# set(ENV{CMAKE_INSTALL_PREFIX} "${CMAKE_INSTALL_PREFIX}") -# message("Using INSTALL PREFIX = $ENV{CMAKE_INSTALL_PREFIX}") -#else() -# message(WARNING "Isis3TestData directory ${CMAKE_INSTALL_PREFIX} not found, application and module tests will fail.") -#endif() +if(develop) + +endif() if(${testOutputDir} STREQUAL "OFF") message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") -- GitLab From 8edbe78e86b36adc2fc80d42f57a0740100560c4 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 6 Mar 2018 19:02:08 -0700 Subject: [PATCH 090/620] Update FindGeoTIFF.cmake --- isis/cmake/FindGeoTIFF.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index 293a4ae9c0..fce2108576 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -17,4 +17,4 @@ find_library(GEOTIFF_LIBRARY get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) message( "-- GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") -message( "-- GEOTIFF LIB: ${GSL_LIBRARY}") +message( "-- GEOTIFF LIB: ${GEOTIFF_LIBRARY}") -- GitLab From 3fd1e425839a0db1a5b772314f2a487022b0ef09 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 00:05:35 -0700 Subject: [PATCH 091/620] Update JP2Encoder.cpp --- isis/src/base/objs/JP2Encoder/JP2Encoder.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp b/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp index 993850ea87..5ad9dea20d 100644 --- a/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp +++ b/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp @@ -31,8 +31,11 @@ #include "JP2Error.h" using namespace std; + +#if ENABLEJP2K using namespace kdu_core; using namespace kdu_supp; +#endif namespace Isis { -- GitLab From daf7fb90da986131e6392dd0ba5cdd83d88bcb6c Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 00:05:56 -0700 Subject: [PATCH 092/620] Update JP2Decoder.cpp --- isis/src/base/objs/JP2Decoder/JP2Decoder.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp b/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp index cd87b4ccdf..b03ba95bff 100644 --- a/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp +++ b/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp @@ -31,8 +31,12 @@ #include "JP2Error.h" using namespace std; + +#if ENABLEJP2K using namespace kdu_core; using namespace kdu_supp; +#endif + namespace Isis { /** -- GitLab From af9201e1a2d98d0d3773b659cf2bfdf1772d5200 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 10:17:45 -0700 Subject: [PATCH 093/620] First draft of changing ISIS to work with conda --- isis/cmake/FindAllDependencies.cmake | 8 +- isis/cmake/FindGeoTIFF.cmake | 2 +- isis/cmake/Findnanoflann.cmake | 15 + isis/environment.yml | 104 +++++ isis/src/base/apps/equalizer/equalizer.cpp | 5 +- isis/src/base/objs/Affine/Affine.cpp | 5 +- .../base/objs/Equalization/Equalization.cpp | 26 +- .../ForstnerOperator/ForstnerOperator.cpp | 1 - isis/src/base/objs/JP2Decoder/JP2Decoder.cpp | 4 + isis/src/base/objs/JP2Encoder/JP2Encoder.cpp | 3 + isis/src/base/objs/JP2Encoder/JP2Encoder.h | 1 + .../base/objs/LeastSquares/LeastSquares.cpp | 367 +----------------- .../src/base/objs/LeastSquares/LeastSquares.h | 31 -- .../OverlapNormalization.cpp | 15 - .../base/objs/PolygonSeeder/PolygonSeeder.h | 25 +- .../control/apps/cnet2dem/PointCloudTree.h | 2 +- isis/src/control/apps/cnet2dem/cnet2dem.cpp | 2 +- .../apps/cnetcombinept/PointCloudTree.h | 2 +- .../apps/cnetcombinept/cnetcombinept.cpp | 47 ++- 19 files changed, 195 insertions(+), 470 deletions(-) create mode 100644 isis/cmake/Findnanoflann.cmake create mode 100644 isis/environment.yml diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index d0b21c05dd..c19a158a93 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -79,19 +79,19 @@ if(APPLE) find_package(Qt5 COMPONENTS Core Concurrent - DBus + # DBus Gui Multimedia MultimediaWidgets Network OpenGL # Needed to install mesa-common-dev for this! - Positioning + # Positioning PrintSupport Qml Quick Script ScriptTools - Sensors + # Sensors Sql Svg Test @@ -183,6 +183,8 @@ find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 direct find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" find_package(X11 6 REQUIRED) find_package(OpenGL REQUIRED) +find_package(nanoflann REQUIRED) +find_package(png REQUIRED) find_package(Kakadu) # v007 might have different versions installed for our mac and linux systems. diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index 293a4ae9c0..fce2108576 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -17,4 +17,4 @@ find_library(GEOTIFF_LIBRARY get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) message( "-- GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") -message( "-- GEOTIFF LIB: ${GSL_LIBRARY}") +message( "-- GEOTIFF LIB: ${GEOTIFF_LIBRARY}") diff --git a/isis/cmake/Findnanoflann.cmake b/isis/cmake/Findnanoflann.cmake new file mode 100644 index 0000000000..3562e074d8 --- /dev/null +++ b/isis/cmake/Findnanoflann.cmake @@ -0,0 +1,15 @@ +# CMake module for find_package(GSL) +# Finds include directory and all applicable libraries +# +# Sets the following: +# GSL_INCLUDE_DIR +# GSL_LIBLIST + +find_path(NANOFLANN_INCLUDE_DIR + NAMES nanoflann.hpp + PATH_SUFFIXES nanoflann/ +) + +get_filename_component(NANOFLANN_ROOT_INCLUDE_DIR "${NANOFLANN_INCLUDE_DIR}" DIRECTORY) + +message( "-- NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") diff --git a/isis/environment.yml b/isis/environment.yml new file mode 100644 index 0000000000..76b9a6e4b2 --- /dev/null +++ b/isis/environment.yml @@ -0,0 +1,104 @@ +name: isisdeps +channels: +- anaconda +- krodriguez +- inria-pro-sed +- conda-forge +- usgs-astrogeology +- defaults +dependencies: +- libgcc=4.8.5=1 +- blas=1.1=openblas +- boost=1.65.1=py27_0 +- boost-cpp=1.65.1=1 +- bzip2=1.0.6=1 +- ca-certificates=2018.1.18=0 +- cairo=1.14.6=4 +- certifi=2018.1.18=py27_0 +- cmake=3.9.1=0 +- cspice=66=0 +- curl=7.55.1=0 +- dbus=1.10.22=0 +- doxygen=1.8.14=0 +- eigen=3.3.3=0 +- expat=2.2.5=0 +- ffmpeg=3.2.4=3 +- flann=1.8.4=0 +- fontconfig=2.12.1=4 +- freetype=2.7=1 +- geos=3.5.1=1 +- geotiff=1.4.2=1 +- gettext=0.19.8.1=0 +- giflib=5.1.4=0 +- glib=2.51.4=0 +- gsl=2.2.1=blas_openblas_3 +- harfbuzz=1.3.4=2 +- hdf5=1.8.18=3 +- icu=58.2=0 +- jasper=1.900.1=4 +- jpeg=9b=2 +- krb5=1.14.2=0 +- lapack=3.6.1=1 +- libffi=3.2.1=3 +- libgfortran=3.0.0=0 +- libiconv=1.15=0 +- libpng=1.6.28=2 +- libssh2=1.8.0=2 +- libtiff=4.0.9=0 +- libuv=1.11.0=0 +- libwebp=0.5.2=7 +- libxcb=1.12=1 +- libxml2=2.9.7=0 +- m4=1.4.17=1 +- metis=5.1.0=3 +- nanoflann=1.2.2=0 +- ncurses=5.9=10 +- ninja=1.7.2=0 +- nn=1.86.0=2 +- numpy=1.13.3=py27_blas_openblas_200 +- openblas=0.2.19=2 +- opencv=3.3.0=py27_blas_openblas_200 +- openssl=1.0.2n=0 +- pcre=8.39=0 +- pip=9.0.1=py27_1 +- pixman=0.34.0=1 +- proj4=4.9.3=5 +- protobuf=3.2.0=py27_0 +- python=2.7.14=4 +- qt=5.6.2=h9e3eb04_4 +- qwt=6.1.3=1 +- readline=7.0=0 +- rhash=1.3.4=0 +- setuptools=38.5.1=py27_0 +- six=1.11.0=py27_1 +- sqlite=3.20.1=2 +- suitesparse=4.5.4=blas_openblas_200 +- superlu=5.2.1=blas_openblas_201 +- tk=8.6.7=0 +- wheel=0.30.0=py27_2 +- x264=20131217=3 +- xorg-kbproto=1.0.7=1 +- xorg-libx11=1.6.4=6 +- xorg-libxau=1.0.8=3 +- xorg-libxdmcp=1.1.2=3 +- xorg-xproto=7.0.31=6 +- xz=5.2.3=0 +- zlib=1.2.11=0 +- openmpi=1.8.6=4 +- parmetis=4.0.3p2=1 +- jama=125=0 +- tnt=126=0 +- bullet=2.86.1=he2aa7b0_0 +- ds9=7.5=h35e3669_0 +- embree=2.16.0=h6834224_0 +- gmm=5.0=h6aef312_0 +- naif=n0066=h90cdba2_0 +- patchelf=0.9=h879b6ae_0 +- pcl=1.8.1=h7a71350_0 +- qhull=7.2.0=h396fa31_0 +- tbb=4.4=hf7780a4_0 +- vtk=7.1.1=py27h56fd973_0 +- xalan-c=1.11=h1922a5c_0 +- xerces-c=3.1.4=h10f7eb2_0 +prefix: /Users/krodriguez-pr/anaconda3/envs/isisdeps + diff --git a/isis/src/base/apps/equalizer/equalizer.cpp b/isis/src/base/apps/equalizer/equalizer.cpp index ab5e714d55..6bcdbb34a7 100644 --- a/isis/src/base/apps/equalizer/equalizer.cpp +++ b/isis/src/base/apps/equalizer/equalizer.cpp @@ -70,9 +70,6 @@ void IsisMain() { if (solveMethod == "SVD") { methodType = LeastSquares::SVD; } - else if (solveMethod == "SPARSE") { - methodType = LeastSquares::SPARSE; - } equalizer.calculateStatistics(sampPercent, mincnt, wtopt, methodType); } @@ -111,4 +108,4 @@ void IsisMain() { equalizer.applyCorrection(ui.WasEntered("TOLIST") ? ui.GetFileName("TOLIST") : ""); } -} \ No newline at end of file +} diff --git a/isis/src/base/objs/Affine/Affine.cpp b/isis/src/base/objs/Affine/Affine.cpp index 92a56c8b96..117d4dc26f 100644 --- a/isis/src/base/objs/Affine/Affine.cpp +++ b/isis/src/base/objs/Affine/Affine.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -227,7 +228,7 @@ namespace Isis { * are returned in a 3-dimensional vector * * @param var The coefficient vector index (1 or 2) - * + * * @return vector Vector of coefficients */ vector Affine::Coefficients(int var) { @@ -244,7 +245,7 @@ namespace Isis { * The coefficients are returned in a 3-dimensional vector * * @param var The inverse coefficient vector index - * + * * @return vector Vector of inverse coefficients */ vector Affine::InverseCoefficients(int var) { diff --git a/isis/src/base/objs/Equalization/Equalization.cpp b/isis/src/base/objs/Equalization/Equalization.cpp index 3f7b98501c..8d1f7f9c9e 100644 --- a/isis/src/base/objs/Equalization/Equalization.cpp +++ b/isis/src/base/objs/Equalization/Equalization.cpp @@ -105,7 +105,7 @@ namespace Isis { /** - * @brief Calculates the image and overlap statistics, and then determines corrective factors if + * @brief Calculates the image and overlap statistics, and then determines corrective factors if * possible * * This method calculates image statistics on a band-by-band basis and calculates overlap @@ -155,7 +155,7 @@ namespace Isis { if (!m_badFiles.isEmpty()) { // Make sure we set the results for the already calculated overlap statistics setResults(); - + QString msg; // Let user know where to find list of non-overlapping files so they can make corrections. msg = "There are input images that do not overlap with enough valid pixels. "; @@ -199,7 +199,7 @@ namespace Isis { /** * @brief Calculates the image statistics on a band-by-band basis * - * This method calculates statistics by band for the input images. Each set of + * This method calculates statistics by band for the input images. Each set of * band statistics is used to initialize the OverlapNormalizations that will * be used to determine gains and offsets for equalization. */ @@ -239,7 +239,7 @@ namespace Isis { /** * @brief Calculates the overlap statistics for each pair of input images - * + * * This method calculates any overlap statistics that have not been previously * calculated for the input images. */ @@ -252,7 +252,7 @@ namespace Isis { // Find overlapping areas and add them to the set of known overlaps for // each band shared amongst cubes for (int i = 0; i < m_imageList.size(); i++) { - Cube cube1; + Cube cube1; cube1.open(m_imageList[i].toString()); for (int j = (i + 1); j < m_imageList.size(); j++) { @@ -401,8 +401,8 @@ namespace Isis { /** * @brief Imports statistics for applying correction * - * This method obtains corrective factors from an input statistics pvl file so that - * input images can be equalized. These corrective factors are obtained from Normalization + * This method obtains corrective factors from an input statistics pvl file so that + * input images can be equalized. These corrective factors are obtained from Normalization * groups within the EqualizationInformation object in the input pvl. * * @see Equalization::applyCorrection() @@ -699,7 +699,7 @@ namespace Isis { for (unsigned int adj = 0; adj < m_adjustments.size(); adj++) { delete m_adjustments[adj]; } - m_adjustments.clear(); + m_adjustments.clear(); } @@ -778,7 +778,7 @@ namespace Isis { const PvlGroup &eqGen = eqInfo.findGroup("General"); m_samplingPercent = eqGen["SamplingPercent"]; m_mincnt = eqGen["MinCount"]; - m_wtopt = (eqGen["Weighted"][0] == "true") ? true : false; + m_wtopt = (eqGen["Weighted"][0] == "true") ? true : false; m_sType = static_cast((int)eqGen["SolutionType"]); m_lsqMethod = static_cast(eqGen["SolveMethod"][0].toInt()); @@ -799,10 +799,10 @@ namespace Isis { m_alreadyCalculated[x] = true; m_alreadyCalculated[y] = true; - // Determine which calculated overlaps have valid overlaps + // Determine which calculated overlaps have valid overlaps // (i.e. valid pixels > mincount) if (oStat["Valid"][0] == "true") { - m_doesOverlapList[x] = true; + m_doesOverlapList[x] = true; m_doesOverlapList[y] = true; } } @@ -821,7 +821,7 @@ namespace Isis { for (int o = 0; o < (int) m_overlapStats.size(); o++) { OverlapStatistics *oStat = m_overlapStats[o]; - // Calculate the indices - we want to ensure that no matter how the input list of images + // Calculate the indices - we want to ensure that no matter how the input list of images // changes (e.g. the order is changed), we always add overlaps that same way. // This means ensuring that each overlap has the X overlap statistics associated with // the X index and the Y overlap statistics associated with the Y index. @@ -891,7 +891,7 @@ namespace Isis { m_maxBand = 0; m_sType = OverlapNormalization::Both; - m_lsqMethod = LeastSquares::SPARSE; + m_lsqMethod = LeastSquares::SVD; m_badFiles.clear(); m_doesOverlapList.clear(); diff --git a/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp b/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp index 329908226f..4866df64fd 100644 --- a/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp +++ b/isis/src/base/objs/ForstnerOperator/ForstnerOperator.cpp @@ -140,4 +140,3 @@ namespace Isis { extern "C" Isis::InterestOperator *ForstnerOperatorPlugin(Isis::Pvl &pvl) { return new Isis::ForstnerOperator(pvl); } - diff --git a/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp b/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp index cd87b4ccdf..c6b1e1930d 100644 --- a/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp +++ b/isis/src/base/objs/JP2Decoder/JP2Decoder.cpp @@ -31,8 +31,12 @@ #include "JP2Error.h" using namespace std; + +#if ENABLEJP2K using namespace kdu_core; using namespace kdu_supp; +#endif + namespace Isis { /** diff --git a/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp b/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp index 993850ea87..9d241ac7e2 100644 --- a/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp +++ b/isis/src/base/objs/JP2Encoder/JP2Encoder.cpp @@ -31,8 +31,11 @@ #include "JP2Error.h" using namespace std; + +#if ENABLEJP2K using namespace kdu_core; using namespace kdu_supp; +#endif namespace Isis { diff --git a/isis/src/base/objs/JP2Encoder/JP2Encoder.h b/isis/src/base/objs/JP2Encoder/JP2Encoder.h index e142b44ec6..83ac97c683 100644 --- a/isis/src/base/objs/JP2Encoder/JP2Encoder.h +++ b/isis/src/base/objs/JP2Encoder/JP2Encoder.h @@ -30,6 +30,7 @@ #include "jp2.h" #include "kdu_stripe_compressor.h" #endif + #define MIN_STRIPE_HEIGHT 256 #define MAX_STRIPE_HEIGHT 8192 #define INCREMENTAL_FLUSH_BYTES (256 * 1024 * 1024) diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.cpp b/isis/src/base/objs/LeastSquares/LeastSquares.cpp index aafbbfb17c..1d1edf96e2 100644 --- a/isis/src/base/objs/LeastSquares/LeastSquares.cpp +++ b/isis/src/base/objs/LeastSquares/LeastSquares.cpp @@ -23,10 +23,6 @@ #include "jama/jama_svd.h" #include "jama/jama_qr.h" -#ifndef __sun__ -#include "gmm/gmm_superlu_interface.h" -#endif - #include "LeastSquares.h" #include "IException.h" #include "IString.h" @@ -46,10 +42,6 @@ namespace Isis { p_sparse = sparse; p_sigma0 = 0.; -#if defined(__sun__) - p_sparse = false; -#endif - if (p_sparse) { // make sure sparse nrows/ncols have been set @@ -59,20 +51,6 @@ namespace Isis { throw IException(IException::Programmer, msg, _FILEINFO_); } -#ifndef __sun__ - gmm::resize(p_sparseA, sparseRows, sparseCols); - gmm::resize(p_normals, sparseCols, sparseCols); - gmm::resize(p_ATb, sparseCols, 1); - p_xSparse.resize(sparseCols); - - if( p_jigsaw ) { - p_epsilonsSparse.resize(sparseCols); - std::fill_n(p_epsilonsSparse.begin(), sparseCols, 0.0); - - p_parameterWeights.resize(sparseCols); - } - -#endif p_sparseRows = sparseRows; p_sparseCols = sparseCols; } @@ -131,48 +109,9 @@ namespace Isis { p_sqrtWeight.push_back(sqrt(weight)); } - if(p_sparse) { -#ifndef __sun__ - FillSparseA(data); -#endif - } - else { - p_input.push_back(data); - } - } - - - - /** - * Invoke this method for each set of knowns for sparse solutions. The A - * sparse matrix must be filled as we go or we will quickly run out of memory - * for large solutions. So, expand the basis function, apply weights (which is - * done in the Solve method for the non-sparse case. - * - * @param data A vector of knowns. - * - * @internal - * @history 2008-04-22 Tracie Sucharski - New method for sparse solutions. - * @history 2009-12-21 Jeannie Walldren - Changed variable name - * from p_weight to p_sqrtweight. - * - */ -#ifndef __sun__ - void LeastSquares::FillSparseA(const std::vector &data) { - - p_basis->Expand(data); - - p_currentFillRow++; - - // ??? Speed this up using iterator instead of array indices??? - int ncolumns = (int)data.size(); - for(int c = 0; c < ncolumns; c++) { - p_sparseA(p_currentFillRow, c) = p_basis->Term(c) * p_sqrtWeight[p_currentFillRow]; - } + p_input.push_back(data); } -#endif - /** * This method returns the data at the given row. @@ -230,10 +169,6 @@ namespace Isis { */ int LeastSquares::Solve(Isis::LeastSquares::SolveMethod method) { -#if defined(__sun__) - if(method == SPARSE) method = QRD; -#endif - if((method == SPARSE && p_sparseRows == 0) || (method != SPARSE && Rows() == 0 )) { p_solved = false; @@ -247,12 +182,6 @@ namespace Isis { else if(method == QRD) { SolveQRD(); } - else if(method == SPARSE) { -#ifndef __sun__ - int column = SolveSparse(); - return column; -#endif - } return 0; } @@ -324,8 +253,8 @@ namespace Isis { if (coefs.dim1() < p_basis->Coefficients()) { QString msg = "Unable to solve least-squares using SVD method. No " "solution available. Not enough knowns or knowns are " - "co-linear ... [Unknowns = " - + toString(p_basis->Coefficients()) + "] [Knowns = " + "co-linear ... [Unknowns = " + + toString(p_basis->Coefficients()) + "] [Knowns = " + toString(coefs.dim1()) + "]"; throw IException(IException::Unknown, msg, _FILEINFO_); } @@ -422,295 +351,11 @@ namespace Isis { } - - - /** - * @brief Solve using sparse class - * - * After all the data has been registered through AddKnown, invoke this - * method to solve the system of equations Nx = b, where - * - * N = ATPA - * b = ATPl, and - * - * N is the "normal equations matrix; - * A is the so-called "design" matrix; - * P is the observation weight matrix (typically diagonal); - * l is the "computed - observed" column vector; - * - * The solution is achieved using a sparse matrix formulation of - * the LU decomposition of the normal equations. - * - * You can then use the Evaluate and Residual methods freely. - * - * @internal - * @history 2008-04-16 Debbie Cook / Tracie Sucharski, New method - * @history 2008-04-23 Tracie Sucharski, Fill sparse matrix as we go in - * AddKnown method rather than in the solve method, - * otherwise we run out of memory very quickly. - * @history 2009-04-08 Tracie Sucharski - Added return value which is a - * column number of a column that contained all zeros. - * @history 2009-12-21 Jeannie Walldren - Changed variable name - * from p_weight to p_sqrtweight. - * @history 2010 Ken Edmundson - * @history 2010-11-20 Debbie A. Cook Merged Ken Edmundson verion with system version - * @history 2011-03-17 Ken Edmundson Corrected computation of residuals - * - */ -#ifndef __sun__ - int LeastSquares::SolveSparse() { - - // form "normal equations" matrix by multiplying ATA - gmm::mult(gmm::transposed(p_sparseA), p_sparseA, p_normals); - - // Test for any columns with all 0's - // Return column number so caller can determine the appropriate error. - int numNonZeros; - for(int c = 0; c < p_sparseCols; c++) { - numNonZeros = gmm::nnz(gmm::sub_matrix(p_normals, - gmm::sub_interval(0,p_sparseCols), - gmm::sub_interval(c,1))); - - if(numNonZeros == 0) return c + 1; - } - - // Create the right-hand-side column vector 'b' - gmm::dense_matrix b(p_sparseRows, 1); - - // multiply each element of 'b' by it's associated weight - for ( int r = 0; r < p_sparseRows; r++ ) - b(r,0) = p_expected[r] * p_sqrtWeight[r]; - - // form ATb - gmm::mult(gmm::transposed(p_sparseA), b, p_ATb); - - // apply parameter weighting if Jigsaw (bundle adjustment) - if ( p_jigsaw ) { - for( int i = 0; i < p_sparseCols; i++) { - double weight = p_parameterWeights[i]; - - if( weight <= 0.0 ) - continue; - - p_normals[i][i] += weight; - p_ATb[i] -= p_epsilonsSparse[i]*weight; - } - } - -// printf("printing rhs\n"); -// for( int i = 0; i < m_nSparseCols; i++ ) -// printf("%20.10e\n",m_ATb[i]); - - // decompose normal equations matrix - p_SLU_Factor.build_with(p_normals); - - // solve with decomposed normals and right hand side - // int perm = 0; // use natural ordering - int perm = 2; // confirm meaning and necessity of -// double recond; // variables perm and recond - p_SLU_Factor.solve(p_xSparse,gmm::mat_const_col(p_ATb,0), perm); - // Set the coefficients in our basis equation - p_basis->SetCoefficients(p_xSparse); - - // if Jigsaw (bundle adjustment) - // add corrections into epsilon vector (keeping track of total corrections) - if ( p_jigsaw ) { - for( int i = 0; i < p_sparseCols; i++ ) - p_epsilonsSparse[i] += p_xSparse[i]; - } - - // test print solution -// printf("printing solution vector and epsilons\n"); -// for( int a = 0; a < p_sparseCols; a++ ) -// printf("soln[%d]: %lf epsilon[%d]: %lf\n",a,p_xSparse[a],a,p_epsilonsSparse[a]); - -// printf("printing design matrix A\n"); -// for (int i = 0; i < p_sparseRows; i++ ) -// { -// for (int j = 0; j < p_sparseCols; j++ ) -// { -// if ( j == p_sparseCols-1 ) -// printf("%20.20e \n",(double)(p_sparseA(i,j))); -// else -// printf("%20.20e ",(double)(p_sparseA(i,j))); -// } -// } - - // Compute the image coordinate residuals and sum into Sigma0 - // (note this is exactly what was being done before, but with less overhead - I think) - // ultimately, we should not be using the A matrix but forming the normals - // directly. Then we'll have to compute the residuals by back projection - - p_residuals.resize(p_sparseRows); - gmm::mult(p_sparseA, p_xSparse, p_residuals); - p_sigma0 = 0.0; - - for ( int i = 0; i < p_sparseRows; i++ ) { - p_residuals[i] = p_residuals[i]/p_sqrtWeight[i]; - p_residuals[i] -= p_expected[i]; - p_sigma0 += p_residuals[i]*p_residuals[i]*p_sqrtWeight[i]*p_sqrtWeight[i]; - } - - // if Jigsaw (bundle adjustment) - // add contibution to Sigma0 from constrained parameters - if ( p_jigsaw ) { - double constrained_vTPv = 0.0; - - for ( int i = 0; i < p_sparseCols; i++ ) { - double weight = p_parameterWeights[i]; - - if ( weight <= 0.0 ) - continue; - - constrained_vTPv += p_epsilonsSparse[i]*p_epsilonsSparse[i]*weight; - } - p_sigma0 += constrained_vTPv; - } - // calculate degrees of freedom (or redundancy) - // DOF = # observations + # constrained parameters - # unknown parameters - p_degreesOfFreedom = p_sparseRows + p_constrainedParameters - p_sparseCols; - - if( p_degreesOfFreedom <= 0.0 ) { - printf("Observations: %d\nConstrained: %d\nParameters: %d\nDOF: %d\n", - p_sparseRows,p_constrainedParameters,p_sparseCols,p_degreesOfFreedom); - p_sigma0 = 1.0; - } - else - p_sigma0 = p_sigma0/(double)p_degreesOfFreedom; - - // check for p_sigma0 < 0 - p_sigma0 = sqrt(p_sigma0); - - // kle testing - output residuals and some stats - printf("Sigma0 = %20.10lf\nNumber of Observations = %d\nNumber of Parameters = %d\nNumber of Constrained Parameters = %d\nDOF = %d\n",p_sigma0,p_sparseRows,p_sparseCols,p_constrainedParameters,p_degreesOfFreedom); -// printf("printing residuals\n"); -// for( int k = 0; k < p_sparseRows; k++ ) -// { -// printf("%lf %lf\n",p_residuals[k],p_residuals[k+1]); -// k++; -// } - - // All done - p_solved = true; - return 0; - } -#endif - - /** - * @brief Error propagation for sparse least-squares solution - * - * Computes the variance-covariance matrix of the parameters. - * This is the inverse of the normal equations matrix, scaled by - * the reference variance (also called variance of unit weight, - * etc). - * - * @internal - * @history 2009-11-19 Ken Edmundson, New method - * - * Notes: - * - * 1) The SLU_Factor (Super LU Factor) has already been - * factorised in each iteration but there is no gmm++ method to - * get the inverse of the sparse matrix implementation. so we - * have to get it ourselves. This is don by solving the - * factorized normals repeatedly with right-hand sides that are - * the columns of the identity matrix (which is how gmm - or - * anybody else would do it). - * - * 2) We should create our own matrix library, probably wrapping - * the gmm++ library (and perhaps other(s) that may have - * additional desired functionality). The inverse function - * should be part of the library, along with the capacity for - * triangular storage and other decomposition techniques - - * notably Cholesky. - * - * 3) The LU decomposition can be be performed even if the - * normal equations are singular. But, we should always be - * dealing with a positive-definite matrix (for the bundle - * adjustment). Cholesky is faster, more efficient, and requires - * a positive-definite matrix, so if it fails, it is an - * indication of a singular matrix - bottom line - we should be - * using Cholesky. Or a derivative of Cholesky, i.e., UTDU - * (LDLT). - * - * 4) As a consequence of 3), we should be checking for - * positive-definite state of the normals, perhaps via the - * matrix determinant, prior to solving. There is a check in - * place now that checks to see if a column of the design matrix - * (or basis?) is all zero. This is equivalent - if a set of - * vectors contains the zero vector, then the set is linearly - * dependent, and the matrix is not positive-definite. In - * Jigsaw, the most likely cause of the normals being - * non-positive-definite probably is failure to establish the - * datum (i.e. constraining a minimum of seven parameters - - * usually 3 coordinates of two points and 1 of a third). - */ -#ifndef __sun__ - bool LeastSquares::SparseErrorPropagation () - { - // clear memory - gmm::clear(p_ATb); - gmm::clear(p_xSparse); - - // for each column of the inverse, solve with a right-hand side consisting - // of a column of the identity matrix, putting each resulting solution vectfor - // into the corresponding column of the inverse matrix - for ( int i = 0; i < p_sparseCols; i++ ) - { - if( i > 0 ) - p_ATb(i-1,0) = 0.0; - - p_ATb(i,0) = 1.0; - - // solve with decomposed normals and right hand side - p_SLU_Factor.solve(p_xSparse,gmm::mat_const_col(p_ATb,0)); - - // put solution vector x into current column of inverse matrix - gmm::copy(p_xSparse, gmm::mat_row(p_normals, i)); - } - - // scale inverse by Sigma0 squared to get variance-covariance matrix - // if simulated data, we don't scale (effectively scaling by 1.0) - // printf("scaling by Sigma0\n"); - gmm::scale(p_normals,(p_sigma0*p_sigma0)); - -// printf("covariance matrix\n"); -// for (int i = 0; i < p_sparseCols; i++ ) -// { -// for (int j = 0; j < p_sparseCols; j++ ) -// { -// if ( j == p_sparseCols-1 ) -// printf("%20.20e \n",(double)(p_sparseInverse(i,j))); -// else -// printf("%20.20e ",(double)(p_sparseInverse(i,j))); -// } -// } - - // standard deviations from covariance matrix -// printf("parameter standard deviations\n"); -// for (int i = 0; i < p_sparseCols; i++ ) -// { -// printf("Sigma Parameter %d = %20.20e \n",i+1,sqrt((double)(p_sparseInverse(i,i)))); -// } - - return true; - } -#endif - - void LeastSquares::Reset () { - if ( p_sparse ) { - gmm::clear(p_sparseA); - gmm::clear(p_ATb); - gmm::clear(p_normals); - p_currentFillRow = -1; - } - else { - p_input.clear(); - // p_sigma0 = 0.; - } - p_sigma0 = 0.; + + p_input.clear(); + p_sigma0 = 0.; p_residuals.clear(); p_expected.clear(); p_sqrtWeight.clear(); diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.h b/isis/src/base/objs/LeastSquares/LeastSquares.h index 9f149c61cd..52a1054ed3 100644 --- a/isis/src/base/objs/LeastSquares/LeastSquares.h +++ b/isis/src/base/objs/LeastSquares/LeastSquares.h @@ -26,12 +26,6 @@ #include "tnt/tnt_array2d.h" - -#ifndef __sun__ -// used to ignore warnings generated by gmm.h when building on clang -#include "gmm/gmm.h" -#endif - #include "BasisFunction.h" namespace Isis { @@ -152,36 +146,11 @@ namespace Isis { int GetDegreesOfFreedom() { return p_degreesOfFreedom; } void Reset (); -#ifndef __sun__ - void ResetSparse() { Reset(); } - bool SparseErrorPropagation(); - std::vector GetEpsilons () const { return p_epsilonsSparse; } - void SetParameterWeights(const std::vector weights) { p_parameterWeights = weights; } - void SetNumberOfConstrainedParameters(int n) { p_constrainedParameters = n; } - const gmm::row_matrix >& GetCovarianceMatrix () const { return p_normals; } -#endif - private: void SolveSVD(); void SolveQRD(); void SolveCholesky () {} -#ifndef __sun__ - int SolveSparse(); - void FillSparseA(const std::vector &data); - bool ApplyParameterWeights(); - - std::vector p_xSparse; /** p_epsilonsSparse; /** p_parameterWeights; /** > p_sparseA; /** > p_normals; /** p_ATb; /** p_SLU_Factor; /**Coefficients(); - m_offsetLsq = new LeastSquares(*m_offsetFunction, true, sparseMatrixRows, sparseMatrixCols, true); - sparseMatrixCols = m_gainFunction->Coefficients(); - m_gainLsq = new LeastSquares(*m_gainFunction, true, sparseMatrixRows, sparseMatrixCols, true); - const std::vector alphaWeight(sparseMatrixCols, 1/1000.0); - m_offsetLsq->SetParameterWeights( alphaWeight ); - m_gainLsq->SetParameterWeights( alphaWeight ); - } - // Calculate offsets if (type != Gains && type != GainsWithoutNormalization) { // Add knowns to least squares for each overlap diff --git a/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h b/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h index 7b9ff71cd7..bdfac65aa4 100644 --- a/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h +++ b/isis/src/base/objs/PolygonSeeder/PolygonSeeder.h @@ -25,6 +25,7 @@ #include #include +#include #include "geos/geom/Point.h" #include "geos/geom/MultiPolygon.h" @@ -66,13 +67,13 @@ namespace Isis { virtual ~PolygonSeeder(); /** - * Pure virtual seed method. - * - * @param mp The MultiPolygon object from the geos::geom library. - * @return @b std::vector A vector of Point objects + * Pure virtual seed method. + * + * @param mp The MultiPolygon object from the geos::geom library. + * @return @b std::vector A vector of Point objects * from the geos::geom library. */ - virtual std::vector + virtual std::vector Seed(const geos::geom::MultiPolygon *mp) = 0; double MinimumThickness(); @@ -90,20 +91,20 @@ namespace Isis { const geos::geom::Envelope *polyBoundBox); protected: - Pvl *invalidInput; /**< The Pvl passed in by the constructor minus what + Pvl *invalidInput; /**< The Pvl passed in by the constructor minus what was used.*/ private: QString p_algorithmName; /**< The value for the 'Name' Keyword in the PolygonSeederAlgorithm group of the Pvl that is passed into the constructor.*/ - double p_minimumThickness; /**< The value for the 'MinimumThickness' - Keyword in the PolygonSeederAlgorithm - group of the Pvl that is passed into + double p_minimumThickness; /**< The value for the 'MinimumThickness' + Keyword in the PolygonSeederAlgorithm + group of the Pvl that is passed into the constructor*/ - double p_minimumArea; /**< The value for the 'MinimumArea' Keyword - in the PolygonSeederAlgorithm group of - the Pvl that is passed into the + double p_minimumArea; /**< The value for the 'MinimumArea' Keyword + in the PolygonSeederAlgorithm group of + the Pvl that is passed into the constructor*/ }; diff --git a/isis/src/control/apps/cnet2dem/PointCloudTree.h b/isis/src/control/apps/cnet2dem/PointCloudTree.h index 2122a911ab..df2b3912e6 100644 --- a/isis/src/control/apps/cnet2dem/PointCloudTree.h +++ b/isis/src/control/apps/cnet2dem/PointCloudTree.h @@ -28,7 +28,7 @@ #include -#include +#include #include "PointCloud.h" #include "PointCloudSearchResult.h" diff --git a/isis/src/control/apps/cnet2dem/cnet2dem.cpp b/isis/src/control/apps/cnet2dem/cnet2dem.cpp index fb0efbf522..2571604327 100644 --- a/isis/src/control/apps/cnet2dem/cnet2dem.cpp +++ b/isis/src/control/apps/cnet2dem/cnet2dem.cpp @@ -9,7 +9,7 @@ // boost library #include -#include "nanoflann/nanoflann.hpp" +#include "nanoflann.hpp" #include "ControlNet.h" #include "ControlPointCloudPt.h" diff --git a/isis/src/control/apps/cnetcombinept/PointCloudTree.h b/isis/src/control/apps/cnetcombinept/PointCloudTree.h index 4fdb116b26..ddaf7cfb59 100644 --- a/isis/src/control/apps/cnetcombinept/PointCloudTree.h +++ b/isis/src/control/apps/cnetcombinept/PointCloudTree.h @@ -28,7 +28,7 @@ #include -#include +#include #include "PointCloud.h" diff --git a/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp b/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp index e44f1ac326..8b15adc48f 100644 --- a/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp +++ b/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp @@ -9,7 +9,7 @@ #include #include -#include "nanoflann/nanoflann.hpp" +#include "nanoflann.hpp" #include "ControlNet.h" #include "MeasurePoint.h" @@ -59,7 +59,7 @@ typedef PointCloudTree CNetPointCloudTree; typedef QSharedPointer CubeMeasureTree; void IsisMain() { - + // We will be processing by line ProcessByLine pbl; UserInterface &ui = Application::GetUserInterface(); @@ -67,13 +67,13 @@ void IsisMain() { QStringList cnetfiles; int nBase(0); if ( ui.WasEntered("CNETBASE") ) { - cnetfiles.append(ui.GetAsString("CNETBASE")); + cnetfiles.append(ui.GetAsString("CNETBASE")); nBase++; } int nFrom(0); if ( ui.WasEntered("CNETFROM") ) { - cnetfiles.append(ui.GetAsString("CNETFROM")); + cnetfiles.append(ui.GetAsString("CNETFROM")); nFrom++; } @@ -127,17 +127,17 @@ void IsisMain() { #else QScopedPointer cnet( new ControlNet(cfile) ); #endif - if ( netid.isEmpty() ) { - netid = cnet->GetNetworkId(); + if ( netid.isEmpty() ) { + netid = cnet->GetNetworkId(); } - if ( target.isEmpty() ) { - target = cnet->GetTarget(); + if ( target.isEmpty() ) { + target = cnet->GetTarget(); } - if ( description.isEmpty() ) { - description = cnet->Description(); + if ( description.isEmpty() ) { + description = cnet->Description(); } - if ( radii.isEmpty() ) { - radii = QVector::fromStdVector(cnet->GetTargetRadii()); + if ( radii.isEmpty() ) { + radii = QVector::fromStdVector(cnet->GetTargetRadii()); } // Now get list of all cube serials and add all to list @@ -182,7 +182,7 @@ void IsisMain() { FileName filename( ui.GetFileName("TOSN") ); QFile logfile(filename.expanded()); - if ( !logfile.open(QIODevice::WriteOnly | QIODevice::Truncate | + if ( !logfile.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text | QIODevice::Unbuffered) ) { QString mess = "Unable to open/create serial number file " + filename.name(); throw IException(IException::User, mess, _FILEINFO_); @@ -194,7 +194,7 @@ void IsisMain() { sns.next(); lout << sns.key() << "\n"; } - + logfile.close(); } @@ -285,7 +285,7 @@ void IsisMain() { bool cleanmeasures = ui.GetBoolean("CLEANMEASURES"); int minmeasures = ui.GetInteger("MINMEASURES"); - // Set up control net here so we can complete all processing in this step + // Set up control net here so we can complete all processing in this step QScopedPointer cnet; if ( ui.WasEntered("ONET") ) { // std::cout << "\nWriting network...\n"; @@ -295,14 +295,14 @@ void IsisMain() { netid = ui.GetString("NETWORKID"); } - cnet->SetNetworkId(netid); + cnet->SetNetworkId(netid); cnet->SetUserName(Application::UserName()); - if ( ui.WasEntered("DESCRIPTION") ) { - description = ui.GetString("DESCRIPTION"); + if ( ui.WasEntered("DESCRIPTION") ) { + description = ui.GetString("DESCRIPTION"); } - cnet->SetDescription(description); + cnet->SetDescription(description); cnet->SetCreatedDate(Application::DateTime()); cnet->SetTarget(target, radii); #if defined(HAS_WRITE_ONLY_OPTION) @@ -337,14 +337,14 @@ void IsisMain() { if ( isValid(m_p) ) { vPoints++; - + // Processes measures if requested if ( true == cleanmeasures ) { QList measures = m_p->getMeasures( false ); BOOST_FOREACH ( ControlMeasure *m, measures) { - if ( !isValid(m) ) { - m_p->Delete(m); + if ( !isValid(m) ) { + m_p->Delete(m); nRemoved++; } } @@ -383,7 +383,7 @@ void IsisMain() { m_p->SetAprioriSurfacePoint(m_p->GetBestSurfacePoint()); } - cnet->AddPoint(m_p); + cnet->AddPoint(m_p); oPoints++; } else { // If not creating control network, ensure points are deleted @@ -420,4 +420,3 @@ void IsisMain() { pbl.EndProcess(); } - -- GitLab From fd0c686cc42889a06bc1d3663e487d46c0de66f9 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 15:53:30 -0700 Subject: [PATCH 094/620] updated env --- environment.yml | 107 +++++++++ isis/cmake/AddIsisModule.cmake | 1 + isis/cmake/FindAllDependencies.cmake | 319 +++------------------------ isis/environment.yml | 104 --------- 4 files changed, 136 insertions(+), 395 deletions(-) create mode 100644 environment.yml delete mode 100644 isis/environment.yml diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000000..4b52026d8b --- /dev/null +++ b/environment.yml @@ -0,0 +1,107 @@ +name: isisdeps +channels: + - anaconda + - mgckind + - jlaura + - defaults + - conda-forge + - krodriguez + - usgs-astrogeology +dependencies: + - geotiff=1.4.1=0 + - libgcc=4.8.5=1 + - proj4=4.9.2=0 + - blas=1.1=openblas + - boost=1.65.1=py27_0 + - boost-cpp=1.65.1=1 + - bzip2=1.0.6=1 + - cairo=1.14.6=4 + - cmake=3.9.1=0 + - cspice=66=0 + - curl=7.55.1=0 + - doxygen=1.8.14=0 + - eigen=3.3.3=0 + - expat=2.2.5=0 + - ffmpeg=3.2.4=3 + - flann=1.8.4=0 + - fontconfig=2.12.1=4 + - freetype=2.7=1 + - geos=3.5.1=1 + - gettext=0.19.8.1=0 + - giflib=5.1.4=0 + - glib=2.51.4=0 + - harfbuzz=1.3.4=2 + - hdf5=1.8.18=2 + - icu=58.2=0 + - jasper=1.900.1=4 + - jpeg=9b=2 + - krb5=1.14.2=0 + - lapack=3.6.1=1 + - libffi=3.2.1=3 + - libgfortran=3.0.0=0 + - libiconv=1.15=0 + - libpng=1.6.34=0 + - libssh2=1.8.0=2 + - libtiff=4.0.6=7 + - libuv=1.11.0=0 + - libwebp=0.5.2=7 + - libxcb=1.12=1 + - libxml2=2.9.7=0 + - m4=1.4.17=1 + - metis=5.1.0=3 + - mysql-connector-c=6.1.6=0 + - nanoflann=1.2.2=0 + - ncurses=5.9=10 + - ninja=1.7.2=0 + - nn=1.86.0=2 + - numpy=1.13.3=py27_blas_openblas_200 + - opencv=3.3.0=py27_blas_openblas_200 + - pcre=8.39=0 + - pip=9.0.1=py27_1 + - pixman=0.34.0=1 + - protobuf=3.2.0=py27_0 + - python=2.7.14=4 + - qwt=6.1.3=1 + - readline=7.0=0 + - rhash=1.3.4=0 + - setuptools=38.5.1=py27_0 + - six=1.11.0=py27_1 + - sqlite=3.20.1=2 + - suitesparse=4.5.4=blas_openblas_200 + - superlu=5.2.1=blas_openblas_201 + - tk=8.6.7=0 + - wheel=0.30.0=py27_2 + - x264=20131217=3 + - xorg-kbproto=1.0.7=1 + - xorg-libx11=1.6.4=6 + - xorg-libxau=1.0.8=3 + - xorg-libxdmcp=1.1.2=3 + - xorg-xproto=7.0.31=6 + - xz=5.2.3=0 + - zlib=1.2.11=0 + - ca-certificates=2017.08.26=ha1e5d58_0 + - certifi=2018.1.18=py27_0 + - gsl=2.2.1=h002c638_3 + - libcxx=4.0.1=h579ed51_0 + - libcxxabi=4.0.1=hebd6815_0 + - mysql=5.7.20=h14d89c2_0 + - openblas=0.2.19=1 + - openssl=1.0.2n=hdbc3d79_0 + - qt=5.6.2=h9975529_14 + - isisdeps=7=0 + - bullet=2.86.1=he2aa7b0_0 + - ds9=7.5=h35e3669_0 + - embree=2.16.0=h6834224_0 + - gmm=5.0=h6aef312_0 + - jama=125=hf0e5908_0 + - naif=n0066=h90cdba2_0 + - patchelf=0.9=h879b6ae_0 + - pcl=1.8.1=h7a71350_0 + - qhull=7.2.0=h396fa31_0 + - tbb=4.4=hf7780a4_0 + - tnt=126=h520b23f_0 + - vtk=7.1.1=py27h56fd973_0 + - xalan-c=1.11=h1922a5c_0 + - xerces-c=3.1.4=h10f7eb2_0 +prefix: /Users/krodriguez/anaconda3/envs/isisdeps + diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index e62f4ba9a7..a15a5ba348 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -44,6 +44,7 @@ function(add_isis_app folder libDependencies) # Have the app install with the real name, not the internal name. target_link_libraries(${internalAppName} ${libDependencies}) + set_target_properties(${internalAppName} PROPERTIES OUTPUT_NAME ${appName}) install(TARGETS ${internalAppName} DESTINATION bin) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index c19a158a93..361eeeb38d 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -4,55 +4,9 @@ # go looking for them if they are not? #=============================================================================== -list(APPEND CMAKE_INCLUDE_PATH - /usgs/pkgs/local/v007/include/ - /usgs/pkgs/local/v007/bin/ - /usgs/pkgs/local/v007/lib/ - /usgs/pkgs/local/v007/objects/ - /usgs/pkgs/local/v007/include/google-protobuf/protobuf2.6.1/ - /usgs/pkgs/local/v007/include/xercesc/xercesc-3.1.2/ - /usgs/pkgs/local/v007/include/tiff/tiff-4.0.5/ - /usr/lib64/ -) - -set(CMAKE_PREFIX_PATH - /usgs/pkgs/local/v007/include/ - /usgs/pkgs/local/v007/bin/ - /usgs/pkgs/local/v007/lib/ - /usgs/pkgs/local/v007/libexec/ - /opt/usgs/v007/ports/Library/Frameworks/ - /opt/usgs/v007/ports/libexec/ - /opt/usgs/v007/ports/bin/ - /opt/usgs/v007/ports/lib/ - /opt/usgs/v007/ports/include/ - /opt/usgs/v007/ports/libexec/qt5 - /opt/usgs/v007/ports/libexec/qt5/bin/ - /opt/usgs/v007/ports/libexec/qt5/lib/ - /opt/usgs/v007/3rdparty/bin - /opt/usgs/v007/3rdparty/include/ - /opt/usgs/v007/3rdparty/lib/ - /opt/usgs/v007/proprietary/ - /opt/usgs/v007/proprietary/include/ - /opt/usgs/v007/proprietary/lib/ - /usr/lib/ - /usr/lib64/ - /usr/local/lib/ -) - -# Specify top level directories -set(thirdPartyDir "/usgs/pkgs/local/v007") -set(INCLUDE_DIR "${thirdPartyDir}/include") -set(LIB_DIR "${thirdPartyDir}/lib") -set(PLUGIN_DIR "${thirdPartyDir}/plugins") -set(BIN_DIR "${thirdPartyDir}/bin") -set(LIC_DIR "${thirdPartyDir}/license") - -# Set up plugin dir for OSX to correctly find qt5 plugins for installing -if(APPLE) - set(thirdPartyDir "/opt/usgs/v007") - set(PLUGIN_DIR "${thirdPartyDir}/ports/libexec/qt5/plugins") -endif(APPLE) - +message("CONDA PREFIX: $ENV{CONDA_PREFIX}") +set(CMAKE_LIBRARY_PATH $ENV{$CONDA_PREFIX}) +set(CMAKE_INCLUDE_PATH $ENV{$CONDA_PREFIX}) # Add thirdPartyCppFlags set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) @@ -67,95 +21,33 @@ find_program(MOC moc REQUIRED) find_program(RCC rcc REQUIRED) find_program(PROTOC protoc REQUIRED) -# message(STATUS "${CMAKE_PREFIX_PATH}") - include(FindProtobuf) - -find_package(Geos 3.5.0 REQUIRED) - - -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.7.1/QtCore/) - find_path(QT5_CONCURRENT_INCLUDE_DIR NAMES qtconcurrentmap.h PATH_SUFFIXES qt/qt5.7.1/QtConcurrent) - find_path(QT5_DBUS_INCLUDE_DIR NAMES qdbusmacros.h PATH_SUFFIXES qt/qt5.7.1/QtDBus) - find_path(QT5_GUI_INCLUDE_DIR NAMES qpainter.h PATH_SUFFIXES qt/qt5.7.1/QtGui) - find_path(QT5_MULTIMEDIA_INCLUDE_DIR NAMES qmediacontent.h PATH_SUFFIXES qt/qt5.7.1/QtMultimedia) - find_path(QT5_MULTIMEDIAWIDGETS_INCLUDE_DIR NAMES qvideowidget.h PATH_SUFFIXES qt/qt5.7.1/QtMultimediaWidgets) - find_path(QT5_NETWORK_INCLUDE_DIR NAMES qsslsocket.h PATH_SUFFIXES qt/qt5.7.1/QtNetwork) - find_path(QT5_OPENGL_INCLUDE_DIR NAMES qtopenglglobal.h PATH_SUFFIXES qt/qt5.7.1/QtOpenGL) - find_path(QT5_POSITIONING_INCLUDE_DIR NAMES qgeocoordinate.h PATH_SUFFIXES qt/qt5.7.1/QtPositioning) - find_path(QT5_PRINTSUPPORT_INCLUDE_DIR NAMES qprinter.h PATH_SUFFIXES qt/qt5.7.1/QtPrintSupport) - find_path(QT5_QML_INCLUDE_DIR NAMES qqmlinfo.h PATH_SUFFIXES qt/qt5.7.1/QtQml) - find_path(QT5_QUICK_INCLUDE_DIR NAMES qquickview.h PATH_SUFFIXES qt/qt5.7.1/QtQuick) -# find_path(QT5_SCRIPT_INCLUDE_DIR NAMES qscriptengine.h PATH_SUFFIXES qt/qt5.7.1/QtScript) -#find_path(QT5_SCRIPTTOOLS_INCLUDE_DIR NAMES qtscripttoolsversion.h PATH_SUFFIXES qt/qt5.7.1/QtScriptTools) - find_path(QT5_SENSORS_INCLUDE_DIR NAMES qgyroscope.h PATH_SUFFIXES qt/qt5.7.1/QtSensors) - find_path(QT5_SQL_INCLUDE_DIR NAMES qsql.h PATH_SUFFIXES qt/qt5.7.1/QtSql) - find_path(QT5_SVG_INCLUDE_DIR NAMES qsvgwidget.h PATH_SUFFIXES qt/qt5.7.1/QtSvg) - find_path(QT5_TEST_INCLUDE_DIR NAMES qtest.h PATH_SUFFIXES qt/qt5.7.1/QtTest) - find_path(QT5_WEBCHANNEL_INCLUDE_DIR NAMES qwebchannel.h PATH_SUFFIXES qt/qt5.7.1/QtWebChannel) - find_path(QT5_WEBENGINE_INCLUDE_DIR NAMES qtwebengineglobal.h PATH_SUFFIXES qt/qt5.7.1/QtWebEngine) - find_path(QT5_WEBENGINEWIDGETS_INCLUDE_DIR NAMES qwebenginescript.h PATH_SUFFIXES qt/qt5.7.1/QtWebEngineWidgets) - find_path(QT5_WIDGETS_INCLUDE_DIR NAMES qwidget.h PATH_SUFFIXES qt/qt5.7.1/QtWidgets) - find_path(QT5_XML_INCLUDE_DIR NAMES qxml.h PATH_SUFFIXES qt/qt5.7.1/QtXml) - find_path(QT5_XMLPATTERNS_INCLUDE_DIR NAMES qtxmlpatternsglobal.h PATH_SUFFIXES qt/qt5.7.1/QtXmlPatterns) - - get_filename_component(QT5_ROOT_INCLUDE_DIR "${QT5_CORE_INCLUDE_DIR}" DIRECTORY) - - 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_WEBENGINECORE_LIBRARY NAMES Qt5WebEngineCore) - 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(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) # Some of these will have non-traditional installs with version numbers in the paths in v007 # For these, we pass in a version number, and use it in the path suffix @@ -204,7 +96,6 @@ foreach (_variableName ${_variableNames}) list(APPEND ALLINCDIRS "${${_variableName}}") endif(_variableName MATCHES ".+_INCLUDE_DIR$") endforeach() -list(APPEND ALLINCDIRS "/opt/usgs/v007/ports/include/" "/opt/usgs/v007/3rdParty/include/") foreach (_variableName ${_variableNames}) if (_variableName MATCHES "^CMAKE+") @@ -232,157 +123,3 @@ endforeach() list(REMOVE_DUPLICATES ALLLIBDIRS) list(REMOVE_DUPLICATES ALLLIBS) list(REMOVE_DUPLICATES ALLINCDIRS) - -# 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}") diff --git a/isis/environment.yml b/isis/environment.yml deleted file mode 100644 index 76b9a6e4b2..0000000000 --- a/isis/environment.yml +++ /dev/null @@ -1,104 +0,0 @@ -name: isisdeps -channels: -- anaconda -- krodriguez -- inria-pro-sed -- conda-forge -- usgs-astrogeology -- defaults -dependencies: -- libgcc=4.8.5=1 -- blas=1.1=openblas -- boost=1.65.1=py27_0 -- boost-cpp=1.65.1=1 -- bzip2=1.0.6=1 -- ca-certificates=2018.1.18=0 -- cairo=1.14.6=4 -- certifi=2018.1.18=py27_0 -- cmake=3.9.1=0 -- cspice=66=0 -- curl=7.55.1=0 -- dbus=1.10.22=0 -- doxygen=1.8.14=0 -- eigen=3.3.3=0 -- expat=2.2.5=0 -- ffmpeg=3.2.4=3 -- flann=1.8.4=0 -- fontconfig=2.12.1=4 -- freetype=2.7=1 -- geos=3.5.1=1 -- geotiff=1.4.2=1 -- gettext=0.19.8.1=0 -- giflib=5.1.4=0 -- glib=2.51.4=0 -- gsl=2.2.1=blas_openblas_3 -- harfbuzz=1.3.4=2 -- hdf5=1.8.18=3 -- icu=58.2=0 -- jasper=1.900.1=4 -- jpeg=9b=2 -- krb5=1.14.2=0 -- lapack=3.6.1=1 -- libffi=3.2.1=3 -- libgfortran=3.0.0=0 -- libiconv=1.15=0 -- libpng=1.6.28=2 -- libssh2=1.8.0=2 -- libtiff=4.0.9=0 -- libuv=1.11.0=0 -- libwebp=0.5.2=7 -- libxcb=1.12=1 -- libxml2=2.9.7=0 -- m4=1.4.17=1 -- metis=5.1.0=3 -- nanoflann=1.2.2=0 -- ncurses=5.9=10 -- ninja=1.7.2=0 -- nn=1.86.0=2 -- numpy=1.13.3=py27_blas_openblas_200 -- openblas=0.2.19=2 -- opencv=3.3.0=py27_blas_openblas_200 -- openssl=1.0.2n=0 -- pcre=8.39=0 -- pip=9.0.1=py27_1 -- pixman=0.34.0=1 -- proj4=4.9.3=5 -- protobuf=3.2.0=py27_0 -- python=2.7.14=4 -- qt=5.6.2=h9e3eb04_4 -- qwt=6.1.3=1 -- readline=7.0=0 -- rhash=1.3.4=0 -- setuptools=38.5.1=py27_0 -- six=1.11.0=py27_1 -- sqlite=3.20.1=2 -- suitesparse=4.5.4=blas_openblas_200 -- superlu=5.2.1=blas_openblas_201 -- tk=8.6.7=0 -- wheel=0.30.0=py27_2 -- x264=20131217=3 -- xorg-kbproto=1.0.7=1 -- xorg-libx11=1.6.4=6 -- xorg-libxau=1.0.8=3 -- xorg-libxdmcp=1.1.2=3 -- xorg-xproto=7.0.31=6 -- xz=5.2.3=0 -- zlib=1.2.11=0 -- openmpi=1.8.6=4 -- parmetis=4.0.3p2=1 -- jama=125=0 -- tnt=126=0 -- bullet=2.86.1=he2aa7b0_0 -- ds9=7.5=h35e3669_0 -- embree=2.16.0=h6834224_0 -- gmm=5.0=h6aef312_0 -- naif=n0066=h90cdba2_0 -- patchelf=0.9=h879b6ae_0 -- pcl=1.8.1=h7a71350_0 -- qhull=7.2.0=h396fa31_0 -- tbb=4.4=hf7780a4_0 -- vtk=7.1.1=py27h56fd973_0 -- xalan-c=1.11=h1922a5c_0 -- xerces-c=3.1.4=h10f7eb2_0 -prefix: /Users/krodriguez-pr/anaconda3/envs/isisdeps - -- GitLab From 215d2973c9f1ffb099b0f03131bea0511b38fbae Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 16:23:46 -0700 Subject: [PATCH 095/620] updated env --- environment.yml | 64 ++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/environment.yml b/environment.yml index 4b52026d8b..4931b9b0e2 100644 --- a/environment.yml +++ b/environment.yml @@ -69,39 +69,37 @@ dependencies: - sqlite=3.20.1=2 - suitesparse=4.5.4=blas_openblas_200 - superlu=5.2.1=blas_openblas_201 - - tk=8.6.7=0 - - wheel=0.30.0=py27_2 - - x264=20131217=3 - - xorg-kbproto=1.0.7=1 - - xorg-libx11=1.6.4=6 - - xorg-libxau=1.0.8=3 - - xorg-libxdmcp=1.1.2=3 - - xorg-xproto=7.0.31=6 + - tk=8.6.7 + - wheel=0.30.0 + - x264=20131217 + - xorg-kbproto=1.0.7 + - xorg-libx11=1.6.4 + - xorg-libxau=1.0.8 + - xorg-libxdmcp=1.1.2 + - xorg-xproto=7.0.31 - xz=5.2.3=0 - zlib=1.2.11=0 - - ca-certificates=2017.08.26=ha1e5d58_0 - - certifi=2018.1.18=py27_0 - - gsl=2.2.1=h002c638_3 - - libcxx=4.0.1=h579ed51_0 - - libcxxabi=4.0.1=hebd6815_0 - - mysql=5.7.20=h14d89c2_0 - - openblas=0.2.19=1 - - openssl=1.0.2n=hdbc3d79_0 - - qt=5.6.2=h9975529_14 - - isisdeps=7=0 - - bullet=2.86.1=he2aa7b0_0 - - ds9=7.5=h35e3669_0 - - embree=2.16.0=h6834224_0 - - gmm=5.0=h6aef312_0 - - jama=125=hf0e5908_0 - - naif=n0066=h90cdba2_0 - - patchelf=0.9=h879b6ae_0 - - pcl=1.8.1=h7a71350_0 - - qhull=7.2.0=h396fa31_0 - - tbb=4.4=hf7780a4_0 - - tnt=126=h520b23f_0 - - vtk=7.1.1=py27h56fd973_0 - - xalan-c=1.11=h1922a5c_0 - - xerces-c=3.1.4=h10f7eb2_0 -prefix: /Users/krodriguez/anaconda3/envs/isisdeps + - ca-certificates=2017.08.26 + - certifi=2018.1.18 + - gsl=2.2.1 + - libcxx=4.0.1 + - libcxxabi=4.0.1 + - mysql=5.7.20 + - openblas=0.2.19 + - openssl=1.0.2n + - qt=5.6.2 + - bullet=2.86.1 + - ds9=7.5 + - embree=2.16.0 + - gmm=5.0 + - jama=125 + - naif=n0066 + - patchelf=0.9 + - pcl=1.8.1 + - qhull=7.2.0 + - tbb=4.4 + - tnt=126 + - vtk=7.1.1 + - xalan-c=1.11 + - xerces-c=3.1.4 -- GitLab From 3a5507839e9252a706e73988c5bb65ea9ea0fa93 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 18:12:48 -0700 Subject: [PATCH 096/620] env --- environment.yml | 201 ++++++++++++++++++++++++------------------------ 1 file changed, 100 insertions(+), 101 deletions(-) diff --git a/environment.yml b/environment.yml index 4931b9b0e2..18e7b742a7 100644 --- a/environment.yml +++ b/environment.yml @@ -1,105 +1,104 @@ name: isisdeps channels: - - anaconda - - mgckind - - jlaura - - defaults - - conda-forge - - krodriguez - - usgs-astrogeology +- anaconda +- inria-pro-sed +- krodriguez +- conda-forge +- usgs-astrogeology +- defaults dependencies: - - geotiff=1.4.1=0 - - libgcc=4.8.5=1 - - proj4=4.9.2=0 - - blas=1.1=openblas - - boost=1.65.1=py27_0 - - boost-cpp=1.65.1=1 - - bzip2=1.0.6=1 - - cairo=1.14.6=4 - - cmake=3.9.1=0 - - cspice=66=0 - - curl=7.55.1=0 - - doxygen=1.8.14=0 - - eigen=3.3.3=0 - - expat=2.2.5=0 - - ffmpeg=3.2.4=3 - - flann=1.8.4=0 - - fontconfig=2.12.1=4 - - freetype=2.7=1 - - geos=3.5.1=1 - - gettext=0.19.8.1=0 - - giflib=5.1.4=0 - - glib=2.51.4=0 - - harfbuzz=1.3.4=2 - - hdf5=1.8.18=2 - - icu=58.2=0 - - jasper=1.900.1=4 - - jpeg=9b=2 - - krb5=1.14.2=0 - - lapack=3.6.1=1 - - libffi=3.2.1=3 - - libgfortran=3.0.0=0 - - libiconv=1.15=0 - - libpng=1.6.34=0 - - libssh2=1.8.0=2 - - libtiff=4.0.6=7 - - libuv=1.11.0=0 - - libwebp=0.5.2=7 - - libxcb=1.12=1 - - libxml2=2.9.7=0 - - m4=1.4.17=1 - - metis=5.1.0=3 - - mysql-connector-c=6.1.6=0 - - nanoflann=1.2.2=0 - - ncurses=5.9=10 - - ninja=1.7.2=0 - - nn=1.86.0=2 - - numpy=1.13.3=py27_blas_openblas_200 - - opencv=3.3.0=py27_blas_openblas_200 - - pcre=8.39=0 - - pip=9.0.1=py27_1 - - pixman=0.34.0=1 - - protobuf=3.2.0=py27_0 - - python=2.7.14=4 - - qwt=6.1.3=1 - - readline=7.0=0 - - rhash=1.3.4=0 - - setuptools=38.5.1=py27_0 - - six=1.11.0=py27_1 - - sqlite=3.20.1=2 - - suitesparse=4.5.4=blas_openblas_200 - - superlu=5.2.1=blas_openblas_201 - - tk=8.6.7 - - wheel=0.30.0 - - x264=20131217 - - xorg-kbproto=1.0.7 - - xorg-libx11=1.6.4 - - xorg-libxau=1.0.8 - - xorg-libxdmcp=1.1.2 - - xorg-xproto=7.0.31 - - xz=5.2.3=0 - - zlib=1.2.11=0 - - ca-certificates=2017.08.26 - - certifi=2018.1.18 - - gsl=2.2.1 - - libcxx=4.0.1 - - libcxxabi=4.0.1 - - mysql=5.7.20 - - openblas=0.2.19 - - openssl=1.0.2n - - qt=5.6.2 - - bullet=2.86.1 - - ds9=7.5 - - embree=2.16.0 - - gmm=5.0 - - jama=125 - - naif=n0066 - - patchelf=0.9 - - pcl=1.8.1 - - qhull=7.2.0 - - tbb=4.4 - - tnt=126 - - vtk=7.1.1 - - xalan-c=1.11 - - xerces-c=3.1.4 +- libgcc=4.8.5=1 +- blas=1.1=openblas +- boost=1.65.1=py27_0 +- boost-cpp=1.65.1=1 +- bzip2=1.0.6=1 +- ca-certificates=2018.1.18=0 +- cairo=1.14.6=4 +- certifi=2018.1.18=py27_0 +- cmake=3.9.1=0 +- cspice=66=0 +- curl=7.55.1=0 +- dbus=1.10.22=0 +- doxygen=1.8.14=0 +- eigen=3.3.3=0 +- expat=2.2.5=0 +- ffmpeg=3.2.4=3 +- flann=1.8.4=0 +- fontconfig=2.12.1=4 +- freetype=2.7=1 +- geos=3.5.1=1 +- geotiff=1.4.2=1 +- gettext=0.19.8.1=0 +- giflib=5.1.4=0 +- glib=2.51.4=0 +- gsl=2.2.1=blas_openblas_3 +- harfbuzz=1.3.4=2 +- hdf5=1.8.18=3 +- icu=58.2=0 +- jasper=1.900.1=4 +- jpeg=9b=2 +- krb5=1.14.2=0 +- lapack=3.6.1=1 +- libffi=3.2.1=3 +- libgfortran=3.0.0=0 +- libiconv=1.15=0 +- libpng=1.6.28=2 +- libssh2=1.8.0=2 +- libtiff=4.0.9=0 +- libuv=1.11.0=0 +- libwebp=0.5.2=7 +- libxcb=1.12=1 +- libxml2=2.9.7=0 +- m4=1.4.17=1 +- metis=5.1.0=3 +- nanoflann=1.2.2=0 +- ncurses=5.9=10 +- ninja=1.7.2=0 +- nn=1.86.0=2 +- numpy=1.13.3=py27_blas_openblas_200 +- openblas=0.2.19=2 +- opencv=3.3.0=py27_blas_openblas_200 +- openssl=1.0.2n=0 +- pcre=8.39=0 +- pip=9.0.1=py27_1 +- pixman=0.34.0=1 +- proj4=4.9.3=5 +- protobuf=3.2.0=py27_0 +- python=2.7.14=4 +- qt=5.6.2=h9e3eb04_4 +- qwt=6.1.3=1 +- readline=7.0=0 +- rhash=1.3.4=0 +- setuptools=38.5.1=py27_0 +- six=1.11.0=py27_1 +- sqlite=3.20.1=2 +- suitesparse=4.5.4=blas_openblas_200 +- superlu=5.2.1=blas_openblas_201 +- tk=8.6.7=0 +- wheel=0.30.0=py27_2 +- x264=20131217=3 +- xorg-kbproto=1.0.7=1 +- xorg-libx11=1.6.4=6 +- xorg-libxau=1.0.8=3 +- xorg-libxdmcp=1.1.2=3 +- xorg-xproto=7.0.31=6 +- xz=5.2.3=0 +- zlib=1.2.11=0 +- openmpi=1.8.6=4 +- parmetis=4.0.3p2=1 +- jama=125=0 +- tnt=126=0 +- bullet=2.86.1=he2aa7b0_0 +- ds9=7.5=h35e3669_0 +- embree=2.16.0=h6834224_0 +- gmm=5.0=h6aef312_0 +- naif=n0066=h90cdba2_0 +- patchelf=0.9=h879b6ae_0 +- pcl=1.8.1=h7a71350_0 +- qhull=7.2.0=h396fa31_0 +- tbb=4.4=hf7780a4_0 +- vtk=7.1.1=py27h56fd973_0 +- xalan-c=1.11=h1922a5c_0 +- xerces-c=3.1.4=h10f7eb2_0 +prefix: /Users/krodriguez-pr/anaconda3/envs/isisdeps -- GitLab From 553761bd693ca9f2eb64fda53ed07342d6487f77 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 7 Mar 2018 18:34:52 -0700 Subject: [PATCH 097/620] env4daaaayyzzz --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 18e7b742a7..93c08c5f1f 100644 --- a/environment.yml +++ b/environment.yml @@ -92,7 +92,7 @@ dependencies: - ds9=7.5=h35e3669_0 - embree=2.16.0=h6834224_0 - gmm=5.0=h6aef312_0 -- naif=n0066=h90cdba2_0 +- naif=n0066 - patchelf=0.9=h879b6ae_0 - pcl=1.8.1=h7a71350_0 - qhull=7.2.0=h396fa31_0 -- GitLab From 91b2cdbd1f36f75e5a8cf54a2e20de2779bd622b Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Thu, 8 Mar 2018 20:34:08 -0700 Subject: [PATCH 098/620] getting conda working for linux --- isis/cmake/FindAllDependencies.cmake | 18 +++++++++--------- isis/cmake/FindCSPICE.cmake | 2 +- .../objs/QIsisApplication/QIsisApplication.cpp | 10 +--------- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 361eeeb38d..a280729090 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -1,15 +1,15 @@ -#=============================================================================== +#============================================================================== # 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? #=============================================================================== message("CONDA PREFIX: $ENV{CONDA_PREFIX}") -set(CMAKE_LIBRARY_PATH $ENV{$CONDA_PREFIX}) -set(CMAKE_INCLUDE_PATH $ENV{$CONDA_PREFIX}) +list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) +message("Test: ${CMAKE_FIND_ROOT_PATH}") # Add thirdPartyCppFlags -set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) +set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals -DGMM_USES_SUPERLU) set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") # Paths to required executables @@ -42,9 +42,9 @@ find_package(Qt5 COMPONENTS Sql Svg Test - WebChannel - WebEngine - WebEngineWidgets + WebChannel + WebKit + WebKitWidgets Widgets Xml XmlPatterns REQUIRED) @@ -74,15 +74,15 @@ find_package(TIFF 4.0.5 REQUIRED) # "tiff/tiff-${TIFF_FIND_VERSION}" find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 directory is "tnt/tnt126/" find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" find_package(X11 6 REQUIRED) -find_package(OpenGL REQUIRED) find_package(nanoflann REQUIRED) -find_package(png REQUIRED) +find_package(PNG REQUIRED) find_package(Kakadu) # v007 might have different versions installed for our mac and linux systems. # Im this case, we specify the version numbers being searched for in the non-traditional installs. if(APPLE) find_package(Geos 3.5.0 REQUIRED) + find_package(OpenGL REQUIRED) else(APPLE) find_package(Geos 3.5.1 REQUIRED) endif(APPLE) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index 263d535b27..78f1af260b 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -7,7 +7,7 @@ find_path(CSPICE_INCLUDE_DIR NAME SpiceUsr.h - PATH_SUFFIXES naif + PATH_SUFFIXES naif cspice ) find_library(CSPICE_LIBRARY diff --git a/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp b/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp index 6881dfa2c7..7cc2c8218b 100644 --- a/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp +++ b/isis/src/qisis/objs/QIsisApplication/QIsisApplication.cpp @@ -7,11 +7,6 @@ #include #include #include -#if defined(__APPLE__) -#include -#else -#include -#endif #include "FileName.h" #include "Preference.h" @@ -92,9 +87,6 @@ namespace Isis { * Open a URL in the browser specified by Isis. */ void QIsisApplication::openUrl(QUrl url) { - QWebEngineView *view = new QWebEngineView(NULL); - view->setAttribute(Qt::WA_DeleteOnClose); - view->load(url); - view->show(); + QDesktopServices::openUrl(url); } } -- GitLab From 7429e73a949d7dc68c2c03256e7179a0aa3b6c20 Mon Sep 17 00:00:00 2001 From: Cole <34170587+cneubauerUSGS@users.noreply.github.com> Date: Fri, 9 Mar 2018 14:34:26 -0700 Subject: [PATCH 099/620] Moved find_package(OpenGL) to only be executed while building on apple (#27) --- isis/cmake/FindAllDependencies.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index d0b21c05dd..dfdac8a666 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -76,6 +76,7 @@ find_package(Geos 3.5.0 REQUIRED) if(APPLE) + find_package(OpenGL REQUIRED) find_package(Qt5 COMPONENTS Core Concurrent @@ -182,9 +183,9 @@ find_package(TIFF 4.0.5 REQUIRED) # "tiff/tiff-${TIFF_FIND_VERSION}" find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 directory is "tnt/tnt126/" find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" find_package(X11 6 REQUIRED) -find_package(OpenGL REQUIRED) find_package(Kakadu) + # v007 might have different versions installed for our mac and linux systems. # Im this case, we specify the version numbers being searched for in the non-traditional installs. if(APPLE) -- GitLab From e2a10b61b749d138ba35ed1625f34000507cc96c Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Mon, 12 Mar 2018 10:05:32 -0700 Subject: [PATCH 100/620] removed useless import --- .../FeatureNomenclatureTool/FeatureNomenclatureTool.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp b/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp index 9ca163bb90..eaebf02581 100644 --- a/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp +++ b/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp @@ -17,11 +17,8 @@ #include #include #include -#if defined(__APPLE__) -#include -#else -#include -#endif +#include +#include #include #include -- GitLab From ee6aadbe007d042dd716453d4761e076d960a72b Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Mon, 12 Mar 2018 10:37:19 -0700 Subject: [PATCH 101/620] QtDBUS Garbage --- .../src/base/objs/Environment/Environment.cpp | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/isis/src/base/objs/Environment/Environment.cpp b/isis/src/base/objs/Environment/Environment.cpp index 4486c5e693..c84d1557c4 100644 --- a/isis/src/base/objs/Environment/Environment.cpp +++ b/isis/src/base/objs/Environment/Environment.cpp @@ -7,10 +7,6 @@ #include #include -#ifndef __APPLE__ -#include -#endif - #include "IException.h" #include "IString.h" #include "TextFile.h" @@ -61,33 +57,6 @@ namespace Isis { QCoreApplication::setLibraryPaths(pluginPaths); } #endif - -#ifndef __APPLE__ - // We need to force the correct QDBus library to be loaded... to do that, just - // use a symbol in it's library. This only applies to linux and fixes #1228. - - // Long explanation: - // When we run GUI apps, the system (and Qt) work together to figure out - // which runtime libraries are necessary on-the-fly. When QApplication is - // instantiated, it goes into QtGui's style code. The styles ignore our plugin - // path setting (above) on all OS's. So Qt GUI grabs a style from the OS's styles, - // which is a shared library in the kde area. These styles require a version (any version) - // of QtDBus loaded. If QtDBus is not yet loaded, then the style library will grab it. - // However, on Ubuntu 12.04, the style library grabs the system (OS) QDBus library. QDBus - // detects that you've already loaded Isis' QtCore, so the library versions mismatch, and - // it crashes. The problem becomes more interesting because sometimes it picks up the system - // QDBus, and sometimes it picks up Isis' QDBus, and I have no good reason why we pick up - // one versus another; currently, installed apps pick up the system and locally built apps - // pick up Isis' (even when the executables are made to be identical). The end result is no - // installed GUI applications will run and our automated tests fail to catch it. This solution - // bypasses the entire issue by forcing QDBus to be loaded long before any styles are loaded, - // so the style plugins do not need to go and get their own QDBus library. - // - // The root cause is that Ubuntu's run time loader is failing to respect - // our executable's rpaths when loading a style library. However, when we link against the - // QBus library directly, we get the right one. - QDBusArgument(); -#endif } -- GitLab From ce338b1919d6ac7384fbb4abd4ce8e8857ce5692 Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Mon, 12 Mar 2018 11:35:29 -0700 Subject: [PATCH 102/620] explicit spec file for linux --- linux-spec.txt | 245 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 linux-spec.txt diff --git a/linux-spec.txt b/linux-spec.txt new file mode 100644 index 0000000000..69f6094d0d --- /dev/null +++ b/linux-spec.txt @@ -0,0 +1,245 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +@EXPLICIT +https://repo.continuum.io/pkgs/main/linux-64/_ipyw_jlab_nb_ext_conf-0.1.0-py36he11e457_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/alabaster-0.7.10-py36h306e16b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/anaconda-5.1.0-py36_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/anaconda-client-1.6.9-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/anaconda-navigator-1.7.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/anaconda-project-0.8.2-py36h44fb852_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/asn1crypto-0.24.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/astroid-1.6.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/astropy-2.0.3-py36h14c3975_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/attrs-17.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/babel-2.5.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/backports-1.0-py36hfa02d7e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/backports.shutil_get_terminal_size-1.0.0-py36hfea85ff_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/beautifulsoup4-4.6.0-py36h49b8c8c_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/bitarray-0.8.1-py36h14c3975_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/bkcharts-0.2-py36h735825a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/blaze-0.11.3-py36h4e06776_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/bleach-2.1.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/bokeh-0.12.13-py36h2f9c1c0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/boto-2.48.0-py36h6e4cd66_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/bottleneck-1.2.1-py36haac1ea0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/bzip2-1.0.6-h9a117a8_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cairo-1.14.12-h77bcde2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cffi-1.11.4-py36h9745a5d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/chardet-3.0.4-py36h0f667ec_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/click-6.7-py36h5253387_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cloudpickle-0.5.2-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/clyent-1.2.2-py36h7e57e65_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/colorama-0.3.9-py36h489cec4_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/conda-4.3.34-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/conda-build-3.4.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/conda-env-2.6.0-h36134e3_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/conda-verify-2.0.0-py36h98955d8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/contextlib2-0.5.5-py36h6c84a62_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cryptography-2.1.4-py36hd09be54_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/curl-7.58.0-h84994c4_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cycler-0.10.0-py36h93f1223_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cython-0.27.3-py36h1860423_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cytoolz-0.9.0-py36h14c3975_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/dask-0.16.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/dask-core-0.16.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/datashape-0.5.4-py36h3ad6b5c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/dbus-1.12.2-hc3f9b76_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/decorator-4.2.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/distributed-1.20.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/docutils-0.14-py36hb0f60f5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/entrypoints-0.2.3-py36h1aec115_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/et_xmlfile-1.0.1-py36hd6bccc3_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/expat-2.2.5-he0dffb1_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/fastcache-1.0.2-py36h14c3975_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/filelock-2.0.13-py36h646ffb5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/flask-0.12.2-py36hb24657c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/flask-cors-3.0.3-py36h2d857d3_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/fontconfig-2.12.4-h88586e7_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/freetype-2.8-hab7d2ae_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/get_terminal_size-1.0.0-haa9412d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/gevent-1.2.2-py36h2fe25dc_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/glib-2.53.6-h5d9569c_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/glob2-0.6-py36he249c77_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/gmp-6.1.2-h6c8ec71_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/gmpy2-2.0.8-py36hc8893dd_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/graphite2-1.3.10-hf63cedd_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/greenlet-0.4.12-py36h2d503a6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/gst-plugins-base-1.12.4-h33fb286_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/gstreamer-1.12.4-hb53b477_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/h5py-2.7.1-py36h3585f63_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/harfbuzz-1.7.4-hc5b324e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/hdf5-1.10.1-h9caa474_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/heapdict-1.0.0-py36_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/html5lib-1.0.1-py36h2f9c1c0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/icu-58.2-h9c2bf20_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/idna-2.6-py36h82fb2a8_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/imageio-2.2.0-py36he555465_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/imagesize-0.7.1-py36h52d8127_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/intel-openmp-2018.0.0-hc7b2577_8.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ipykernel-4.8.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ipython-6.2.1-py36h88c514a_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ipython_genutils-0.2.0-py36hb52b0d5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ipywidgets-7.1.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/isort-4.2.15-py36had401c0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/itsdangerous-0.24-py36h93cc618_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jbig-2.1-hdba287a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jdcal-1.3-py36h4c697fb_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jedi-0.11.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jinja2-2.10-py36ha16c418_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jpeg-9b-h024ee3a_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jsonschema-2.6.0-py36h006f8b5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jupyter-1.0.0-py36_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jupyter_client-5.2.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jupyter_console-5.2.0-py36he59e554_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jupyter_core-4.4.0-py36h7c827e3_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jupyterlab-0.31.5-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/jupyterlab_launcher-0.10.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/lazy-object-proxy-1.3.1-py36h10fcdad_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libcurl-7.58.0-h1ad7b7a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libedit-3.1-heed3624_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libffi-3.2.1-hd88cf55_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libgfortran-ng-7.2.0-h9f7466a_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libpng-1.6.34-hb9fc6fc_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libsodium-1.0.15-hf101ebd_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libssh2-1.8.0-h9cfc8f7_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libtiff-4.0.9-h28f6b97_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libtool-2.4.6-h544aabb_3.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libxcb-1.12-hcd93eb1_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libxml2-2.9.7-h26e45fe_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/libxslt-1.1.32-h1312cb7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/llvmlite-0.21.0-py36ha241eea_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/locket-0.2.0-py36h787c0ad_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/lxml-4.1.1-py36hf71bdeb_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/lzo-2.10-h49e0be7_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/markupsafe-1.0-py36hd9260cd_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/matplotlib-2.1.2-py36h0e671d2_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mccabe-0.6.1-py36h5ad9710_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mistune-0.8.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mkl-2018.0.1-h19d6760_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mkl-service-1.1.2-py36h17a0993_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mpc-1.0.3-hec55b23_5.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mpfr-3.1.5-h11a74b3_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/mpmath-1.0.0-py36hfeacd6b_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/msgpack-python-0.5.1-py36h6bb024c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/multipledispatch-0.4.9-py36h41da3fb_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/navigator-updater-0.1.0-py36h14770f7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/nbconvert-5.3.1-py36hb41ffb7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/nbformat-4.4.0-py36h31c9010_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ncurses-6.0-h9df7e31_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/networkx-2.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/nltk-3.2.5-py36h7532b22_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/nose-1.3.7-py36hcdf7029_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/notebook-5.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/numba-0.36.2-np114py36hc6662d5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/numexpr-2.6.4-py36hc4a3f9a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/numpy-1.14.0-py36h3dfced4_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/numpydoc-0.7.0-py36h18f165f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/odo-0.5.1-py36h90ed295_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/olefile-0.45.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/openpyxl-2.4.10-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/openssl-1.0.2n-hb7f436b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/packaging-16.8-py36ha668100_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pandas-0.22.0-py36hf484d3e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pandoc-1.19.2.1-hea2e7c5_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pandocfilters-1.4.2-py36ha6701b7_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pango-1.41.0-hd475d92_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/parso-0.1.1-py36h35f843b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/partd-0.3.8-py36h36fd896_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/path.py-10.5-py36h55ceabb_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pathlib2-2.3.0-py36h49efa8e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/patsy-0.5.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pcre-8.41-hc27e229_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pep8-1.7.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pexpect-4.3.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pickleshare-0.7.4-py36h63277f8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pillow-5.0.0-py36h3deb7b8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pip-9.0.1-py36h6c6f9ce_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pixman-0.34.0-hceecf20_3.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pkginfo-1.4.1-py36h215d178_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pluggy-0.6.0-py36hb689045_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ply-3.10-py36hed35086_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/prompt_toolkit-1.0.15-py36h17d85b1_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/psutil-5.4.3-py36h14c3975_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ptyprocess-0.5.2-py36h69acd42_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/py-1.5.2-py36h29bf505_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pycodestyle-2.3.1-py36hf609f19_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pycosat-0.6.3-py36h0a5515d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pycparser-2.18-py36hf9f622e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pycrypto-2.6.1-py36h14c3975_7.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pycurl-7.43.0.1-py36hb7f436b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyflakes-1.6.0-py36h7bd6a15_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pygments-2.2.0-py36h0d3125c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pylint-1.8.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyodbc-4.0.22-py36hf484d3e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyopenssl-17.5.0-py36h20ba746_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyparsing-2.2.0-py36hee85983_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyqt-5.6.0-py36h0386399_5.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pysocks-1.6.7-py36hd97a5b1_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pytables-3.4.2-py36h3b5282a_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pytest-3.3.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/python-3.6.4-hc3d631a_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/python-dateutil-2.6.1-py36h88d3b88_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pytz-2017.3-py36h63b9c63_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pywavelets-0.5.2-py36he602eb0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyyaml-3.12-py36hafb9ca4_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/pyzmq-16.0.3-py36he2533c7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/qt-5.6.2-h974d657_12.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/qtawesome-0.4.4-py36h609ed8c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/qtconsole-4.3.1-py36h8f73b5b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/qtpy-1.3.1-py36h3691cc8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/readline-7.0-ha6073c6_4.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/requests-2.18.4-py36he2e5f8d_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/rope-0.10.7-py36h147e2ec_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/ruamel_yaml-0.15.35-py36h14c3975_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/scikit-image-0.13.1-py36h14c3975_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/scikit-learn-0.19.1-py36h7aa7ec6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/scipy-1.0.0-py36hbf646e7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/seaborn-0.8.1-py36hfad7ec4_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/send2trash-1.4.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/setuptools-38.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/simplegeneric-0.8.1-py36_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/singledispatch-3.4.0.3-py36h7a266c3_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sip-4.18.1-py36h51ed4ed_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/six-1.11.0-py36h372c433_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/snowballstemmer-1.2.1-py36h6febd40_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sortedcollections-0.5.3-py36h3c761f9_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sortedcontainers-1.5.9-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sphinx-1.6.6-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sphinxcontrib-1.0-py36h6d0f590_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sphinxcontrib-websupport-1.0.1-py36hb5cb234_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/spyder-3.2.6-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sqlalchemy-1.2.1-py36h14c3975_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sqlite-3.22.0-h1bed415_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/statsmodels-0.8.0-py36h8533d0b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/sympy-1.1.1-py36hc6d1c1c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/tblib-1.3.2-py36h34cf8b6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/terminado-0.8.1-py36_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/testpath-0.3.1-py36h8cadb63_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/tk-8.6.7-hc745277_3.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/toolz-0.9.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/tornado-4.5.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/traitlets-4.3.2-py36h674d592_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/typing-3.6.2-py36h7da032a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/unicodecsv-0.14.1-py36ha668878_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/unixodbc-2.3.4-hc36303a_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/urllib3-1.22-py36hbe7ace6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/wcwidth-0.1.7-py36hdf4376a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/webencodings-0.5.1-py36h800622e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/werkzeug-0.14.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/wheel-0.30.0-py36hfd4bba0_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/widgetsnbextension-3.1.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/wrapt-1.10.11-py36h28b7045_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/xlrd-1.1.0-py36h1db9f0c_1.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/xlsxwriter-1.0.2-py36h3de1aca_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/xlwt-1.3.0-py36h7b00a1f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/xz-5.2.3-h55aa19d_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/yaml-0.1.7-had09818_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/zeromq-4.2.2-hbedb6e5_2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/zict-0.1.3-py36h3a3bf81_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/zlib-1.2.11-ha838bed_2.tar.bz2 -- GitLab From e088aa697c739fd50245a5ff6a5ea1b0d97deb7f Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Mon, 12 Mar 2018 11:59:28 -0700 Subject: [PATCH 103/620] linux spec is up --- linux-spec.txt | 355 ++++++++++++++++--------------------------------- 1 file changed, 114 insertions(+), 241 deletions(-) diff --git a/linux-spec.txt b/linux-spec.txt index 69f6094d0d..15545fa82f 100644 --- a/linux-spec.txt +++ b/linux-spec.txt @@ -2,244 +2,117 @@ # $ conda create --name --file # platform: linux-64 @EXPLICIT -https://repo.continuum.io/pkgs/main/linux-64/_ipyw_jlab_nb_ext_conf-0.1.0-py36he11e457_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/alabaster-0.7.10-py36h306e16b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/anaconda-5.1.0-py36_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/anaconda-client-1.6.9-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/anaconda-navigator-1.7.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/anaconda-project-0.8.2-py36h44fb852_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/asn1crypto-0.24.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/astroid-1.6.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/astropy-2.0.3-py36h14c3975_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/attrs-17.4.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/babel-2.5.3-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/backports-1.0-py36hfa02d7e_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/backports.shutil_get_terminal_size-1.0.0-py36hfea85ff_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/beautifulsoup4-4.6.0-py36h49b8c8c_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/bitarray-0.8.1-py36h14c3975_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/bkcharts-0.2-py36h735825a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/blaze-0.11.3-py36h4e06776_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/bleach-2.1.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/bokeh-0.12.13-py36h2f9c1c0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/boto-2.48.0-py36h6e4cd66_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/bottleneck-1.2.1-py36haac1ea0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/bzip2-1.0.6-h9a117a8_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cairo-1.14.12-h77bcde2_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cffi-1.11.4-py36h9745a5d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/chardet-3.0.4-py36h0f667ec_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/click-6.7-py36h5253387_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cloudpickle-0.5.2-py36_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/clyent-1.2.2-py36h7e57e65_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/colorama-0.3.9-py36h489cec4_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/conda-4.3.34-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/conda-build-3.4.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/conda-env-2.6.0-h36134e3_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/conda-verify-2.0.0-py36h98955d8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/contextlib2-0.5.5-py36h6c84a62_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cryptography-2.1.4-py36hd09be54_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/curl-7.58.0-h84994c4_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cycler-0.10.0-py36h93f1223_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cython-0.27.3-py36h1860423_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cytoolz-0.9.0-py36h14c3975_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/dask-0.16.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/dask-core-0.16.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/datashape-0.5.4-py36h3ad6b5c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/dbus-1.12.2-hc3f9b76_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/decorator-4.2.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/distributed-1.20.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/docutils-0.14-py36hb0f60f5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/entrypoints-0.2.3-py36h1aec115_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/et_xmlfile-1.0.1-py36hd6bccc3_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/expat-2.2.5-he0dffb1_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/fastcache-1.0.2-py36h14c3975_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/filelock-2.0.13-py36h646ffb5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/flask-0.12.2-py36hb24657c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/flask-cors-3.0.3-py36h2d857d3_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/fontconfig-2.12.4-h88586e7_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/freetype-2.8-hab7d2ae_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/get_terminal_size-1.0.0-haa9412d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/gevent-1.2.2-py36h2fe25dc_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/glib-2.53.6-h5d9569c_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/glob2-0.6-py36he249c77_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/gmp-6.1.2-h6c8ec71_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/gmpy2-2.0.8-py36hc8893dd_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/graphite2-1.3.10-hf63cedd_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/greenlet-0.4.12-py36h2d503a6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/gst-plugins-base-1.12.4-h33fb286_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/gstreamer-1.12.4-hb53b477_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/h5py-2.7.1-py36h3585f63_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/harfbuzz-1.7.4-hc5b324e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/hdf5-1.10.1-h9caa474_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/heapdict-1.0.0-py36_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/html5lib-1.0.1-py36h2f9c1c0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/icu-58.2-h9c2bf20_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/idna-2.6-py36h82fb2a8_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/imageio-2.2.0-py36he555465_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/imagesize-0.7.1-py36h52d8127_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/intel-openmp-2018.0.0-hc7b2577_8.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ipykernel-4.8.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ipython-6.2.1-py36h88c514a_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ipython_genutils-0.2.0-py36hb52b0d5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ipywidgets-7.1.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/isort-4.2.15-py36had401c0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/itsdangerous-0.24-py36h93cc618_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jbig-2.1-hdba287a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jdcal-1.3-py36h4c697fb_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jedi-0.11.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jinja2-2.10-py36ha16c418_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jpeg-9b-h024ee3a_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jsonschema-2.6.0-py36h006f8b5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jupyter-1.0.0-py36_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jupyter_client-5.2.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jupyter_console-5.2.0-py36he59e554_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jupyter_core-4.4.0-py36h7c827e3_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jupyterlab-0.31.5-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/jupyterlab_launcher-0.10.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/lazy-object-proxy-1.3.1-py36h10fcdad_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libcurl-7.58.0-h1ad7b7a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libedit-3.1-heed3624_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libffi-3.2.1-hd88cf55_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libgfortran-ng-7.2.0-h9f7466a_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libpng-1.6.34-hb9fc6fc_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libsodium-1.0.15-hf101ebd_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libssh2-1.8.0-h9cfc8f7_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libtiff-4.0.9-h28f6b97_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libtool-2.4.6-h544aabb_3.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libxcb-1.12-hcd93eb1_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libxml2-2.9.7-h26e45fe_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/libxslt-1.1.32-h1312cb7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/llvmlite-0.21.0-py36ha241eea_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/locket-0.2.0-py36h787c0ad_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/lxml-4.1.1-py36hf71bdeb_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/lzo-2.10-h49e0be7_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/markupsafe-1.0-py36hd9260cd_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/matplotlib-2.1.2-py36h0e671d2_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mccabe-0.6.1-py36h5ad9710_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mistune-0.8.3-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mkl-2018.0.1-h19d6760_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mkl-service-1.1.2-py36h17a0993_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mpc-1.0.3-hec55b23_5.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mpfr-3.1.5-h11a74b3_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/mpmath-1.0.0-py36hfeacd6b_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/msgpack-python-0.5.1-py36h6bb024c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/multipledispatch-0.4.9-py36h41da3fb_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/navigator-updater-0.1.0-py36h14770f7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/nbconvert-5.3.1-py36hb41ffb7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/nbformat-4.4.0-py36h31c9010_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ncurses-6.0-h9df7e31_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/networkx-2.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/nltk-3.2.5-py36h7532b22_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/nose-1.3.7-py36hcdf7029_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/notebook-5.4.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/numba-0.36.2-np114py36hc6662d5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/numexpr-2.6.4-py36hc4a3f9a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/numpy-1.14.0-py36h3dfced4_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/numpydoc-0.7.0-py36h18f165f_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/odo-0.5.1-py36h90ed295_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/olefile-0.45.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/openpyxl-2.4.10-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/openssl-1.0.2n-hb7f436b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/packaging-16.8-py36ha668100_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pandas-0.22.0-py36hf484d3e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pandoc-1.19.2.1-hea2e7c5_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pandocfilters-1.4.2-py36ha6701b7_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pango-1.41.0-hd475d92_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/parso-0.1.1-py36h35f843b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/partd-0.3.8-py36h36fd896_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/path.py-10.5-py36h55ceabb_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pathlib2-2.3.0-py36h49efa8e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/patsy-0.5.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pcre-8.41-hc27e229_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pep8-1.7.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pexpect-4.3.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pickleshare-0.7.4-py36h63277f8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pillow-5.0.0-py36h3deb7b8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pip-9.0.1-py36h6c6f9ce_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pixman-0.34.0-hceecf20_3.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pkginfo-1.4.1-py36h215d178_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pluggy-0.6.0-py36hb689045_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ply-3.10-py36hed35086_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/prompt_toolkit-1.0.15-py36h17d85b1_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/psutil-5.4.3-py36h14c3975_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ptyprocess-0.5.2-py36h69acd42_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/py-1.5.2-py36h29bf505_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pycodestyle-2.3.1-py36hf609f19_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pycosat-0.6.3-py36h0a5515d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pycparser-2.18-py36hf9f622e_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pycrypto-2.6.1-py36h14c3975_7.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pycurl-7.43.0.1-py36hb7f436b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyflakes-1.6.0-py36h7bd6a15_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pygments-2.2.0-py36h0d3125c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pylint-1.8.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyodbc-4.0.22-py36hf484d3e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyopenssl-17.5.0-py36h20ba746_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyparsing-2.2.0-py36hee85983_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyqt-5.6.0-py36h0386399_5.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pysocks-1.6.7-py36hd97a5b1_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pytables-3.4.2-py36h3b5282a_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pytest-3.3.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/python-3.6.4-hc3d631a_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/python-dateutil-2.6.1-py36h88d3b88_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pytz-2017.3-py36h63b9c63_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pywavelets-0.5.2-py36he602eb0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyyaml-3.12-py36hafb9ca4_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/pyzmq-16.0.3-py36he2533c7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/qt-5.6.2-h974d657_12.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/qtawesome-0.4.4-py36h609ed8c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/qtconsole-4.3.1-py36h8f73b5b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/qtpy-1.3.1-py36h3691cc8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/readline-7.0-ha6073c6_4.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/requests-2.18.4-py36he2e5f8d_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/rope-0.10.7-py36h147e2ec_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/ruamel_yaml-0.15.35-py36h14c3975_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/scikit-image-0.13.1-py36h14c3975_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/scikit-learn-0.19.1-py36h7aa7ec6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/scipy-1.0.0-py36hbf646e7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/seaborn-0.8.1-py36hfad7ec4_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/send2trash-1.4.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/setuptools-38.4.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/simplegeneric-0.8.1-py36_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/singledispatch-3.4.0.3-py36h7a266c3_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sip-4.18.1-py36h51ed4ed_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/six-1.11.0-py36h372c433_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/snowballstemmer-1.2.1-py36h6febd40_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sortedcollections-0.5.3-py36h3c761f9_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sortedcontainers-1.5.9-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sphinx-1.6.6-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sphinxcontrib-1.0-py36h6d0f590_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sphinxcontrib-websupport-1.0.1-py36hb5cb234_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/spyder-3.2.6-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sqlalchemy-1.2.1-py36h14c3975_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sqlite-3.22.0-h1bed415_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/statsmodels-0.8.0-py36h8533d0b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/sympy-1.1.1-py36hc6d1c1c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/tblib-1.3.2-py36h34cf8b6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/terminado-0.8.1-py36_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/testpath-0.3.1-py36h8cadb63_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/tk-8.6.7-hc745277_3.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/toolz-0.9.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/tornado-4.5.3-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/traitlets-4.3.2-py36h674d592_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/typing-3.6.2-py36h7da032a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/unicodecsv-0.14.1-py36ha668878_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/unixodbc-2.3.4-hc36303a_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/urllib3-1.22-py36hbe7ace6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/wcwidth-0.1.7-py36hdf4376a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/webencodings-0.5.1-py36h800622e_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/werkzeug-0.14.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/wheel-0.30.0-py36hfd4bba0_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/widgetsnbextension-3.1.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/wrapt-1.10.11-py36h28b7045_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/xlrd-1.1.0-py36h1db9f0c_1.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/xlsxwriter-1.0.2-py36h3de1aca_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/xlwt-1.3.0-py36h7b00a1f_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/xz-5.2.3-h55aa19d_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/yaml-0.1.7-had09818_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/zeromq-4.2.2-hbedb6e5_2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/zict-0.1.3-py36h3a3bf81_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/zlib-1.2.11-ha838bed_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.65.1-1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/bullet-2.86.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.6-1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.14.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cloog-0.18.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cmake-3.9.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/dbus-1.10.20-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.8.14-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/ds9-7.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/eigen-3.3.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/embree-2.14.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.0.0-4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.7-1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/geos-3.5.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.4.2-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.19.8.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.1.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.51.4-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/gmm-5.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.1.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/gstreamer-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-1.3.4-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.8.18-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/icu-58.2-0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/isl-0.12.2-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/jama-125-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jasper-1.900.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jbig-2.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jpeg-9b-2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/jsoncpp-1.8.3-h3a67955_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.14.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-3.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgcc-4.8.5-1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgfortran-3.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/probcomp/linux-64/libprotobuf-2.6.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.11.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/llvmdev-5.0.0-default_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/m4-1.4.17-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mesalib-17.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mpc-1.0.3-4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-3.1.5-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/mysql-5.7.20-h55eaa98_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.6-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/nanoflann-1.2.2-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/openblas-0.2.19-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py27_blas_openblas_203.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/pcl-1.8.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pcre-8.39-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/pip-9.0.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.34.0-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/proj4-4.9.3-5.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/protobuf-2.6.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python-2.7.14-2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qhull-7.2.0-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qt-5.7.1-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qwt-6.1.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/readline-6.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/rhash-1.3.4-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.13.0-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/superlu-5.2.1-blas_openblas_201.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/system-5.8-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/tbb-4.4_20160526-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/tk-8.5.19-2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/tnt-126-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py27_mesalib_0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/wheel-0.30.0-py27h2bc6bb2_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/x264-20131217-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/xerces-c-3.1.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.8-3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.2-3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-6.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/zlib-1.2.11-0.tar.bz2 -- GitLab From c03fa2b19723a4df512ac56731531e1446537bbe Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 14 Mar 2018 10:51:18 -0700 Subject: [PATCH 104/620] added MacOS spec file --- macos-spec.txt | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 macos-spec.txt diff --git a/macos-spec.txt b/macos-spec.txt new file mode 100644 index 0000000000..f1bc190869 --- /dev/null +++ b/macos-spec.txt @@ -0,0 +1,97 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: osx-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/bullet-2.86.1-he2aa7b0_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cmake-3.9.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/embree-2.16.0-h6834224_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 +https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-h90cdba2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.2.0-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 +https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.11-0.tar.bz2 -- GitLab From 78cc257b826612e5a6b08b3d7c53473fcb130b90 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 14 Mar 2018 11:33:52 -0700 Subject: [PATCH 105/620] cleaner dependencies --- isis/cmake/FindAllDependencies.cmake | 4 +- isis/cmake/FindBoost.cmake | 4 -- isis/cmake/FindCholmod.cmake | 2 +- isis/cmake/InstallThirdParty.cmake | 13 ------- .../src/base/objs/Environment/Environment.cpp | 31 --------------- .../FeatureNomenclatureTool.cpp | 39 ++++++++----------- 6 files changed, 20 insertions(+), 73 deletions(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 361eeeb38d..d4bb522de1 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -74,15 +74,15 @@ find_package(TIFF 4.0.5 REQUIRED) # "tiff/tiff-${TIFF_FIND_VERSION}" find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 directory is "tnt/tnt126/" find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" find_package(X11 6 REQUIRED) -find_package(OpenGL REQUIRED) find_package(nanoflann REQUIRED) -find_package(png REQUIRED) +find_package(PNG REQUIRED) find_package(Kakadu) # v007 might have different versions installed for our mac and linux systems. # Im this case, we specify the version numbers being searched for in the non-traditional installs. if(APPLE) find_package(Geos 3.5.0 REQUIRED) + find_package(OpenGL REQUIRED) else(APPLE) find_package(Geos 3.5.1 REQUIRED) endif(APPLE) diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake index f374608226..47c2e1d6ba 100644 --- a/isis/cmake/FindBoost.cmake +++ b/isis/cmake/FindBoost.cmake @@ -129,10 +129,6 @@ find_library(BOOST_WAVE_MT_LIBRARY NAMES boost_wave-mt boost_wave ) -#tjw: not being linked against by ISIS presently -#find_library(BOOST_LOCAL_MT_LIBRARY -# NAMES boost_locale-mt boost_locale -#) find_library(BOOST_RANDOM_MT_LIBRARY NAMES boost_random-mt boost_random ) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index 5b2804e6c8..e60a9dd3e7 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -44,5 +44,5 @@ message( "-- FORTRAN LIB: " ${FORTRAN_LIBRARY} ) message( "-- BLAS LIB: " ${BLAS_LIBRARY} ) if(NOT APPLE) - message("LAPACK LIB" ${LAPACK_LIBRARY}) + message("-- LAPACK LIB: " ${LAPACK_LIBRARY}) endif() diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake index 895fa32c9a..29a4f01c02 100644 --- a/isis/cmake/InstallThirdParty.cmake +++ b/isis/cmake/InstallThirdParty.cmake @@ -5,21 +5,10 @@ # Library portion of the installation function(install_third_party_libs) - - # Where all the library files will go set(installLibFolder "${CMAKE_INSTALL_PREFIX}/3rdParty/lib") execute_process(COMMAND mkdir -p ${installLibFolder}) - # TEMPORARY CODE TO INSTALL ALL FILES FROM V007/lib into 3rdParty/lib - if(APPLE) - install(DIRECTORY "/opt/usgs/v007/3rdParty/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) - install(DIRECTORY "/opt/usgs/v007/ports/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) - install(DIRECTORY "/opt/usgs/v007/proprietary/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) - else() - install(DIRECTORY "/usgs/pkgs/local/v007/lib" DESTINATION ${CMAKE_INSTALL_PREFIX}) - endif() - # Loop through all the library files in our list foreach(library ${ALLLIBS}) get_filename_component(extension ${library} EXT) @@ -43,8 +32,6 @@ function(install_third_party_libs) endif(APPLE) endfunction() - - # Plugin portion of the installation function(install_third_party_plugins) diff --git a/isis/src/base/objs/Environment/Environment.cpp b/isis/src/base/objs/Environment/Environment.cpp index 4486c5e693..c84d1557c4 100644 --- a/isis/src/base/objs/Environment/Environment.cpp +++ b/isis/src/base/objs/Environment/Environment.cpp @@ -7,10 +7,6 @@ #include #include -#ifndef __APPLE__ -#include -#endif - #include "IException.h" #include "IString.h" #include "TextFile.h" @@ -61,33 +57,6 @@ namespace Isis { QCoreApplication::setLibraryPaths(pluginPaths); } #endif - -#ifndef __APPLE__ - // We need to force the correct QDBus library to be loaded... to do that, just - // use a symbol in it's library. This only applies to linux and fixes #1228. - - // Long explanation: - // When we run GUI apps, the system (and Qt) work together to figure out - // which runtime libraries are necessary on-the-fly. When QApplication is - // instantiated, it goes into QtGui's style code. The styles ignore our plugin - // path setting (above) on all OS's. So Qt GUI grabs a style from the OS's styles, - // which is a shared library in the kde area. These styles require a version (any version) - // of QtDBus loaded. If QtDBus is not yet loaded, then the style library will grab it. - // However, on Ubuntu 12.04, the style library grabs the system (OS) QDBus library. QDBus - // detects that you've already loaded Isis' QtCore, so the library versions mismatch, and - // it crashes. The problem becomes more interesting because sometimes it picks up the system - // QDBus, and sometimes it picks up Isis' QDBus, and I have no good reason why we pick up - // one versus another; currently, installed apps pick up the system and locally built apps - // pick up Isis' (even when the executables are made to be identical). The end result is no - // installed GUI applications will run and our automated tests fail to catch it. This solution - // bypasses the entire issue by forcing QDBus to be loaded long before any styles are loaded, - // so the style plugins do not need to go and get their own QDBus library. - // - // The root cause is that Ubuntu's run time loader is failing to respect - // our executable's rpaths when loading a style library. However, when we link against the - // QBus library directly, we get the right one. - QDBusArgument(); -#endif } diff --git a/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp b/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp index 9ca163bb90..69410bf7d7 100644 --- a/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp +++ b/isis/src/qisis/objs/FeatureNomenclatureTool/FeatureNomenclatureTool.cpp @@ -17,11 +17,6 @@ #include #include #include -#if defined(__APPLE__) -#include -#else -#include -#endif #include #include @@ -40,7 +35,7 @@ namespace Isis { - + /** * This instantiates a FeatureNomenclatureTool. This will read this tool's * saved settings and potentially automatically enable itself. @@ -244,7 +239,7 @@ namespace Isis { } } - + /** * Set whether to show approved features and exclude unapproved features. * @@ -262,7 +257,7 @@ namespace Isis { } } - + /** * Set whether to draw vectors from the feature center to the feature extents * on the viewport. This takes effect immediately. @@ -277,7 +272,7 @@ namespace Isis { for (int i = 0; i < m_foundNomenclature->count(); i++) { (*m_foundNomenclature)[i].applyExtentType(m_extentType); } - + nomenclaturePositionsOutdated(); foreach (MdiCubeViewport *vp, *cubeViewportList()) @@ -588,7 +583,7 @@ namespace Isis { QProgressDialog updatingFeaturesProgress( tr("Projecting Features for [%1]").arg(vp->cube()->fileName().section('/',-1)), QString(), 0, 100); - + updatingFeaturesProgress.setWindowModality(Qt::WindowModal); FeatureNomenclature::Feature feature; @@ -608,7 +603,7 @@ namespace Isis { m_findNomenclatureCheckBox->setChecked(false); break; } - + if ( !m_showApprovedOnly || (m_showApprovedOnly && feature.status() == FeatureNomenclature::Approved) ) { @@ -762,7 +757,7 @@ namespace Isis { FeatureNomenclature *searcher = new FeatureNomenclature; connect(searcher, SIGNAL(featuresIdentified(FeatureNomenclature *)), this, SLOT(featuresIdentified(FeatureNomenclature *))); - + (*m_nomenclatureSearchers)[vp] = searcher; toolStateChanged(); (*m_nomenclatureSearchers)[vp]->queryFeatures(target.toUpper(), @@ -994,7 +989,7 @@ namespace Isis { FileName config("$HOME/.Isis/qview/nomenclature.config"); QSettings settings( config.expanded(), QSettings::NativeFormat); - + m_fontSize = settings.value("fontSize", m_fontSize).toInt(); *m_fontColor = settings.value("fontColor", *m_fontColor).value(); m_defaultEnabled = @@ -1239,7 +1234,7 @@ namespace Isis { } } - + /** * Trade member data with other. This should never throw an exception. * @@ -1497,7 +1492,7 @@ namespace Isis { delete m_viewportCubeRange; m_viewportCubeRange = NULL; } - + /** * Apply the extent type to all of the features for the source viewport. @@ -1574,7 +1569,7 @@ namespace Isis { return positionList; } - + /** * Get the viewport associated with this feature display. * @@ -1585,7 +1580,7 @@ namespace Isis { return m_sourceViewport; } - + /** * Paint features onto the viewport. * @@ -1601,7 +1596,7 @@ namespace Isis { for (int i = 0; i < m_features->count() && i < m_featureScreenAreas->count(); i++) { - + FeatureNomenclature::Feature feature = (*m_features)[i].feature(); FeatureDisplayPosition pos = (*m_featureScreenAreas)[i]; QRect textArea = pos.textArea(); @@ -1662,7 +1657,7 @@ namespace Isis { vectors.append(QLine(newVectorStart, point)); } } - + foreach (QLine vector, vectors) { painter->drawLine(vector); @@ -1788,12 +1783,12 @@ namespace Isis { for (int i = 0; i < m_features->count(); i++) { FeatureNomenclature::Feature feature = (*m_features)[i].feature(); - + m_featureScreenAreas->append(FeatureDisplayPosition()); if ( !tool->m_showApprovedOnly || (tool->m_showApprovedOnly && feature.status() == FeatureNomenclature::Approved) ) { - + double sample = (*m_features)[i].center().first; double line = (*m_features)[i].center().second; @@ -1829,7 +1824,7 @@ namespace Isis { viewportX, viewportY); edgeScreenPoints.append(QPoint(viewportX, viewportY)); } - + if (tool->vectorType() != Box) { foreach (QPoint screenPoint, edgeScreenPoints) { fullDisplayArea = fullDisplayArea.united( -- GitLab From 5e03800898bd941a7099ec03bd061ca956e3a6a3 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 14 Mar 2018 12:40:45 -0700 Subject: [PATCH 106/620] updated macos-spec to remove USGS naif libs --- macos-spec.txt | 349 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 263 insertions(+), 86 deletions(-) diff --git a/macos-spec.txt b/macos-spec.txt index f1bc190869..6c73a36e31 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,96 +2,273 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT -https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/_ipyw_jlab_nb_ext_conf-0.1.0-py36h2fc01ae_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/affine-2.1.0-py_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/alabaster-0.7.10-py36h174008c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/anaconda-custom-py36ha4fed55_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/anaconda-client-1.6.5-py36h04cfe59_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/anaconda-project-0.8.0-py36h99320b2_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/appnope-0.1.0-py36hf537a9a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/appscript-1.0.1-py36h9e71e49_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/arrow-cpp-0.8.0-py36_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/asn1crypto-0.22.0-py36hb705621_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/astroid-1.5.3-py36h1333018_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/astropy-2.0.2-py36hf79c81d_4.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/babel-2.5.0-py36h9f161ff_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/backports-1.0-py36ha3c1827_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/backports.shutil_get_terminal_size-1.0.0-py36hd7a2ee4_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/beautifulsoup4-4.6.0-py36h72d3c9f_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/bitarray-0.8.1-py36h20fa61d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/bkcharts-0.2-py36h073222e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/blaze-0.11.3-py36h02e7a37_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/bleach-2.0.0-py36h8fcea71_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/bokeh-0.12.10-py36hfd5be35_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/bullet-2.86.1-he2aa7b0_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cmake-3.9.1-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/boto-2.48.0-py36hdbc59ac_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/bottleneck-1.2.1-py36hbd380ad_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/bzip2-1.0.6-h92991f9_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ca-certificates-2017.08.26-ha1e5d58_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.10-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/certifi-2017.7.27.1-py36hd973bb6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/cffi-1.10.0-py36h880867e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/chardet-3.0.4-py36h96c241c_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/click-6.7-py36hec950be_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/click-plugins-1.0.3-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cligj-0.4.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/cloudpickle-0.4.0-py36h13b7e56_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/clyent-1.2.2-py36hae3ad88_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/colorama-0.3.9-py36hd29a30c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/conda-4.3.34-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/conda-build-3.0.27-py36hb78d8cd_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/conda-env-2.6.0-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/conda-verify-2.0.0-py36he837df3_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/contextlib2-0.5.5-py36hd66e5e7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/cryptography-2.0.3-py36h22d4226_1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/curl-7.55.1-h7601780_3.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/cycler-0.10.0-py36hfc81398_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/cython-0.26.1-py36hd51f8eb_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/cytoolz-0.8.2-py36h290905f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/dask-0.15.3-py36hc3ad2d6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/dask-core-0.15.3-py36hc0be6b7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/datashape-0.5.4-py36hfb22df8_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/embree-2.16.0-h6834224_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/decorator-4.1.2-py36h69a1b52_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/descartes-1.1.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/distributed-1.19.1-py36h4ae75d2_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/docutils-0.14-py36hbfde631_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/entrypoints-0.2.3-py36hd81d71f_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/et_xmlfile-1.0.1-py36h1315bdc_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/expat-2.2.4-h8f26bf8_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/fastcache-1.0.2-py36h8606a76_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/filelock-2.0.12-py36h0d0b4fb_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/fiona-1.7.10-py36h6a33aa8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/flask-0.12.2-py36h5658096_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/flask-cors-3.0.3-py36h7387b97_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/fontconfig-2.12.4-hffb9db1_2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.8.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freexl-1.0.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gdal-2.2.3-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geopandas-0.3.0-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geos-3.6.2-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/get_terminal_size-1.0.0-h7520d66_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/gettext-0.19.8.1-hb0f4f8b_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/gevent-1.2.2-py36ha70b9d6_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 -https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-h90cdba2_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ncurses-5.9-10.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ninja-1.7.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.55.0-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/glob2-0.5-py36h12393a9_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/gmp-6.1.2-h4a9834d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/gmpy2-2.0.8-py36h7ef02cb_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/greenlet-0.4.12-py36hf09ba7b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/h5py-2.7.0-py36h6400cee_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf4-4.2.13-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/hdf5-1.10.1-h6090a45_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/heapdict-1.0.0-py36h27a9ac6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/html5lib-0.999999999-py36h79312fd_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/icu-58.2-hea21ae5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/idna-2.6-py36h8628d0a_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/imageio-2.2.0-py36h5e01289_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/imagesize-0.7.1-py36h3495948_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/intel-openmp-2018.0.0-h68bdfb3_7.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ipykernel-4.6.1-py36h3208c25_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ipython-6.1.0-py36hf612aae_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ipython_genutils-0.2.0-py36h241746c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ipywidgets-7.0.0-py36h24d3910_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/isort-4.2.15-py36hceb2a01_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/itsdangerous-0.24-py36h49fbb8d_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jbig-2.1-h4d881f8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jdcal-1.3-py36h1986823_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jedi-0.10.2-py36h6325097_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jinja2-2.9.6-py36hde4beb4_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jpeg-9b-haccd157_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/json-c-0.12.1-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jsonschema-2.6.0-py36hb385e00_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jupyter_client-5.1.0-py36hf6c435f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jupyter_console-5.2.0-py36hccf5b1c_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jupyter_core-4.3.0-py36h93810fe_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jupyterlab-0.27.0-py36hd3092eb_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/jupyterlab_launcher-0.4.0-py36h93e02e9_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/kealib-1.4.7-4.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/lazy-object-proxy-1.3.1-py36h2fbbe47_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libcxx-4.0.1-h579ed51_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libcxxabi-4.0.1-hebd6815_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libdap4-3.18.3-2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libedit-3.1-hb4e282d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libffi-3.2.1-hd939716_3.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libgcc-4.8.5-hdbeacc1_10.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libgdal-2.2.3-2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libgfortran-3.0.1-h93005f0_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libiconv-1.15-h99df5da_5.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libkml-1.3.0-5.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libnetcdf-4.4.1.1-10.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libpng-1.6.32-hce72d48_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libpq-9.6.5-hbb47d45_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libsodium-1.0.13-hba5e272_2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libspatialindex-1.8.5-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libspatialite-4.3.0a-19.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libssh2-1.8.0-h1218725_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libtiff-4.0.8-h8cd0352_9.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtool-2.4.6-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libxml2-2.9.4-hbd0960b_5.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/libxslt-1.1.29-h95a2935_5.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/llvmlite-0.20.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/locket-0.2.0-py36hca03003_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/lxml-4.1.0-py36h8179fc0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/lzo-2.10-hb6b8854_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/markupsafe-1.0-py36h3a1e703_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/matplotlib-2.1.0-py36h5068139_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mccabe-0.6.1-py36hdaeb55d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mistune-0.7.4-py36hccd6237_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mkl-2018.0.0-h5ef208c_6.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mkl-service-1.1.2-py36h7ea6df4_4.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mpc-1.0.3-hc455b36_4.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mpfr-3.1.5-h7fa3772_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/mpmath-0.19-py36h9185fea_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/msgpack-python-0.4.8-py36h46767b2_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/multipledispatch-0.4.9-py36hc5f92b5_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/munch-2.2.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/nbconvert-5.3.1-py36h810822e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/nbformat-4.4.0-py36h827af21_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ncurses-6.0-ha932d30_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/networkx-2.0-py36hefccab9_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/nltk-3.2.4-py36h27d1ea0_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/nose-1.3.7-py36h73fae2b_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/notebook-5.0.0-py36h462289e_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/numba-0.35.0-np113py36_6.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/numexpr-2.6.2-py36h0f4f1da_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/numpy-1.13.3-py36h2cdce51_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/numpydoc-0.7.0-py36he54d08e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/odo-0.5.1-py36hc1af34a_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/olefile-0.44-py36ha08bf50_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.3.0-2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/openpyxl-2.4.8-py36he899640_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/openssl-1.0.2l-h57f3a61_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/packaging-16.8-py36he5e8135_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pandas-0.20.3-py36hd6655d8_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pandoc-1.19.2.1-ha5e8f32_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pandocfilters-1.4.2-py36h3b0b094_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/parquet-cpp-1.4.0.pre-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/partd-0.3.8-py36hf5c4cb8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/path.py-10.3.1-py36hd33c240_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pathlib2-2.3.0-py36h877a6d8_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/patsy-0.4.1-py36ha1b3fa5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pcre-8.41-h29eefc5_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pep8-1.7.0-py36hc268eb1_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pexpect-4.2.1-py36h3eac828_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pickleshare-0.7.4-py36hf512f8e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pillow-4.2.1-py36h0263179_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pip-9.0.1-py36hbd95645_3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pkginfo-1.4.1-py36h25bf955_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/plio-0.1.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ply-3.10-py36h10e714e_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/poppler-0.61.1-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/poppler-data-0.4.8-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.2.0-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 -https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.11-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/prompt_toolkit-1.0.15-py36haeda067_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.5.1-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/psutil-5.4.0-py36ha052210_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/psycopg2-2.7.3.2-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ptyprocess-0.5.2-py36he6521c3_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pvl-0.3.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/py-1.4.34-py36hecf431b_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pyarrow-0.8.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pycodestyle-2.3.1-py36h83e8646_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pycosat-0.6.2-py36h1486600_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pycparser-2.18-py36h724b2fc_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pycrypto-2.6.1-py36h72f2894_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pycurl-7.43.0-py36hdb90038_3.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pyflakes-1.6.0-py36hea45e83_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pygments-2.2.0-py36h240cd3f_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pylint-1.7.4-py36hdee9077_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pyodbc-4.0.17-py36h5478161_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pyopenssl-17.2.0-py36h5d7bf08_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pyparsing-2.2.0-py36hb281f35_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pyproj-1.9.5.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pysal-1.14.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pysocks-1.6.7-py36hfa33cec_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pytables-3.4.2-py36hfbd7ab0_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pytest-3.2.1-py36h9963153_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/python-3.6.3-h6804ab2_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/python-dateutil-2.6.1-py36h86d2abb_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/python.app-2-py36h7fe2238_6.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pytz-2017.2-py36h2e7dfbc_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pywavelets-0.5.2-py36h2710a04_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pyyaml-3.12-py36h2ba1e63_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/pyzmq-16.0.2-py36h087ffad_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/qtawesome-0.4.4-py36h468c6fb_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/qtpy-1.3.1-py36h16bb863_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/readline-7.0-h81b24a6_3.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/requests-2.18.4-py36h4516966_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/rope-0.10.5-py36h5764ad1_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/rtree-0.8.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/ruamel_yaml-0.11.14-py36h9d7ade0_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/scikit-image-0.13.0-py36h398857d_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/scikit-learn-0.19.1-py36hffbff8c_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/scipy-0.19.1-py36h3e758e1_3.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/seaborn-0.8.0-py36h74df97e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/setuptools-36.5.0-py36h2134326_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/shapely-1.6.3-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/simplegeneric-0.8.1-py36he5b5b09_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/singledispatch-3.4.0.3-py36hf20db9d_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sip-4.18.1-py36h2824476_2.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/six-1.11.0-py36h0e22d5e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/snowballstemmer-1.2.1-py36h6c7b616_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sortedcollections-0.5.3-py36he9c3ed6_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sortedcontainers-1.5.7-py36ha982688_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sphinx-1.6.3-py36hcd1b3e7_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sphinxcontrib-1.0-py36h9364dc8_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sphinxcontrib-websupport-1.0.1-py36h92f4a7a_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sqlalchemy-1.1.13-py36h156b851_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sqlite-3.20.1-h900c3b0_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/statsmodels-0.8.0-py36h9c68fc9_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/sympy-1.1.1-py36h7f3cf04_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/tblib-1.3.2-py36hda67792_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/terminado-0.6-py36h656782e_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/testpath-0.3.1-py36h625a49b_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/tk-8.6.7-hcdce994_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/toolz-0.8.2-py36h7b95164_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/tornado-4.5.2-py36h468dda9_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/traitlets-4.3.2-py36h65bd3ce_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/typing-3.6.2-py36haa2d9ef_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/unicodecsv-0.14.1-py36he531d66_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/unixodbc-2.3.4-h4cb4dde_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/urllib3-1.22-py36h68b9469_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/wcwidth-0.1.7-py36h8c6ec74_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/webencodings-0.5.1-py36h3b9701d_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/werkzeug-0.12.2-py36h168efa1_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/wheel-0.29.0-py36h3597b6d_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/widgetsnbextension-3.0.2-py36h91f43ea_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/wrapt-1.10.11-py36hc29e774_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.2.0-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/xlrd-1.1.0-py36h336f4a2_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/xlsxwriter-1.0.2-py36h3736301_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/xlwings-0.11.4-py36hc75f156_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/xlwt-1.2.0-py36h5ad1178_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/xz-5.2.3-ha24016e_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/yaml-0.1.7-hff548bb_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/zeromq-4.2.2-h131e0f7_1.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/zict-0.1.3-py36h71da714_0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/zlib-1.2.11-h60db283_1.tar.bz2 -- GitLab From b191f9e556ae67ab2acb4436e86abbd32ffbcd68 Mon Sep 17 00:00:00 2001 From: oxez Date: Thu, 15 Mar 2018 11:31:57 -0700 Subject: [PATCH 107/620] Redid system argument calls with argparser --- isis/scripts/makeOutput.py | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 2ad25a8093..214ae9e87b 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -15,6 +15,7 @@ named object.truth where object is the ISIS object being tested. The app tests output has to rely on the old make system because the app test do ''' +import argparse import sys import os @@ -25,33 +26,33 @@ if not os.environ['ISISROOT']: builddir = os.environ['ISISROOT'] -if "_unit_" in sys.argv[1]: - unitTestExecutable = sys.argv[1] +parser = argparse.ArgumentParser() +parser.add_argument('testFullName', action='store', help='Provide the name of the Test to create output of') +parser.add_argument('-t', action='store_true', default=False, help='Flag whether output is sent to truth data') - unitTestName = unitTestExecutable.split("_test_")[1] + ".truth" +if "_unit_" in parser.testFullName: + + unitTestName = parser.testFullName.split("_test_")[1] + ".truth" # we should probably append the path to the front so it ends up in # in the same directory as the test - unitTestPath = unitTestExecutable.split("/") - del unitTestPath[-1] - unitTestPath = "/".join(unitTestPath) + unitTestPath = builddir + "/unitTest/" - os.system(unitTestExecutable + ">&" + unitTestPath + "/" + unitTestName) - print("Unit Test Output In " + unitTestPath + " As " + unitTestName) + os.system(unitTestPath + unitTestExecutable + ">&" + unitTestPath + "/output/" + unitTestName) + print("Unit Test Output In " + unitTestPath + "/output/ As " + unitTestName) - if len(sys.argv) == 3: - if sys.argv[2] == "truth": - with open(builddir + "/objects/CTestTestfile.cmake") as testFile: - for line in testFile: - if unitTestName in line: - unitTestSrcPath = line.split("\" \"")[2][13:] - os.system("cp -f " + unitTestPath + "/" + unitTestName + " " + unitTestSrcPath) - break + if parser.parse_args(['-t']): + with open(builddir + "/objects/CTestTestfile.cmake") as testFile: + for line in testFile: + if unitTestName in line: + unitTestSrcPath = line.split("\" \"")[2][13:] + os.system("cp -f " + unitTestPath + "/output/" + unitTestName + " " + unitTestSrcPath) + break - print("Checked In Truth Data To " + unitTestSrcPath) + print("Checked In Truth Data To " + unitTestSrcPath) else: - apptest = sys.argv[1] + apptest = parser.testFullName makefilePath = "" with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: @@ -73,10 +74,9 @@ else: print("App Test Output In " + builddir + "/testOutputDir/truth") # check if the user wants data checked in - if len(sys.argv) == 3: - if sys.argv[2] == "truth": - os.system("make checkin") - print("Checked In Truth Data") + if parser.parse_args(['-t']): + os.system("make checkin") + print("Checked In Truth Data") # doing this instead of make release because make release # can give feedback to the user that we would rather avoid -- GitLab From 95627fc979ccd7f97c8587bbd8101b60e9fec03a Mon Sep 17 00:00:00 2001 From: oxez Date: Thu, 15 Mar 2018 11:37:00 -0700 Subject: [PATCH 108/620] Redid system argument calls with argparser --- isis/scripts/makeOutput.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 214ae9e87b..e30eba0c0a 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -31,21 +31,20 @@ parser.add_argument('testFullName', action='store', help='Provide the name of th parser.add_argument('-t', action='store_true', default=False, help='Flag whether output is sent to truth data') if "_unit_" in parser.testFullName: - unitTestName = parser.testFullName.split("_test_")[1] + ".truth" # we should probably append the path to the front so it ends up in # in the same directory as the test unitTestPath = builddir + "/unitTest/" os.system(unitTestPath + unitTestExecutable + ">&" + unitTestPath + "/output/" + unitTestName) - print("Unit Test Output In " + unitTestPath + "/output/ As " + unitTestName) + print("Unit Test Output In " + builddir + "/testOutputDir/ As " + unitTestName) if parser.parse_args(['-t']): with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: if unitTestName in line: unitTestSrcPath = line.split("\" \"")[2][13:] - os.system("cp -f " + unitTestPath + "/output/" + unitTestName + " " + unitTestSrcPath) + os.system("cp -f " + unitTestPath + "/testOutputDir/" + unitTestName + " " + unitTestSrcPath) break print("Checked In Truth Data To " + unitTestSrcPath) -- GitLab From 47add9c31d30ad1fd7603b409c1d8384fab5e95e Mon Sep 17 00:00:00 2001 From: oxez Date: Thu, 15 Mar 2018 11:43:16 -0700 Subject: [PATCH 109/620] Redid system argument calls with argparser --- isis/scripts/makeOutput.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index e30eba0c0a..36c71cfebc 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -29,9 +29,9 @@ builddir = os.environ['ISISROOT'] parser = argparse.ArgumentParser() parser.add_argument('testFullName', action='store', help='Provide the name of the Test to create output of') parser.add_argument('-t', action='store_true', default=False, help='Flag whether output is sent to truth data') - -if "_unit_" in parser.testFullName: - unitTestName = parser.testFullName.split("_test_")[1] + ".truth" +testInput = parser.parse_args(['test']) +if "_unit_" in testInput: + unitTestName = testInput.split("_test_")[1] + ".truth" # we should probably append the path to the front so it ends up in # in the same directory as the test unitTestPath = builddir + "/unitTest/" @@ -51,7 +51,7 @@ if "_unit_" in parser.testFullName: else: - apptest = parser.testFullName + apptest = testInput makefilePath = "" with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: -- GitLab From 277b8f594c860fa65769d80af1eaee9dbfd691c2 Mon Sep 17 00:00:00 2001 From: oxez Date: Thu, 15 Mar 2018 11:48:37 -0700 Subject: [PATCH 110/620] Redid system argument calls with argparser --- isis/scripts/makeOutput.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 36c71cfebc..b27e58c710 100644 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -29,7 +29,7 @@ builddir = os.environ['ISISROOT'] parser = argparse.ArgumentParser() parser.add_argument('testFullName', action='store', help='Provide the name of the Test to create output of') parser.add_argument('-t', action='store_true', default=False, help='Flag whether output is sent to truth data') -testInput = parser.parse_args(['test']) +testInput = parser.parse_args(['test']).test if "_unit_" in testInput: unitTestName = testInput.split("_test_")[1] + ".truth" # we should probably append the path to the front so it ends up in -- GitLab From 2adbb271d12a504c5f30055a99876430b5fd1b44 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Thu, 15 Mar 2018 12:15:40 -0700 Subject: [PATCH 111/620] unit test with arg parser working --- isis/scripts/makeOutput.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) mode change 100644 => 100755 isis/scripts/makeOutput.py diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py old mode 100644 new mode 100755 index b27e58c710..55846a2a82 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -27,24 +27,26 @@ if not os.environ['ISISROOT']: builddir = os.environ['ISISROOT'] parser = argparse.ArgumentParser() -parser.add_argument('testFullName', action='store', help='Provide the name of the Test to create output of') -parser.add_argument('-t', action='store_true', default=False, help='Flag whether output is sent to truth data') -testInput = parser.parse_args(['test']).test +parser.add_argument('test', action='store', help='Provide the name of the Test to create output of') +parser.add_argument('-t', action='store_true', default=False, dest='truth', help='Flag whether output is sent to truth data') +userInput = parser.parse_args() +testInput = userInput.test + if "_unit_" in testInput: unitTestName = testInput.split("_test_")[1] + ".truth" # we should probably append the path to the front so it ends up in # in the same directory as the test unitTestPath = builddir + "/unitTest/" - os.system(unitTestPath + unitTestExecutable + ">&" + unitTestPath + "/output/" + unitTestName) + os.system(unitTestPath + testInput + ">&" + builddir + "/testOutputDir/" + unitTestName) print("Unit Test Output In " + builddir + "/testOutputDir/ As " + unitTestName) - if parser.parse_args(['-t']): + if userInput.truth: with open(builddir + "/objects/CTestTestfile.cmake") as testFile: for line in testFile: if unitTestName in line: unitTestSrcPath = line.split("\" \"")[2][13:] - os.system("cp -f " + unitTestPath + "/testOutputDir/" + unitTestName + " " + unitTestSrcPath) + os.system("cp -f " + builddir + "/testOutputDir/" + unitTestName + " " + unitTestSrcPath) break print("Checked In Truth Data To " + unitTestSrcPath) -- GitLab From f81ddb27343050a0877a3a723efb204de48cee91 Mon Sep 17 00:00:00 2001 From: oxez Date: Thu, 15 Mar 2018 12:18:48 -0700 Subject: [PATCH 112/620] Argparser app test --- isis/scripts/makeOutput.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py index 55846a2a82..7686064d69 100755 --- a/isis/scripts/makeOutput.py +++ b/isis/scripts/makeOutput.py @@ -71,11 +71,11 @@ else: os.system("make output") os.system("make truthdata") os.system("rm -rf " + builddir + "/testOutputDir/truth") - os.system("cp -r truth " + builddir + "/testOutputDir") + os.system("cp -rf truth " + builddir + "/testOutputDir") print("App Test Output In " + builddir + "/testOutputDir/truth") # check if the user wants data checked in - if parser.parse_args(['-t']): + if userInput.truth: os.system("make checkin") print("Checked In Truth Data") -- GitLab From e0a5ba9bf4fd36123ab1b50390d36918c0a60bbd Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 16 Mar 2018 09:57:12 -0700 Subject: [PATCH 113/620] updated mac spec --- macos-spec.txt | 349 ++++++++++++------------------------------------- 1 file changed, 86 insertions(+), 263 deletions(-) diff --git a/macos-spec.txt b/macos-spec.txt index 6c73a36e31..f1bc190869 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,273 +2,96 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT -https://repo.continuum.io/pkgs/main/osx-64/_ipyw_jlab_nb_ext_conf-0.1.0-py36h2fc01ae_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/affine-2.1.0-py_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/alabaster-0.7.10-py36h174008c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/anaconda-custom-py36ha4fed55_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/anaconda-client-1.6.5-py36h04cfe59_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/anaconda-project-0.8.0-py36h99320b2_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/appnope-0.1.0-py36hf537a9a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/appscript-1.0.1-py36h9e71e49_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/arrow-cpp-0.8.0-py36_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/asn1crypto-0.22.0-py36hb705621_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/astroid-1.5.3-py36h1333018_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/astropy-2.0.2-py36hf79c81d_4.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/babel-2.5.0-py36h9f161ff_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/backports-1.0-py36ha3c1827_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/backports.shutil_get_terminal_size-1.0.0-py36hd7a2ee4_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/beautifulsoup4-4.6.0-py36h72d3c9f_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/bitarray-0.8.1-py36h20fa61d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/bkcharts-0.2-py36h073222e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/blaze-0.11.3-py36h02e7a37_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/bleach-2.0.0-py36h8fcea71_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/bokeh-0.12.10-py36hfd5be35_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/boto-2.48.0-py36hdbc59ac_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/bottleneck-1.2.1-py36hbd380ad_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/bzip2-1.0.6-h92991f9_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ca-certificates-2017.08.26-ha1e5d58_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.10-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/certifi-2017.7.27.1-py36hd973bb6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/cffi-1.10.0-py36h880867e_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/chardet-3.0.4-py36h96c241c_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/click-6.7-py36hec950be_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/click-plugins-1.0.3-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cligj-0.4.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/cloudpickle-0.4.0-py36h13b7e56_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/clyent-1.2.2-py36hae3ad88_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/colorama-0.3.9-py36hd29a30c_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/conda-4.3.34-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/conda-build-3.0.27-py36hb78d8cd_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/conda-env-2.6.0-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/conda-verify-2.0.0-py36he837df3_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/contextlib2-0.5.5-py36hd66e5e7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/cryptography-2.0.3-py36h22d4226_1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/bullet-2.86.1-he2aa7b0_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cmake-3.9.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/curl-7.55.1-h7601780_3.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/cycler-0.10.0-py36hfc81398_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/cython-0.26.1-py36hd51f8eb_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/cytoolz-0.8.2-py36h290905f_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/dask-0.15.3-py36hc3ad2d6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/dask-core-0.15.3-py36hc0be6b7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/datashape-0.5.4-py36hfb22df8_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/decorator-4.1.2-py36h69a1b52_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/descartes-1.1.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/distributed-1.19.1-py36h4ae75d2_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/docutils-0.14-py36hbfde631_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/entrypoints-0.2.3-py36hd81d71f_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/et_xmlfile-1.0.1-py36h1315bdc_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/expat-2.2.4-h8f26bf8_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/fastcache-1.0.2-py36h8606a76_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/filelock-2.0.12-py36h0d0b4fb_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/fiona-1.7.10-py36h6a33aa8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/flask-0.12.2-py36h5658096_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/flask-cors-3.0.3-py36h7387b97_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/fontconfig-2.12.4-hffb9db1_2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freetype-2.8.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freexl-1.0.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gdal-2.2.3-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geopandas-0.3.0-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geos-3.6.2-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/embree-2.16.0-h6834224_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/get_terminal_size-1.0.0-h7520d66_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/gettext-0.19.8.1-hb0f4f8b_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/gevent-1.2.2-py36ha70b9d6_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/glib-2.55.0-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/glob2-0.5-py36h12393a9_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/gmp-6.1.2-h4a9834d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/gmpy2-2.0.8-py36h7ef02cb_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/greenlet-0.4.12-py36hf09ba7b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/h5py-2.7.0-py36h6400cee_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/hdf4-4.2.13-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/hdf5-1.10.1-h6090a45_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/heapdict-1.0.0-py36h27a9ac6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/html5lib-0.999999999-py36h79312fd_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/icu-58.2-hea21ae5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/idna-2.6-py36h8628d0a_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/imageio-2.2.0-py36h5e01289_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/imagesize-0.7.1-py36h3495948_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/intel-openmp-2018.0.0-h68bdfb3_7.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ipykernel-4.6.1-py36h3208c25_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ipython-6.1.0-py36hf612aae_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ipython_genutils-0.2.0-py36h241746c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ipywidgets-7.0.0-py36h24d3910_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/isort-4.2.15-py36hceb2a01_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/itsdangerous-0.24-py36h49fbb8d_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jbig-2.1-h4d881f8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jdcal-1.3-py36h1986823_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jedi-0.10.2-py36h6325097_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jinja2-2.9.6-py36hde4beb4_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jpeg-9b-haccd157_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/json-c-0.12.1-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jsonschema-2.6.0-py36hb385e00_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jupyter_client-5.1.0-py36hf6c435f_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jupyter_console-5.2.0-py36hccf5b1c_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jupyter_core-4.3.0-py36h93810fe_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jupyterlab-0.27.0-py36hd3092eb_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/jupyterlab_launcher-0.4.0-py36h93e02e9_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/kealib-1.4.7-4.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/lazy-object-proxy-1.3.1-py36h2fbbe47_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libcxx-4.0.1-h579ed51_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libcxxabi-4.0.1-hebd6815_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libdap4-3.18.3-2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libedit-3.1-hb4e282d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libffi-3.2.1-hd939716_3.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libgcc-4.8.5-hdbeacc1_10.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libgdal-2.2.3-2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libgfortran-3.0.1-h93005f0_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libiconv-1.15-h99df5da_5.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libkml-1.3.0-5.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libnetcdf-4.4.1.1-10.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libpng-1.6.32-hce72d48_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libpq-9.6.5-hbb47d45_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libsodium-1.0.13-hba5e272_2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libspatialindex-1.8.5-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libspatialite-4.3.0a-19.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libssh2-1.8.0-h1218725_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libtiff-4.0.8-h8cd0352_9.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libtool-2.4.6-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libxml2-2.9.4-hbd0960b_5.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/libxslt-1.1.29-h95a2935_5.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/llvmlite-0.20.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/locket-0.2.0-py36hca03003_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/lxml-4.1.0-py36h8179fc0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/lzo-2.10-hb6b8854_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/markupsafe-1.0-py36h3a1e703_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/matplotlib-2.1.0-py36h5068139_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mccabe-0.6.1-py36hdaeb55d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mistune-0.7.4-py36hccd6237_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mkl-2018.0.0-h5ef208c_6.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mkl-service-1.1.2-py36h7ea6df4_4.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mpc-1.0.3-hc455b36_4.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mpfr-3.1.5-h7fa3772_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/mpmath-0.19-py36h9185fea_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/msgpack-python-0.4.8-py36h46767b2_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/multipledispatch-0.4.9-py36hc5f92b5_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/munch-2.2.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/nbconvert-5.3.1-py36h810822e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/nbformat-4.4.0-py36h827af21_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ncurses-6.0-ha932d30_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/networkx-2.0-py36hefccab9_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/nltk-3.2.4-py36h27d1ea0_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/nose-1.3.7-py36h73fae2b_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/notebook-5.0.0-py36h462289e_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/numba-0.35.0-np113py36_6.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/numexpr-2.6.2-py36h0f4f1da_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/numpy-1.13.3-py36h2cdce51_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/numpydoc-0.7.0-py36he54d08e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/odo-0.5.1-py36hc1af34a_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/olefile-0.44-py36ha08bf50_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.3.0-2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/openpyxl-2.4.8-py36he899640_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/openssl-1.0.2l-h57f3a61_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/packaging-16.8-py36he5e8135_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pandas-0.20.3-py36hd6655d8_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pandoc-1.19.2.1-ha5e8f32_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pandocfilters-1.4.2-py36h3b0b094_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/parquet-cpp-1.4.0.pre-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/partd-0.3.8-py36hf5c4cb8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/path.py-10.3.1-py36hd33c240_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pathlib2-2.3.0-py36h877a6d8_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/patsy-0.4.1-py36ha1b3fa5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pcre-8.41-h29eefc5_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pep8-1.7.0-py36hc268eb1_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pexpect-4.2.1-py36h3eac828_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pickleshare-0.7.4-py36hf512f8e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pillow-4.2.1-py36h0263179_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pip-9.0.1-py36hbd95645_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 +https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-h90cdba2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py27_1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pkginfo-1.4.1-py36h25bf955_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/plio-0.1.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ply-3.10-py36h10e714e_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/poppler-0.61.1-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/poppler-data-0.4.8-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/prompt_toolkit-1.0.15-py36haeda067_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.5.1-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/psutil-5.4.0-py36ha052210_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/psycopg2-2.7.3.2-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ptyprocess-0.5.2-py36he6521c3_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pvl-0.3.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/py-1.4.34-py36hecf431b_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pyarrow-0.8.0-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pycodestyle-2.3.1-py36h83e8646_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pycosat-0.6.2-py36h1486600_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pycparser-2.18-py36h724b2fc_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pycrypto-2.6.1-py36h72f2894_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pycurl-7.43.0-py36hdb90038_3.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pyflakes-1.6.0-py36hea45e83_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pygments-2.2.0-py36h240cd3f_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pylint-1.7.4-py36hdee9077_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pyodbc-4.0.17-py36h5478161_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pyopenssl-17.2.0-py36h5d7bf08_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pyparsing-2.2.0-py36hb281f35_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pyproj-1.9.5.1-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pysal-1.14.3-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pysocks-1.6.7-py36hfa33cec_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pytables-3.4.2-py36hfbd7ab0_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pytest-3.2.1-py36h9963153_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/python-3.6.3-h6804ab2_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/python-dateutil-2.6.1-py36h86d2abb_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/python.app-2-py36h7fe2238_6.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pytz-2017.2-py36h2e7dfbc_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pywavelets-0.5.2-py36h2710a04_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pyyaml-3.12-py36h2ba1e63_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/pyzmq-16.0.2-py36h087ffad_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/qtawesome-0.4.4-py36h468c6fb_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/qtpy-1.3.1-py36h16bb863_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/readline-7.0-h81b24a6_3.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/requests-2.18.4-py36h4516966_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/rope-0.10.5-py36h5764ad1_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/rtree-0.8.3-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/ruamel_yaml-0.11.14-py36h9d7ade0_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/scikit-image-0.13.0-py36h398857d_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/scikit-learn-0.19.1-py36hffbff8c_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/scipy-0.19.1-py36h3e758e1_3.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/seaborn-0.8.0-py36h74df97e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/setuptools-36.5.0-py36h2134326_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/shapely-1.6.3-py36_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/simplegeneric-0.8.1-py36he5b5b09_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/singledispatch-3.4.0.3-py36hf20db9d_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sip-4.18.1-py36h2824476_2.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/six-1.11.0-py36h0e22d5e_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/snowballstemmer-1.2.1-py36h6c7b616_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sortedcollections-0.5.3-py36he9c3ed6_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sortedcontainers-1.5.7-py36ha982688_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sphinx-1.6.3-py36hcd1b3e7_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sphinxcontrib-1.0-py36h9364dc8_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sphinxcontrib-websupport-1.0.1-py36h92f4a7a_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sqlalchemy-1.1.13-py36h156b851_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sqlite-3.20.1-h900c3b0_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/statsmodels-0.8.0-py36h9c68fc9_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/sympy-1.1.1-py36h7f3cf04_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/tblib-1.3.2-py36hda67792_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/terminado-0.6-py36h656782e_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/testpath-0.3.1-py36h625a49b_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/tk-8.6.7-hcdce994_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/toolz-0.8.2-py36h7b95164_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/tornado-4.5.2-py36h468dda9_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/traitlets-4.3.2-py36h65bd3ce_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/typing-3.6.2-py36haa2d9ef_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/unicodecsv-0.14.1-py36he531d66_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/unixodbc-2.3.4-h4cb4dde_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/urllib3-1.22-py36h68b9469_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/wcwidth-0.1.7-py36h8c6ec74_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/webencodings-0.5.1-py36h3b9701d_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/werkzeug-0.12.2-py36h168efa1_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/wheel-0.29.0-py36h3597b6d_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/widgetsnbextension-3.0.2-py36h91f43ea_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/wrapt-1.10.11-py36hc29e774_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.2.0-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/xlrd-1.1.0-py36h336f4a2_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/xlsxwriter-1.0.2-py36h3736301_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/xlwings-0.11.4-py36hc75f156_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/xlwt-1.2.0-py36h5ad1178_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/xz-5.2.3-ha24016e_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/yaml-0.1.7-hff548bb_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/zeromq-4.2.2-h131e0f7_1.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/zict-0.1.3-py36h71da714_0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/zlib-1.2.11-h60db283_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.2.0-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 +https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.11-0.tar.bz2 -- GitLab From 4bf585cd3e7209a4173c4ac1cf19fa40cb83ba2d Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 16 Mar 2018 10:08:01 -0700 Subject: [PATCH 114/620] updated reqs --- macos-spec.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/macos-spec.txt b/macos-spec.txt index f1bc190869..774446eb91 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -51,7 +51,6 @@ https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-h90cdba2_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ncurses-5.9-10.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ninja-1.7.2-0.tar.bz2 -- GitLab From 922f36bf569afcb46c44e0e1aed4e96c7ab47280 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 16 Mar 2018 19:08:54 -0700 Subject: [PATCH 115/620] mac specs are stupid --- macos-spec.txt | 113 +++++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/macos-spec.txt b/macos-spec.txt index f1bc190869..e59a6ce537 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,96 +2,97 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT -https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/bullet-2.86.1-he2aa7b0_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cmake-3.9.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/embree-2.16.0-h6834224_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-h90cdba2_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ncurses-5.9-10.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py27_1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.2.0-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/certifi-2018.1.18-py27_0.tar.bz2 +https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/protobuf-3.2.0-py27_0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/pip-9.0.1-py27_1.tar.bz2 -- GitLab From 4638511791c660b831a2de0c69f12e85bbea8446 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 19 Mar 2018 13:50:31 -0700 Subject: [PATCH 116/620] added v007 support back in to be work with conda --- isis/cmake/FindAllDependencies.cmake | 48 +++++++++++++++++++++++++--- isis/cmake/FindPNG.cmake | 17 ++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 isis/cmake/FindPNG.cmake diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index a280729090..0cd708f3c6 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -6,12 +6,52 @@ message("CONDA PREFIX: $ENV{CONDA_PREFIX}") list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) -message("Test: ${CMAKE_FIND_ROOT_PATH}") + +list(APPEND CMAKE_INCLUDE_PATH + /usgs/pkgs/local/v007/include/ + /usgs/pkgs/local/v007/bin/ + /usgs/pkgs/local/v007/lib/ + /usgs/pkgs/local/v007/objects/ + /usgs/pkgs/local/v007/include/googleprotobuf/protobuf2.6.1/ + /usgs/pkgs/local/v007/include/xercesc/xercesc3.1.2/ + /usgs/pkgs/local/v007/include/tiff/tiff4.0.5/ + /usr/lib64/ +) + +set(CMAKE_PREFIX_PATH + /usgs/pkgs/local/v007/include/ + /usgs/pkgs/local/v007/bin/ + /usgs/pkgs/local/v007/lib/ + /usgs/pkgs/local/v007/libexec/ + /opt/usgs/v007/ports/Library/Frameworks/ + /opt/usgs/v007/ports/libexec/ + /opt/usgs/v007/ports/bin/ + /opt/usgs/v007/ports/lib/ + /opt/usgs/v007/ports/include/ + /opt/usgs/v007/ports/libexec/qt5 + /opt/usgs/v007/ports/libexec/qt5/bin/ + /opt/usgs/v007/ports/libexec/qt5/lib/ + /opt/usgs/v007/3rdparty/bin + /opt/usgs/v007/3rdparty/include/ + /opt/usgs/v007/3rdparty/lib/ + /opt/usgs/v007/proprietary/ + /opt/usgs/v007/proprietary/include/ + /opt/usgs/v007/proprietary/lib/ + /usr/lib/ + /usr/lib64/ + /usr/local/lib/ +) + # Add thirdPartyCppFlags -set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals -DGMM_USES_SUPERLU) +set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") +# Flag to fix numeric literals problem with boost on linux +if(NOT APPLE) + set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) +endif() + # Paths to required executables find_program(XALAN Xalan REQUIRED) find_program(LATEX latex) @@ -43,8 +83,8 @@ find_package(Qt5 COMPONENTS Svg Test WebChannel - WebKit - WebKitWidgets + #WebKit + #WebKitWidgets Widgets Xml XmlPatterns REQUIRED) diff --git a/isis/cmake/FindPNG.cmake b/isis/cmake/FindPNG.cmake new file mode 100644 index 0000000000..bc11004ec1 --- /dev/null +++ b/isis/cmake/FindPNG.cmake @@ -0,0 +1,17 @@ +# Finds include directory and all applicable libraries +# +# Sets the following: +# PNG_INCLUDE_DIR +# PNG_LIBRARY + +find_path(PNG_INCLUDE_DIR + NAMES png.h + PATH_SUFFIXES png +) + +find_library(PNG_LIBRARY + NAMES png +) + +message( "-- PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") +message( "-- PNG LIB: ${PNG_LIBRARY}") -- GitLab From 9c838f9db2071b2777458a0313a68c09a2b93799 Mon Sep 17 00:00:00 2001 From: Christopher Ryan Combs Jr Date: Mon, 19 Mar 2018 14:40:36 -0700 Subject: [PATCH 117/620] Added support for dockerized ISIS (#29) * Added Jenkinsfile for testing of Pipeline build * Debugging Jenkinsfile #1 * Debugging Jenkinsfile #2 * Debugging Jenkinsfile #3 * Debugging Jenkinsfile #4 * Debugging Jenkinsfile #5 * Debugging Jenkinsfile #6 * Debugging Jenkinsfile #7 * Debugging Jenkinsfile #8 * Debugging Jenkinsfile #9 * Debugging Jenkinsfile #10 * typo in ctest line * Debugging Jenkinsfile #11 * Debugging Jenkinsfile 12 * Debugging Jenkinsfile 13 * Debugging Jenkinsfile 14 * Debugging Jenkinsfile 15 * Debugging Jenkinsfile 16 * Update Jenkinsfile * Debugging Jenkinsfile 18 * Update Jenkinsfile * Debugging Jenkinsfile 20 * Debugging Jenkinsfile 21 Reverted to 16 * Debugging Jenkinsfile 22 * Debugging Jenkinsfile 24 * Debuggin Jenkinsfile 25 * Debugging Jenkinsfile 26 * Debugging Jenkinsfile 27 * Debugging Jenkinsfile 28 * Debugging Jenkinsfile 29 * Debugging Jenkinsfile 30 * Debugging Jenkinsfile 31 * Debugging Jenkinsfile 32 * Debugging Jenkinsfile 32 * Debugging Jenkinsfile 33 * Debugging Jenkinsfile 34 * Debugging Jenkinsfile 34 * Debugging Jenkinsfile 35 * Debugging Jenkinsfile 36 * Debugging Jenkinsfile 36 * Debugging Jenkinsfile 37 * Debugging Jenkinsfile 38 * Debugging Jenkinsfile 39 * Debugging Jenkinsfile 40 * Debugging Jenkinsfile 41 * Debugging Jenkinsfile 41 * Debugging Jenkinsfile 42 * Debugging Jenkinsfile 43 * Debugging Jenkinsfile 44 * Debugging Jenkinsfile 45 * Debugging Jenkinsfile 46 * Debugging Jenksinsfile 47 * Debugging Jenkinsfile 48 * Debugging Jenk file 49 * Debugging Jenkinsfile 50 * Debugging Jenkinsfile 51 * Debugging Jenkinsfile 52 * Debugging Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update FindSuperLU.cmake * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Create Dockerfile * Update Jenkinsfile * Update Dockerfile * Update Dockerfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Fixed reversal of mac and linux geos find-versions * Update FindAllDependencies.cmake * Revert of mac/linux find version reversal * Update FindCholmod.cmake * Update FindAllDependencies.cmake * Added /lib64 to include path for docker * Update FindAllDependencies.cmake * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Removed bug with find kakadu * Update Jenkinsfile * Added find for opengl * Fixed issue with kakadu namespace * Update FindOpenGL.cmake * Update FindOpenGL.cmake * Update CMakeLists.txt * Update CMakeLists.txt * Update FindOpenGL.cmake * Update CMakeLists.txt * Update FindOpenGL.cmake * Update FindOpenGL.cmake * Update Jenkinsfile * Update FindCholmod.cmake * Update Jenkinsfile * Update Jenkinsfile * Added Set for isisroot * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Debugging TestPreferences * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Debugging TestPreferences for docker * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Added app tests and module tests * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile * Update RunMakeFileTest.cmake * Debugging find for truth data dir * Update Jenkinsfile * Remove verbose setting ctest * Debugging dockerized jenkins apptests * Debugging dockerized jenkins apptests * Debugging dockerized jenkins apptests * Update isismake.tsts * Debugging dockerized jenkins apptests * Debugging dockerized jenkins apptests * Added environment variables for testing * Removed Dockerfile * Fixed issues with test output directory * Commented out debug statements * Added fix to prevent early exit on failed build * Update Jenkinsfile * Update Jenkinsfile * Update Jenkinsfile --- isis/CMakeLists.txt | 2 +- isis/Jenkinsfile | 62 ++++++++++++++++++++++++++++ isis/cmake/FindAllDependencies.cmake | 7 +--- isis/cmake/FindCholmod.cmake | 14 ++++--- isis/cmake/FindOpenGL.cmake | 27 ++++++++++++ isis/cmake/RunMakeFileTest.cmake | 5 ++- 6 files changed, 103 insertions(+), 14 deletions(-) create mode 100644 isis/Jenkinsfile create mode 100644 isis/cmake/FindOpenGL.cmake diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 1debc7d159..24e6427d05 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -10,7 +10,6 @@ cmake_minimum_required(VERSION 3.4) # Point cmake to our other CMake files. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") -# always look for framworks last set(CMAKE_FIND_FRAMEWORK LAST) include(AddIsisModule) @@ -109,6 +108,7 @@ endif() if(${testOutputDir} STREQUAL "OFF") message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") + set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) else() # User specified a test output folder, make sure it exists. diff --git a/isis/Jenkinsfile b/isis/Jenkinsfile new file mode 100644 index 0000000000..93b3414b2c --- /dev/null +++ b/isis/Jenkinsfile @@ -0,0 +1,62 @@ +pipeline { + agent { + docker { + label 'cmake' + image 'chrisryancombs/docker_isis' + args '''\ + -v /usgs/pkgs/local/v007:/usgs/pkgs/local/v007 \ + -v /usgs/cpkgs/isis3/data:/usgs/cpkgs/isis3/data \ + -v /usgs/cpkgs/isis3/testData:/usgs/cpkgs/isis3/testData\ + ''' + } + } + environment { + ISISROOT="${workspace}" + "/build/" + ISIS3TESTDATA="/usgs/cpkgs/isis3/testData/" + ISIS3DATA="/usgs/cpkgs/isis3/data/" + } + stages { + stage('Config') { + steps { + sh """ + mkdir -p ./install ./build && cd build + cmake -GNinja -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis \ + """ + } + } + stage('Build') { + steps { + sh """ + set +e + cd build + ninja -j8 && ninja install + """ + } + } + stage('Test'){ + steps { + sh """ + export PATH="${PATH}:${ISISROOT}/bin" + set +e + cd build + ctest -j8 -R _unit_ + ctest -j8 -R _app_ + ctest -j8 -R _module_ + """ + } + } + } +// post { +// success { +// sh 'pwd && ls' +// archiveArtifacts artifacts: "build/objects/*.o" +// } +// always { +// mail to: 'ccombs@usgs.gov', +// subject: "Build Finished: ${currentBuild.fullDisplayName}", +// body: "Link: ${env.BUILD_URL}" +// sh "rm -rf build/* && rm -rf install/*" +// cleanWs() +// } +// } +} diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index dfdac8a666..86fd45f930 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -71,10 +71,6 @@ find_program(PROTOC protoc REQUIRED) include(FindProtobuf) - -find_package(Geos 3.5.0 REQUIRED) - - if(APPLE) find_package(OpenGL REQUIRED) find_package(Qt5 COMPONENTS @@ -175,6 +171,7 @@ find_package(HDF5 1.8.15 REQUIRED) find_package(Jama 125 REQUIRED) # Jama version is 1.2.5, but v007 directory is "jama/jama125/" find_package(NN REQUIRED) find_package(OpenCV 3.1.0 REQUIRED) +find_package(OpenGL REQUIRED) find_package(PCL 1.8 REQUIRED) # "pcl-${PCL_FIND_VERSION}" find_package(Protobuf 2.6.1 REQUIRED) # "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" find_package(Qwt 6 REQUIRED) # "qwt${Qwt_FIND_VERSION}" @@ -376,7 +373,7 @@ foreach(lib ${RAW_DYNAMIC_LIBS}) endif() endforeach() -message("THIRDPARTYLIBS = ${THIRDPARTYLIBS}") +# message("THIRDPARTYLIBS = ${THIRDPARTYLIBS}") # Plugins file(GLOB_RECURSE THIRDPARTYPLUGINS "${PLUGIN_DIR}/*${SO}") diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index 5b2804e6c8..a01c251a35 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -25,12 +25,14 @@ endif() # Dependencies for lapack # add gcc location for MacOS -find_library(FORTRAN_LIBRARY NAMES gfortran - NAMES gfortran - PATHS /opt/usgs/v007/ports/lib/gcc5/ -) - -find_library(BLAS_LIBRARY NAMES blas) +# if(APPLE) + find_library(FORTRAN_LIBRARY NAMES gfortran + NAMES gfortran + PATHS /opt/usgs/v007/ports/lib/gcc5/ + ) + + find_library(BLAS_LIBRARY NAMES blas) +# endif(APPLE) get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindOpenGL.cmake b/isis/cmake/FindOpenGL.cmake new file mode 100644 index 0000000000..8fc3f41d2f --- /dev/null +++ b/isis/cmake/FindOpenGL.cmake @@ -0,0 +1,27 @@ +# CMake module for find_package(OpenGL) +# Finds include directory and all applicable libraries +# +# Sets the following: +# KAKADU_INCLUDE_DIR +# KAKADU_A_LIBRARY +# KAKADU_V_LIBRARY + +find_path(OPENGL_INCLUDE_DIR + NAME gl.h + PATH_SUFFIXES GL + HINTS GL +) + +find_library(GL_LIBRARY + NAMES GL +) + +find_library(GLU_LIBRARY + NAMES GLU +) +message("==================") +message(${OPENGL_INCLUDE_DIR}) +message(${GL_LIBRARY}) +message(${GLU_LIBRARY}) + +get_filename_component(OPENGL_INCLUDE_DIR "${OPENGL_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake index c510e64f4a..8e84d53a94 100644 --- a/isis/cmake/RunMakeFileTest.cmake +++ b/isis/cmake/RunMakeFileTest.cmake @@ -51,7 +51,7 @@ function(run_app_makefile_test makefile inputFolder outputFolder truthFolder bin # execute_process(COMMAND rm -f ${logFile}) execute_process(COMMAND make test WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) - + message("result: ${result}") if (result MATCHES "OK") set(failed "OFF") else() @@ -61,7 +61,8 @@ function(run_app_makefile_test makefile inputFolder outputFolder truthFolder bin # If any file failed, the test is a failure. if(${failed}) - message(FATAL_ERROR "Test failed.") + message("TRUTH: ${TRUTH}") + message(FATAL_ERROR "Test failed. Result:\n ${result}") endif() endfunction() -- GitLab From ee2a0ad1c2cd71964f1481e88389435b57348fb3 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 19 Mar 2018 15:51:56 -0700 Subject: [PATCH 118/620] unit test fixes for UserInterface and ProcessExportPds3 --- isis/cmake/FindAllDependencies.cmake | 2 +- .../base/objs/ProcessExportPds4/unitTest.cpp | 20 +++++++++---------- isis/src/base/objs/UserInterface/unitTest.cpp | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 0cd708f3c6..73b89c633c 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -7,6 +7,7 @@ message("CONDA PREFIX: $ENV{CONDA_PREFIX}") list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) +# Add search USGS maintained libraries list(APPEND CMAKE_INCLUDE_PATH /usgs/pkgs/local/v007/include/ /usgs/pkgs/local/v007/bin/ @@ -42,7 +43,6 @@ set(CMAKE_PREFIX_PATH /usr/local/lib/ ) - # Add thirdPartyCppFlags set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") diff --git a/isis/src/base/objs/ProcessExportPds4/unitTest.cpp b/isis/src/base/objs/ProcessExportPds4/unitTest.cpp index 6053180447..23f7b9a708 100644 --- a/isis/src/base/objs/ProcessExportPds4/unitTest.cpp +++ b/isis/src/base/objs/ProcessExportPds4/unitTest.cpp @@ -15,7 +15,7 @@ using namespace Isis; */ void IsisMain() { Preference::Preferences(true); - + try { std::cout << "Testing ProcessExportPds4" << std::endl << std::endl; @@ -27,24 +27,24 @@ void IsisMain() { defaultLabel.remove(QRegExp(" xsi.*=\".*\"")); std::cout << defaultLabel; - std::cout << std::endl << "Testing defaulte CaSSIS export" << std::endl; + std::cout << std::endl << "Testing default CaSSIS export" << std::endl; Isis::ProcessExportPds4 p; - + QString cubeName = "$tgo/testData/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub"; - - Isis::Cube cub; - cub.open(cubeName, "r"); - + + Isis::Cube cub; + cub.open(cubeName, "r"); + p.SetInputCube(&cub); - + // Remove the schema from the lable because we cannot ensure that // attributes come out in the same order every time QString rawLabel = p.StandardPds4Label().toString(); rawLabel.remove(QRegExp(" xmlns.*=\".*\"")); rawLabel.remove(QRegExp(" xsi.*=\".*\"")); std::cout << rawLabel; - + std::ofstream ofs; p.OutputLabel(ofs); @@ -135,7 +135,7 @@ void IsisMain() { Cube projectedCube(projectedName); ProcessExportPds4 projectedProcess; projectedProcess.SetInputCube(&projectedCube); - + QString projectedLabel = projectedProcess.StandardPds4Label().toString(); projectedLabel.remove(QRegExp(" xmlns.*=\".*\"")); projectedLabel.remove(QRegExp(" xsi.*=\".*\"")); diff --git a/isis/src/base/objs/UserInterface/unitTest.cpp b/isis/src/base/objs/UserInterface/unitTest.cpp index d07d5d6f15..e44c103f47 100644 --- a/isis/src/base/objs/UserInterface/unitTest.cpp +++ b/isis/src/base/objs/UserInterface/unitTest.cpp @@ -14,7 +14,7 @@ int main(int argc, char *argv[]) { cout << "Unit test for Isis::UserInterface ..." << endl; - QString unitTestXml = Isis::FileName(QString(ISISBUILDDIR) + "/unitTest/isis3_unit_test_UserInterface.xml").expanded(); + QString unitTestXml = Isis::FileName(QString(ISISROOT) + "/src/base/objs/UserInterface/unitTest.xml").expanded(); QString highpass = Isis::FileName(QString(ISISBUILDDIR) + "/bin/xml/highpass.xml").expanded(); char *myArgv[15];// = {"unitTest", "from=input.cub", "to=output.cub"}; -- GitLab From b5d04c70ad088bed4d05db66c334e4b91c9ab8c2 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 19 Mar 2018 16:00:19 -0700 Subject: [PATCH 119/620] added some comvenient diffing logic --- isis/cmake/RunUnitTest.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/isis/cmake/RunUnitTest.cmake b/isis/cmake/RunUnitTest.cmake index 1fc05e4f3d..c64d105844 100644 --- a/isis/cmake/RunUnitTest.cmake +++ b/isis/cmake/RunUnitTest.cmake @@ -62,7 +62,11 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files RESULT_VARIABLE DIFFERENT) if(DIFFERENT) - message(FATAL_ERROR "Test failed - files differ") + message("------------------ DIFFERENCES ------------------ ") + execute_process(COMMAND diff ${comp1} ${comp2} OUTPUT_VARIABLE compdiff) + message("${compdiff}") + message("------------------------------------------------- ") + message(FATAL_ERROR "Test failed - files differ") # On error the result file is left around to aid in debugging. else() file(REMOVE ${outputFile}) # On success, clean out the result file. -- GitLab From 60ec0ba47371ce981ecc39b354060428c69867e8 Mon Sep 17 00:00:00 2001 From: Cole <34170587+cneubauerUSGS@users.noreply.github.com> Date: Mon, 19 Mar 2018 16:19:02 -0700 Subject: [PATCH 120/620] Make Truth Script Unit And App (#22) * A bit of a hacky fix for cmake docs * Non hacky fix for docs * Forgot how install worked for a second * Commented code and changed command * makeTruth script may not be worth the effort to call the script * missing imports * added path * forgot a plus * added app option * changes * changes * added path to src * added cp to specific makefile * changes * changes * changes * makes more sense to have two scripts one to get and see output and one to actually change truth files * changes * changes * changes * changes * changes * changes * changes * changes * changes * changes * Make Truth for app test now fully functional * changes * changes * changes * changes * Make script fully functional * Redid system argument calls with argparser * Redid system argument calls with argparser * Redid system argument calls with argparser * Redid system argument calls with argparser * unit test with arg parser working * Argparser app test * Cleaned documentation to match arg parser implementation --- isis/scripts/makeOutput.py | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 isis/scripts/makeOutput.py diff --git a/isis/scripts/makeOutput.py b/isis/scripts/makeOutput.py new file mode 100755 index 0000000000..afbeb3a99e --- /dev/null +++ b/isis/scripts/makeOutput.py @@ -0,0 +1,89 @@ +''' +Script to create truthData for tests. + +For output it expects the command in the form of: + python3 makeOutput.py test + +where test is the cmake name for the unit or app test + +To check in truth data the command should be in the form of: + python makeOutput.py -t test + +The -t option checks in truth data + +The unit tests are pretty trivial because the executable outputs the results of +the unitTest to stdout and stderr so we just redirect the streams to the file +named object.truth where object is the ISIS object being tested. + +The app tests output has to rely on the old make system because the app test +infrastructure relies on the old make system. Otherwise all the logic for the old +makesystem would need to be reimplemented here. Because we wish to replace the testing +system with something that allows unit and app test to live in the same space the effort +to recreate the logic is not worth the outcome. +''' + +import argparse +import sys +import os + +try: + builddir = os.environ['ISISROOT'] +except KeyError: + print("The $ISISROOT environment variable is not set") + +parser = argparse.ArgumentParser() +parser.add_argument('test', action='store', help='Provide the name of the Test to create output of') +parser.add_argument('-t', action='store_true', default=False, dest='truth', help='Flag whether output is sent to truth data') +userInput = parser.parse_args() +testInput = userInput.test + +if "_unit_" in testInput: + unitTestName = testInput.split("_test_")[1] + ".truth" + # we should probably append the path to the front so it ends up in + # in the same directory as the test + unitTestPath = builddir + "/unitTest/" + + os.system(unitTestPath + testInput + ">&" + builddir + "/testOutputDir/" + unitTestName) + print("Unit Test Output In " + builddir + "/testOutputDir/ As " + unitTestName) + + if userInput.truth: + with open(builddir + "/objects/CTestTestfile.cmake") as testFile: + for line in testFile: + if unitTestName in line: + unitTestSrcPath = line.split("\" \"")[2][13:] + os.system("cp -f " + builddir + "/testOutputDir/" + unitTestName + " " + unitTestSrcPath) + break + + print("Checked In Truth Data To " + unitTestSrcPath) + + +else: + apptest = testInput + makefilePath = "" + with open(builddir + "/objects/CTestTestfile.cmake") as testFile: + for line in testFile: + if apptest in line: + makefilePath = line.split("\" \"")[1][11:] + break + + makefilePath = makefilePath.split("/") + del makefilePath[-1] + makefilePath = "/".join(makefilePath) + + # change dir to test dir and run make commands + os.chdir(makefilePath) + os.system("make checkout") + os.system("make output") + os.system("make truthdata") + os.system("rm -rf " + builddir + "/testOutputDir/truth") + os.system("cp -rf truth " + builddir + "/testOutputDir") + print("App Test Output In " + builddir + "/testOutputDir/truth") + + # check if the user wants data checked in + if userInput.truth: + os.system("make checkin") + print("Checked In Truth Data") + + # doing this instead of make release because make release + # can give feedback to the user that we would rather avoid + os.system("rm -rf input output truth print.prt") -- GitLab From c804dd9768480f7dc4ac91966f07d35356cc784b Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Mon, 19 Mar 2018 16:33:10 -0700 Subject: [PATCH 121/620] removed hardcoded values for modules and have it take values from src directory --- .gitignore | 2 ++ isis/CMakeLists.txt | 2 +- isis/src/CMakeLists.txt | 51 ++++++++++------------------------------- 3 files changed, 15 insertions(+), 40 deletions(-) diff --git a/.gitignore b/.gitignore index 813b5d9065..2a56730e14 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,6 @@ print.prt */tsts/*/input/* */tsts/*/truth/* */tsts/*/output/* +*/build/ +*/install/ diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 76767dba46..1b21fe471a 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -204,7 +204,7 @@ endif() # Add a config file to the install bin directory so that QT can find the plugin libraries. file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../3rdParty/plugins/\n") -install(FILES "${CMAKE_BINARY_DIR}/qt.conf" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(FILES "${CMAKE_BINARY_DIR}/qt.conf" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/xml) #Create the inc directory execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/inc) diff --git a/isis/src/CMakeLists.txt b/isis/src/CMakeLists.txt index 8c3f525f0f..2fe7b579c9 100644 --- a/isis/src/CMakeLists.txt +++ b/isis/src/CMakeLists.txt @@ -1,44 +1,17 @@ #=============================================================================== +set(CORE_LIST base database control qisis system) -# Each of these calls will add one library plus multiple apps and unit tests. -# - The arguments are: (library_name, [list of folders needed for library]) +get_subdirectory_list(${CMAKE_CURRENT_LIST_DIR} modules) -if(${buildCore}) - add_isis_module(${CORE_LIB_NAME} base database control qisis system) +# build core into isis library +add_isis_module(${CORE_LIB_NAME} ${CORE_LIST}) - # This folder is for under-development test code so if it is - # missing just ignore it. - # - TODO: The install behavior should be disabled for this folder! - if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/local) - message("Detected optional directory 'local'") - add_isis_module(local local) - endif() +# remove duplicates so we dont build to the core targets twice +foreach(core ${CORE_LIST}) + list(REMOVE_ITEM modules "${CMAKE_CURRENT_LIST_DIR}/${core}") +endforeach() -endif() - -if(${buildMissions}) - add_isis_module(apollo apollo) - add_isis_module(cassini cassini) - add_isis_module(chandrayaan1 chandrayaan1) - add_isis_module(clementine clementine) - add_isis_module(dawn dawn) - add_isis_module(galileo galileo) - add_isis_module(hayabusa hayabusa) - add_isis_module(kaguya kaguya) - add_isis_module(lo lo) - add_isis_module(lro lro) - add_isis_module(mariner mariner) - add_isis_module(mer mer) - add_isis_module(messenger messenger) - add_isis_module(mex mex) - add_isis_module(mgs mgs) - add_isis_module(mro mro) - add_isis_module(near near) - add_isis_module(newhorizons newhorizons) - add_isis_module(odyssey odyssey) - add_isis_module(rolo rolo) - add_isis_module(rosetta rosetta) - add_isis_module(socet socet) - add_isis_module(viking viking) - add_isis_module(voyager voyager) -endif() +foreach( mod ${modules} ) + string(REPLACE "${CMAKE_CURRENT_LIST_DIR}/" "" strippedmod ${mod}) + add_isis_module(${strippedmod} ${strippedmod}) +endforeach() -- GitLab From c523a28329e8fdf94ee70ecd276b7cfd747ddec0 Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Mon, 19 Mar 2018 17:40:43 -0700 Subject: [PATCH 122/620] rmoved openGL line breaks builds on linux --- isis/cmake/FindAllDependencies.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 86fd45f930..4962ec256e 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -171,7 +171,6 @@ find_package(HDF5 1.8.15 REQUIRED) find_package(Jama 125 REQUIRED) # Jama version is 1.2.5, but v007 directory is "jama/jama125/" find_package(NN REQUIRED) find_package(OpenCV 3.1.0 REQUIRED) -find_package(OpenGL REQUIRED) find_package(PCL 1.8 REQUIRED) # "pcl-${PCL_FIND_VERSION}" find_package(Protobuf 2.6.1 REQUIRED) # "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" find_package(Qwt 6 REQUIRED) # "qwt${Qwt_FIND_VERSION}" -- GitLab From f6f657acf94f54ec60302a8de95fc317959fc934 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 20 Mar 2018 11:37:51 -0700 Subject: [PATCH 123/620] removed opengl line in findalldependencies --- isis/cmake/FindAllDependencies.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index d335dcc26e..b6d3d7e216 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -160,7 +160,6 @@ find_package(HDF5 1.8.15 REQUIRED) find_package(Jama 125 REQUIRED) # Jama version is 1.2.5, but v007 directory is "jama/jama125/" find_package(NN REQUIRED) find_package(OpenCV 3.1.0 REQUIRED) -find_package(OpenGL REQUIRED) find_package(PCL 1.8 REQUIRED) # "pcl-${PCL_FIND_VERSION}" find_package(Protobuf 2.6.1 REQUIRED) # "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" find_package(Qwt 6 REQUIRED) # "qwt${Qwt_FIND_VERSION}" -- GitLab From 371834f4bc358b24e950f6c9f91a9e1985e44fbc Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 20 Mar 2018 11:41:09 -0700 Subject: [PATCH 124/620] Update FindAllDependencies.cmake --- isis/cmake/FindAllDependencies.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index d335dcc26e..b6d3d7e216 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -160,7 +160,6 @@ find_package(HDF5 1.8.15 REQUIRED) find_package(Jama 125 REQUIRED) # Jama version is 1.2.5, but v007 directory is "jama/jama125/" find_package(NN REQUIRED) find_package(OpenCV 3.1.0 REQUIRED) -find_package(OpenGL REQUIRED) find_package(PCL 1.8 REQUIRED) # "pcl-${PCL_FIND_VERSION}" find_package(Protobuf 2.6.1 REQUIRED) # "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" find_package(Qwt 6 REQUIRED) # "qwt${Qwt_FIND_VERSION}" -- GitLab From 81e8f2f79a123f86cadf7d204f6c3fcb7b68bd5f Mon Sep 17 00:00:00 2001 From: Cole Neubauer Date: Tue, 20 Mar 2018 12:07:37 -0700 Subject: [PATCH 125/620] fixes issues with install not finding dependencies --- isis/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 5b430a01d8..7574f344ac 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -203,7 +203,7 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX}) add_subdirectory(src objects) # Set up third party libraries for installation -# install_third_party() +install_third_party() # # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. # # - This is required so that the plugins can be found during unit tests. -- GitLab From e565f8b71b19bfe09dfcd868f69315510779fc24 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 20 Mar 2018 15:31:38 -0700 Subject: [PATCH 126/620] changed build order for bullet to match whatever nonsense they wanted --- isis/cmake/FindAllDependencies.cmake | 15 ++++++++++++++- isis/cmake/FindBullet.cmake | 16 ++++++++-------- isis/make/config.darwin-MacOSX10_11 | 4 ---- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index b6d3d7e216..e11aa39144 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -194,15 +194,28 @@ endforeach() foreach (_variableName ${_variableNames}) if (_variableName MATCHES "^CMAKE+") + elseif (_variableName MATCHES "^BULLET$") + # We need to skip Bullet since the order needs to be very specific 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+") + endif() endforeach() +list(APPEND ALLLIBS "${BULLET_OPENCL_LIBRARY}") +list(APPEND ALLLIBS "${BULLET3_COMMON_LIBRARY}") +list(APPEND ALLLIBS "${BULLET3_GEOMETRY_LIBRARY}") +list(APPEND ALLLIBS "${BULLET_SOFTBODY_LIBRARY}") +list(APPEND ALLLIBS "${BULLET_DYNAMICS_LIBRARY}") +list(APPEND ALLLIBS "${BULLET3_3DYNAMICS_LIBRARY}") +list(APPEND ALLLIBS "${BULLET_INVERSEDYNAMICS_LIBRARY}") +list(APPEND ALLLIBS "${BULLET_COLLISION_LIBRARY}") +list(APPEND ALLLIBS "${BULLET3_3COLLISION_LIBRARY}") +list(APPEND ALLLIBS "${BULLET3_LINEARMATH_LIBRARY}") + foreach (_variableName ${_variableNames}) get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) if (_variableName MATCHES "^CMAKE+") diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index 3d4f96c01e..dcc984c2b9 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -13,12 +13,12 @@ find_path(BULLET_INCLUDE_DIR find_library(BULLET_OPENCL_LIBRARY NAMES Bullet3OpenCL_clew) find_library(BULLET_SOFTBODY_LIBRARY NAMES BulletSoftBody) find_library(BULLET_INVERSEDYNAMICS_LIBRARY NAMES BulletInverseDynamics) -find_library(BULLET_DYNAMICS_LIBRARY NAMES Bullet3Common) -find_library(BULLET_COLLISION_LIBRARY NAMES BulletDynamics) -find_library(BULLET3_GEOMETRY_LIBRARY NAMES BulletCollision) -find_library(BULLET3_DYNAMICS_LIBRARY NAMES Bullet3Geometry) -find_library(BULLET3_COLLISION_LIBRARY NAMES Bullet3Dynamics) -find_library(BULLET3_COMMON_LIBRARY NAMES Bullet3Collision) +find_library(BULLET_COMMON_LIBRARY NAMES Bullet3Common) +find_library(BULLET_DYNAMICS_LIBRARY NAMES BulletDynamics) +find_library(BULLET3_COLLISION_LIBRARY NAMES BulletCollision) +find_library(BULLET3_3GEOMETRY_LIBRARY NAMES Bullet3Geometry) +find_library(BULLET3_3DYNAMICS_LIBRARY NAMES Bullet3Dynamics) +find_library(BULLET3_3COLLISION_LIBRARY NAMES Bullet3Collision) find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) @@ -30,7 +30,7 @@ message( "-- BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) message( "-- BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) message( "-- BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) message( "-- BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) -message( "-- BULLET3 DYNAMICS: " ${BULLET3_DYNAMICS_LIBRARY} ) -message( "-- BULLET3 COLLISION: " ${BULLET3_COLLISION_LIBRARY} ) +message( "-- BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) +message( "-- BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) message( "-- BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) message( "-- BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/make/config.darwin-MacOSX10_11 b/isis/make/config.darwin-MacOSX10_11 index 2b600ac626..afe707ba04 100644 --- a/isis/make/config.darwin-MacOSX10_11 +++ b/isis/make/config.darwin-MacOSX10_11 @@ -373,10 +373,6 @@ NNLIB = -lnn #--------------------------------------------------------------------------- # Setup for Bullet Physics library #--------------------------------------------------------------------------- -#BULLETLIB = -lBullet2FileLoader -lBullet3Collision -lBullet3Common \ -# -lBullet3Dynamics -lBullet3Geometry -lBullet3OpenCL_clew \ -# -lBulletCollision -lBulletDynamics -lBulletInverseDynamics \ -# -lBulletSoftBody -lLinearMath BULLETLIB = -lBullet3OpenCL_clew -lBullet3Common -lBullet3Geometry \ -lBulletSoftBody -lBulletDynamics -lBullet3Dynamics \ -lBulletInverseDynamics -lBulletCollision -lBullet3Collision \ -- GitLab From c45df6fc1c5c92138e7fa8cee56cf969ce813858 Mon Sep 17 00:00:00 2001 From: Cole <34170587+cneubauerUSGS@users.noreply.github.com> Date: Wed, 21 Mar 2018 10:11:53 -0700 Subject: [PATCH 127/620] change application.cpp match merge in isis3cmake --- isis/src/base/objs/Application/Application.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/isis/src/base/objs/Application/Application.cpp b/isis/src/base/objs/Application/Application.cpp index 1e32f38704..bcfd69cca8 100644 --- a/isis/src/base/objs/Application/Application.cpp +++ b/isis/src/base/objs/Application/Application.cpp @@ -110,6 +110,11 @@ namespace Isis { abort(); } + // add qt path to 3rdParty so no default is taken from enviroment + QString pluginPath = getenv("ISISROOT"); + pluginPath.append("/3rdParty/lib/"); + QCoreApplication::addLibraryPath(pluginPath); + // Get the starting cpu time, direct I/Os, page faults, and swaps //p_startClock = clock(); p_startDirectIO = DirectIO(); -- GitLab From c92bfd38cc02d1734a925500d6a905856fdb2912 Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Wed, 21 Mar 2018 10:17:27 -0700 Subject: [PATCH 128/620] Reverted top level Makefiles and added CMakeLists.txt to build filter --- isis/3rdParty/Makefile | 121 + isis/3rdParty/lib/README | 2 + isis/3rdParty/plugins/README | 2 + isis/Makefile | 12143 +-------------------------------- isis/src/Makefile | 4 +- 5 files changed, 472 insertions(+), 11800 deletions(-) create mode 100644 isis/3rdParty/Makefile create mode 100644 isis/3rdParty/lib/README create mode 100644 isis/3rdParty/plugins/README diff --git a/isis/3rdParty/Makefile b/isis/3rdParty/Makefile new file mode 100644 index 0000000000..8fe74939ea --- /dev/null +++ b/isis/3rdParty/Makefile @@ -0,0 +1,121 @@ +include $(ISISROOT)/make/isismake.os + +.PHONY: libs license plugins + +all: install + +install: libs license plugins + +#libs: license +libs: + @for library in $(THIRDPARTYLIBS); do \ + $(INSTALL3P) $(INSTALL3POPTS) $$library $(ISISROOT)/3rdParty/lib/; \ + echo $(CURTIMESTAMP) " Installing [$$library]"; \ + if [ "$(HOST_ARCH)" == "Linux" ]; then \ + for file in $$library; do \ + localFile=$(ISISROOT)/3rdParty/lib/`basename $$file`; \ + if [ ! -L "$$localFile" ]; then \ + existingRpath=`$(PATCHELF) --print-rpath "$$localFile" 2>&- | \ + cut -d '/' -f2-4`; \ + dollar='$$'; \ + newRpath=`echo "$${dollar}ORIGIN"`; \ + if [ "$$existingRpath" == "usgs/pkgs/local" ]; then \ + echo $(CURTIMESTAMP) " Patching [" `basename $$file` "]"; \ + $(PATCHELF) --set-rpath "$$newRpath" $$localFile; \ + fi; \ + fi; \ + done; \ + fi; \ + done; \ + for library in $(PATCHLIBS); do \ + $(INSTALL3P) $(INSTALL3POPTS) $$library $(ISISROOT)/3rdParty/lib/; \ + echo $(CURTIMESTAMP) " Installing [$$library]"; \ + if [ "$(HOST_ARCH)" == "Linux" ]; then \ + for file in $$library; do \ + localFile=$(ISISROOT)/3rdParty/lib/`basename $$file`; \ + if [ ! -L "$$localFile" ]; then \ + dollar='$$'; \ + newRpath=`echo "$${dollar}ORIGIN"`; \ + echo $(CURTIMESTAMP) " Patching [" `basename $$file` "]"; \ + $(PATCHELF) --set-rpath "$$newRpath" $$localFile; \ + fi; \ + done; \ + fi; \ + done; \ + if [ "$(HOST_ARCH)" == "Darwin" ]; then \ + chmod u+w $(ISISROOT)/3rdParty/lib/libcrypto.*.dylib; \ + chmod u+w $(ISISROOT)/3rdParty/lib/libssl.*.dylib; \ + chmod u+w $(ISISROOT)/3rdParty/lib/Python.framework/Versions/3.5/Python;\ + $(ISISROOT)/scripts/SetRunTimePath --libs \ + --libmap=$(ISISROOT)/scripts/darwin_lib_paths.lis \ + --liblog=DarwinLibs.lis --update \ + --relocdir=$(ISISROOT)/3rdParty/lib:$(ISISROOT)/3rdParty \ + --errlog=DarwinErrors.lis \ + `find $(ISISROOT)/3rdParty/lib -name '*.dylib*' -type f` \ + > /dev/null; \ + $(ISISROOT)/scripts/SetRunTimePath --libs \ + --libmap=$(ISISROOT)/scripts/qt_paths.lis \ + --liblog=DarwinLibs.lis \ + --relocdir=$(ISISROOT)/3rdParty/lib:$ISISROOT/3rdParty \ + --update \ + `find $(ISISROOT)/3rdParty/lib -name '[Qq]*' -print \ + -mindepth 3 -maxdepth 4 -type f` > /dev/null; \ + $(ISISROOT)/scripts/SetRunTimePath --bins \ + --libmap=$(ISISROOT)/scripts/darwin_bin_paths.lis \ + --liblog=DarwinLibs.lis \ + --relocdir=$(ISISROOT)/3rdParty/lib:$ISISROOT/3rdParty \ + --update \ + `find $(ISISROOT)/3rdParty/lib/Python.framework/Versions/3.5 \ + -name 'Python' -print -type f` > /dev/null; \ + chmod u-w $(ISISROOT)/3rdParty/lib/libcrypto.*.dylib; \ + chmod u-w $(ISISROOT)/3rdParty/lib/libssl.*.dylib; \ + chmod u-w $(ISISROOT)/3rdParty/lib/Python.framework/Versions/3.5/Python;\ + if [ -f "DarwinErrors.lis" ]; then \ + cat DarwinErrors.lis; \ + fi; \ + $(RM) DarwinErrors.lis DarwinLibs.lis; \ + fi + +license: + $(RSYNC) -a $(THIRDPARTYLICPATH) \ + $(ISISROOT)/3rdParty/license/ + +plugins: + @for plugs in $(THIRDPARTYPLUGINS); do \ + echo $(CURTIMESTAMP) " Installing [$$plugs...]"; \ + $(INSTALL3P) $(INSTALL3POPTS) $$plugs $(ISISROOT)/3rdParty/plugins/; \ + done; \ + if [ "$(HOST_ARCH)" == "Darwin" ]; then \ + $(ISISROOT)/scripts/SetRunTimePath --bundles \ + --libmap=$(ISISROOT)/scripts/qt_plugins_paths.lis \ + --liblog=DarwinLibs.lis --update \ + --relocdir=$(ISISROOT)/3rdParty/lib:$(ISISROOT)/3rdParty \ + --errlog=DarwinErrors.lis \ + `find $(ISISROOT)/3rdParty/plugins -name '*.bundle' -type f` \ + `find $(ISISROOT)/3rdParty/plugins -name '*.dylib' -type f` \ + > /dev/null; \ + if [ -f "DarwinErrors.lis" ]; then \ + cat DarwinErrors.lis; \ + fi; \ + $(RM) DarwinErrors.lis DarwinLibs.lis; \ + fi + + +clean: + rm -f lib/lib*.so* lib/lib*.dylib* lib/lib*.a + cd lib && rm -rf *.framework + $(RM) -rf license + @for plugs in plugins/*; do \ + if [ -d $$plugs -a $$plugs != "plugins/CVS" ]; \ + then \ + $(RM) -rf $$plugs; \ + fi \ + done; + +#---------------------------------------------------------------------------- +# Use to see values of variables +# Example: make print-HOST_OS +# Will print the make variable HOST_OS +#---------------------------------------------------------------------------- +print-% : + @echo '$* = $($*)' diff --git a/isis/3rdParty/lib/README b/isis/3rdParty/lib/README new file mode 100644 index 0000000000..370c2cc66e --- /dev/null +++ b/isis/3rdParty/lib/README @@ -0,0 +1,2 @@ +This directory contains O/S and hardware specific shared libraries needed +to execute ISIS applications diff --git a/isis/3rdParty/plugins/README b/isis/3rdParty/plugins/README new file mode 100644 index 0000000000..55cfae117e --- /dev/null +++ b/isis/3rdParty/plugins/README @@ -0,0 +1,2 @@ +This directory contains Qt plugins that are exported for use in Isis +applications. diff --git a/isis/Makefile b/isis/Makefile index a27a43b811..24fd4e1d5d 100644 --- a/isis/Makefile +++ b/isis/Makefile @@ -1,11802 +1,349 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.9 +include $(ISISROOT)/make/isismake.os + +#--------------------------------------------------------------------------- +# Set up ISIS versioning +#--------------------------------------------------------------------------- +#ISISVERSIONFULL := $(shell head -n 1 $(ISISROOT)/version | sed 's/\#.*//' | sed 's/ *$$//') +#ISISMAJOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f1) +#ISISMINOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f2) +#ISISMINORMINOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f3) +#ISISMINORMINORMINOR := $(shell echo $(ISISVERSIONFULL) | cut -d"." -f4) +#ISISVERSION := $(ISISMAJOR).$(ISISMINOR).$(ISISMINORMINOR).$(ISISMINORMINORMINOR) +#ISISLIBVERSION := $(shell echo $(ISISMAJOR).$(ISISMINOR).$(ISISMINORMINOR) | sed 's/[a-z].*$$//') +#ISISLOCALVERSION := $(shell head -n 3 $(ISISROOT)/version | tail -n 1 | sed 's/\#.*//' | sed 's/ *$$//') +#ISISRELEASE := REL_0_0 -# Default target executed when no arguments are given to make. -default_target: all - -.PHONY : default_target - -# Allow only one "make -f Makefile2" at a time, but pass parallelism. .NOTPARALLEL: - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - - -# Remove some rules from gmake that .SUFFIXES does not remove. -SUFFIXES = - -.SUFFIXES: .hpux_make_needs_suffix_list - - -# Suppress display of executed commands. -$(VERBOSE).SILENT: - - -# A target that is always out of date. -cmake_force: - -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E remove -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /scratch/isiscmake/isis - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /scratch/isiscmake/isis - -#============================================================================= -# Targets provided globally by CMake. - -# Special rule for the target install/strip -install/strip: preinstall - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." - /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake -.PHONY : install/strip - -# Special rule for the target install/strip -install/strip/fast: preinstall/fast - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." - /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake -.PHONY : install/strip/fast - -# Special rule for the target install -install: preinstall - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." - /usr/bin/cmake -P cmake_install.cmake -.PHONY : install - -# Special rule for the target install -install/fast: preinstall/fast - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." - /usr/bin/cmake -P cmake_install.cmake -.PHONY : install/fast - -# Special rule for the target list_install_components -list_install_components: - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" -.PHONY : list_install_components - -# Special rule for the target list_install_components -list_install_components/fast: list_install_components - -.PHONY : list_install_components/fast - -# Special rule for the target rebuild_cache -rebuild_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." - /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : rebuild_cache - -# Special rule for the target rebuild_cache -rebuild_cache/fast: rebuild_cache - -.PHONY : rebuild_cache/fast - -# Special rule for the target edit_cache -edit_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." - /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : edit_cache - -# Special rule for the target edit_cache -edit_cache/fast: edit_cache - -.PHONY : edit_cache/fast - -# Special rule for the target install/local -install/local: preinstall - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." - /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake -.PHONY : install/local - -# Special rule for the target install/local -install/local/fast: preinstall/fast - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." - /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake -.PHONY : install/local/fast - -# Special rule for the target test -test: - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." - /usr/bin/ctest --force-new-ctest-process $(ARGS) -.PHONY : test - -# Special rule for the target test -test/fast: test - -.PHONY : test/fast - -# The main all target -all: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles /scratch/isiscmake/isis/CMakeFiles/progress.marks - $(MAKE) -f CMakeFiles/Makefile2 all - $(CMAKE_COMMAND) -E cmake_progress_start /scratch/isiscmake/isis/CMakeFiles 0 -.PHONY : all - -# The main clean target +#---------------------------------------------------------------------------- +# Let the user know how to use the system +#---------------------------------------------------------------------------- +help: + echo "Isis Make System Commands" + echo "------------------------ " + echo "make all : Build and install the entire system (incs,api,apps,docs)" + echo "make thirdParty : Copy required 3rdParty libraries into distribution" + echo "make incs : Install API include files" + echo "make api : Build and install the Isis API" + echo "make apps : Build and install Isis Applications" + echo "make docs : Build Isis Web Documentation" + echo "make quickclean : Clean binaries from source tree but not app test areas" + echo "make cleansrc : Clean binaries from source tree" + echo "make clean : Clean source tree and install area" + echo "make unitTest : Build and execute unit tests for Isis API" + echo "make appTest : Build and execute application tests" + echo "make catTest : Build and execute category tests" + echo "make coverage : Build a test coverage report from generated coverage info" + +#---------------------------------------------------------------------------- +# Target = all +# Dependencies = includes api applications documentation thirdParty +# +# The API include files must be installed before the API can be constructed. +# After the API is created then the applications can be individually built +# and installed. Finally create the web documentation for the entire system. +#---------------------------------------------------------------------------- +all: incs thirdParty api apps docs + +#---------------------------------------------------------------------------- +# Target = incs +# Dependencies = none +# +# The API include files will be installed in $(ISISROOT)/inc. The Isis +# make system will traverse the objs directories (src/base/objs/*) and +# copy the include file from the individual object directory into the +# system directory $(ISISROOT)/inc. +#---------------------------------------------------------------------------- +incs: + echo $(CURTIMESTAMP) "Installing include files" + mkdir -p inc + $(MAKE) --directory=src includes + echo $(CURTIMESTAMP) "Finished installing include files" + echo $(CURTIMESTAMP) " " + +#---------------------------------------------------------------------------- +# Target = api +# Dependencies = objects +# +# The Isis API is essentially libisis.a which will be created in the +# directory $(ISISROOT)/lib. Make api traverses the objs directories +# (src/base/objs/*) and archives the ".o" files into libisis.a. Therefore +# the ".o" files must exist. +# +# Target = objects +# Dependencies = none +# +# Before the API can be built each individual object must be built. +# This target will traverse the objs directories and create the C++ +# object classes leaving the ".o" file in each individual directory. +# The API is not created until "make api" is performed +# +# Finally after the API is completed the shared libraries will be +# constructed from libisis.a +#---------------------------------------------------------------------------- + +api: + echo $(CURTIMESTAMP) "Building Isis API" + mkdir -p lib + $(MAKE) --directory=src objects + echo $(CURTIMESTAMP) "Finished building Isis API" + echo $(CURTIMESTAMP) "" + echo $(CURTIMESTAMP) "Adding API objects" + if [ "$(HOST_ARCH)" == "Linux" ]; then \ + $(MAKE) --directory=src api; \ + elif [ "$(HOST_ARCH)" == "Darwin" ]; then \ + $(MAKE) osx_static; \ + fi; + echo $(CURTIMESTAMP) "Finished adding API objects" + echo $(CURTIMESTAMP) " " + echo $(CURTIMESTAMP) "Creating Shared Libraries ..." + cp make/Makefile.libs lib/Makefile + $(MAKE) --directory=lib shared + echo $(CURTIMESTAMP) "Finished creating Shared Libraries ..." + echo $(CURTIMESTAMP) " " + +# Make the static library on Macos, faster then recursivly call make +osx_static: + $(eval UNIT_TESTS=$(wildcard src/*/objs/*/unitTest.o)) + $(eval PLUGIN_DIRS=$(dir $(wildcard src/*/objs/*/*.plugin))) + $(eval PLUGIN_FILES=$(foreach dir,$(PLUGIN_DIRS),$(wildcard $(dir)*.o))) + $(eval API_OBJS=$(filter-out $(PLUGIN_FILES),$(filter-out $(UNIT_TESTS),$(wildcard src/*/objs/*/*.o)))) + $(AR) -crs $(ISISROOT)/lib/libisis$(ISISLIBVERSION).a $(API_OBJS); + for i in $(PLUGIN_DIRS); do \ + $(MAKE) --directory=$$i plugin install; \ + done + +# echo "Building Isis API with debugging" +# cd src; $(MAKE) objects MODE=DEBUG +# cd src; $(MAKE) api MODE=DEBUG +# echo "Finished building Isis API with debugging" +# echo " " + +#---------------------------------------------------------------------------- +# Target = apps +# Dependencies = none +# +# This will build and install all the Isis application in the directory +# $(ISISROOT)/bin. It also installs the application Xml file in +# $(ISISROOT/bin/xml. Again the make system traverse the apps directories +# (src/base/apps) and builds/installs each application. Of course the +# API must be built for this to work properly +#---------------------------------------------------------------------------- +apps: + echo $(CURTIMESTAMP) "Building Isis Applications" + mkdir -p bin/xml + $(MAKE) --directory=src applications + echo $(CURTIMESTAMP) "Finished building Isis Applications" + echo $(CURTIMESTAMP) " " + +#---------------------------------------------------------------------------- +# Target = docs +# Dependencies = none +# +# This target traverse both the objs and apps directories and moves the +# Xml and assets directories into specific sub-directories under +# $(ISISROOT)/src/docsys. Then it builds the entire docsys tree which +# generates the Isis Documentation under $(ISISROOT)/doc +#---------------------------------------------------------------------------- +docs: + echo $(CURTIMESTAMP) "Building Isis Documentation" + mkdir -p doc + $(MAKE) --directory=src documentation + $(MAKE) --directory=src/docsys docs + echo $(CURTIMESTAMP) "Finished building Isis Documentation" + + +#---------------------------------------------------------------------------- +# Target = coverage +# Dependencies = none +# +# This target builds a report on how much of Isis is tested in the automated +# tests. This is currently excluding applications that run other applications +# because of the amount of time it takes to generate the report (and that's +# not how we want to test our applications ideally). +#---------------------------------------------------------------------------- +coverage: + if [ "$(CODE_COVERAGE_BIN_DIR)" == "" ]; then \ + echo "Make sure you use MODE=TC when building Isis for a coverage" \ + "report."; \ + exit 1; \ + fi; \ + $(ECHO) $(CURTIMESTAMP) "Finding coverage information..."; \ + CSMESFILES=( lib/libisis$(ISISLIBVERSION).so.csmes \ + `find src/*/apps -name "*.o.csmes" | grep -v moc_` ); \ + CSEXEFILES=(`find src/ -name "*.csexe"` `find bin/ -name "*.csexe"`); \ + if [ "$${#CSMESFILES[@]}" == "0" ] || \ + [ "$${#CSEXEFILES[@]}" == "0" ]; then \ + echo "Please build Isis and run the tests with MODE=TC before " \ + "trying to build a coverage report."; \ + exit 1; \ + fi; \ + $(ECHO) $(CURTIMESTAMP) "Merging source file information into isis.csmes..."; \ + $(CODE_COVERAGE_BIN_DIR)/cmmerge $${CSMESFILES[@]} -o isis.csmes; \ + $(ECHO) $(CURTIMESTAMP) "Adding test execution records into isis.csmes..."; \ + for CSEXEFILE in $${CSEXEFILES[@]}; do \ + EXETESTNAME="$$CSEXEFILE"; \ + APPTESTAPPNAME=`echo $$CSEXEFILE | sed 's#\\(.*/apps/\\)\\([a-zA-Z0-9]*\\)\\(/tsts/\\)\([^/]*\)\(/.*\)#\\2#'`; \ + CSEXEAPPNAME=`basename $$CSEXEFILE | sed 's/.csexe//'`; \ + if [ "$$APPTESTAPPNAME" == "$$CSEXEFILE" ] || \ + [ "$$APPTESTAPPNAME" == "$$CSEXEAPPNAME" ] || \ + [ "`dirname $$CSEXEFILE`" == "bin" ]; then \ + EXETESTNAME=`echo $$EXETESTNAME | sed 's#\\(.*/apps/\\)\\([a-zA-Z0-9]*\\)\\(/tsts/\\)\([^/]*\)\(/.*\)#\\2 Application Test (case \\4\\)#'`; \ + EXETESTNAME=`echo $$EXETESTNAME | sed 's#\\(src/\\)\\([a-zA-Z0-9]*\\)\\(/tsts/\\)\\([a-zA-Z0-9]*\\)\\(.*\\)#\\2 Category Test (case \\4\\)#'`; \ + EXETESTNAME=`echo $$EXETESTNAME | sed 's#\\(.*/\\)\\([^/]*\\)\\(/unitTest.csexe\\)#\\2 Unit Test#'`; \ + $(ECHO) -e $(CURTIMESTAMP) " Adding [$$EXETESTNAME] `basename $$CSEXEFILE`"; \ + $(CODE_COVERAGE_BIN_DIR)/cmcsexeimport -t "$$EXETESTNAME" \ + -e $$CSEXEFILE -m "isis.csmes"; \ + fi; \ + done; \ + $(ECHO) -ne $(CURTIMESTAMP) "Scope Coverage: "; \ + $(CODE_COVERAGE_BIN_DIR)/cmreport \ + --title="Isis System-Wide Test Scope Coverage" \ + -m "`basename $$PWD`.csmes" --select=".*" --bargraph --toc --stat \ + --global=all --method=all --source=all --execution=all \ + --method-sort=coverage --execution-sort=coverage \ + --source-sort=coverage -h scopecoverage; \ + $(ECHO) -ne $(CURTIMESTAMP) "Line Coverage: "; \ + $(CODE_COVERAGE_BIN_DIR)/cmreport \ + --title="Isis System-Wide Test Line Coverage" \ + -m "`basename $$PWD`.csmes" --select=".*" --bargraph --toc --stat \ + --global=all --method=all --source=all --execution=all \ + --method-sort=coverage --execution-sort=coverage \ + --source-sort=coverage --line-coverage -h linecoverage; \ + $(ECHO) -ne $(CURTIMESTAMP) "Function Coverage: "; \ + $(CODE_COVERAGE_BIN_DIR)/cmreport \ + --title="Isis System-Wide Test Function Coverage" \ + -m "`basename $$PWD`.csmes" --select=".*" --bargraph --toc --stat \ + --global=all --method=all --source=all --execution=all \ + --method-sort=coverage --execution-sort=coverage \ + --source-sort=coverage --function-coverage -h functioncoverage; + + +#---------------------------------------------------------------------------- +# Target = quickclean +# +# This target cleans the entire Isis system enough for a recompile. It cleans ".o" files and +# binary executables from the source tree. It also, clears the running +# areas under $ISISROOT (inc, doc, bin, bin/xml, and lib) +# +# Target = quickclean +# Dependencies = none +# +# This walks the src tree and removes ".o" files and binary files +#---------------------------------------------------------------------------- +quickclean: + echo $(CURTIMESTAMP) "Cleaning Isis (quick)"; \ + $(MAKE) --directory=src quickclean; \ + rm -rf inc; \ + rm -rf doc; \ + rm -rf bin; \ + rm -rf lib; \ + rm -rf scripts/tabcomplete.csh; \ + rm -rf scopecoverage scopecoverage.html linecoverage linecoverage.html \ + functioncoverage functioncoverage.html *.csmes *.csexe; \ + $(MAKE) --directory=3rdParty clean; \ + echo $(CURTIMESTAMP) "Finished cleaning Isis"; + +#---------------------------------------------------------------------------- +# Target = clean +# Dependencies = cleansrc +# +# This target cleans the entire Isis system. It cleans ".o" files and +# binary executables from the source tree. It also clears the running +# areas under $ISISROOT (inc, doc, bini, bin/xml, and lib) +# +# Target = cleansrc +# Dependencies = none +# +# This walks the src tree and removes ".o" files and binary files +#---------------------------------------------------------------------------- clean: - $(MAKE) -f CMakeFiles/Makefile2 clean -.PHONY : clean - -# The main clean target -clean/fast: clean - -.PHONY : clean/fast - -# Prepare targets for installation. -preinstall: all - $(MAKE) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall - -# Prepare targets for installation. -preinstall/fast: - $(MAKE) -f CMakeFiles/Makefile2 preinstall -.PHONY : preinstall/fast - -# clear depends -depend: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 -.PHONY : depend - -#============================================================================= -# Target rules for targets named docs - -# Build rule for target. -docs: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 docs -.PHONY : docs - -# fast build rule for target. -docs/fast: - $(MAKE) -f CMakeFiles/docs.dir/build.make CMakeFiles/docs.dir/build -.PHONY : docs/fast - -#============================================================================= -# Target rules for targets named ContinuousSubmit - -# Build rule for target. -ContinuousSubmit: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousSubmit -.PHONY : ContinuousSubmit - -# fast build rule for target. -ContinuousSubmit/fast: - $(MAKE) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/build -.PHONY : ContinuousSubmit/fast - -#============================================================================= -# Target rules for targets named ContinuousCoverage - -# Build rule for target. -ContinuousCoverage: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousCoverage -.PHONY : ContinuousCoverage - -# fast build rule for target. -ContinuousCoverage/fast: - $(MAKE) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/build -.PHONY : ContinuousCoverage/fast - -#============================================================================= -# Target rules for targets named ContinuousTest - -# Build rule for target. -ContinuousTest: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousTest -.PHONY : ContinuousTest - -# fast build rule for target. -ContinuousTest/fast: - $(MAKE) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/build -.PHONY : ContinuousTest/fast - -#============================================================================= -# Target rules for targets named ContinuousBuild - -# Build rule for target. -ContinuousBuild: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousBuild -.PHONY : ContinuousBuild - -# fast build rule for target. -ContinuousBuild/fast: - $(MAKE) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/build -.PHONY : ContinuousBuild/fast - -#============================================================================= -# Target rules for targets named ContinuousMemCheck - -# Build rule for target. -ContinuousMemCheck: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousMemCheck -.PHONY : ContinuousMemCheck - -# fast build rule for target. -ContinuousMemCheck/fast: - $(MAKE) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/build -.PHONY : ContinuousMemCheck/fast - -#============================================================================= -# Target rules for targets named Nightly - -# Build rule for target. -Nightly: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Nightly -.PHONY : Nightly - -# fast build rule for target. -Nightly/fast: - $(MAKE) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/build -.PHONY : Nightly/fast - -#============================================================================= -# Target rules for targets named NightlyTest - -# Build rule for target. -NightlyTest: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyTest -.PHONY : NightlyTest - -# fast build rule for target. -NightlyTest/fast: - $(MAKE) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/build -.PHONY : NightlyTest/fast - -#============================================================================= -# Target rules for targets named NightlyUpdate - -# Build rule for target. -NightlyUpdate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyUpdate -.PHONY : NightlyUpdate - -# fast build rule for target. -NightlyUpdate/fast: - $(MAKE) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/build -.PHONY : NightlyUpdate/fast - -#============================================================================= -# Target rules for targets named Continuous - -# Build rule for target. -Continuous: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Continuous -.PHONY : Continuous - -# fast build rule for target. -Continuous/fast: - $(MAKE) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/build -.PHONY : Continuous/fast - -#============================================================================= -# Target rules for targets named NightlyBuild - -# Build rule for target. -NightlyBuild: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyBuild -.PHONY : NightlyBuild - -# fast build rule for target. -NightlyBuild/fast: - $(MAKE) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/build -.PHONY : NightlyBuild/fast - -#============================================================================= -# Target rules for targets named NightlyStart - -# Build rule for target. -NightlyStart: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyStart -.PHONY : NightlyStart - -# fast build rule for target. -NightlyStart/fast: - $(MAKE) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/build -.PHONY : NightlyStart/fast - -#============================================================================= -# Target rules for targets named NightlyMemoryCheck - -# Build rule for target. -NightlyMemoryCheck: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyMemoryCheck -.PHONY : NightlyMemoryCheck - -# fast build rule for target. -NightlyMemoryCheck/fast: - $(MAKE) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/build -.PHONY : NightlyMemoryCheck/fast - -#============================================================================= -# Target rules for targets named NightlyMemCheck - -# Build rule for target. -NightlyMemCheck: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyMemCheck -.PHONY : NightlyMemCheck - -# fast build rule for target. -NightlyMemCheck/fast: - $(MAKE) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/build -.PHONY : NightlyMemCheck/fast - -#============================================================================= -# Target rules for targets named clean_source - -# Build rule for target. -clean_source: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clean_source -.PHONY : clean_source - -# fast build rule for target. -clean_source/fast: - $(MAKE) -f CMakeFiles/clean_source.dir/build.make CMakeFiles/clean_source.dir/build -.PHONY : clean_source/fast - -#============================================================================= -# Target rules for targets named ExperimentalStart - -# Build rule for target. -ExperimentalStart: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalStart -.PHONY : ExperimentalStart - -# fast build rule for target. -ExperimentalStart/fast: - $(MAKE) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/build -.PHONY : ExperimentalStart/fast - -#============================================================================= -# Target rules for targets named ContinuousConfigure - -# Build rule for target. -ContinuousConfigure: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousConfigure -.PHONY : ContinuousConfigure - -# fast build rule for target. -ContinuousConfigure/fast: - $(MAKE) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/build -.PHONY : ContinuousConfigure/fast - -#============================================================================= -# Target rules for targets named NightlyCoverage - -# Build rule for target. -NightlyCoverage: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyCoverage -.PHONY : NightlyCoverage - -# fast build rule for target. -NightlyCoverage/fast: - $(MAKE) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/build -.PHONY : NightlyCoverage/fast - -#============================================================================= -# Target rules for targets named ExperimentalUpdate - -# Build rule for target. -ExperimentalUpdate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalUpdate -.PHONY : ExperimentalUpdate - -# fast build rule for target. -ExperimentalUpdate/fast: - $(MAKE) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/build -.PHONY : ExperimentalUpdate/fast - -#============================================================================= -# Target rules for targets named ExperimentalConfigure - -# Build rule for target. -ExperimentalConfigure: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalConfigure -.PHONY : ExperimentalConfigure - -# fast build rule for target. -ExperimentalConfigure/fast: - $(MAKE) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/build -.PHONY : ExperimentalConfigure/fast - -#============================================================================= -# Target rules for targets named ExperimentalCoverage - -# Build rule for target. -ExperimentalCoverage: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalCoverage -.PHONY : ExperimentalCoverage - -# fast build rule for target. -ExperimentalCoverage/fast: - $(MAKE) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/build -.PHONY : ExperimentalCoverage/fast - -#============================================================================= -# Target rules for targets named ExperimentalBuild - -# Build rule for target. -ExperimentalBuild: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalBuild -.PHONY : ExperimentalBuild - -# fast build rule for target. -ExperimentalBuild/fast: - $(MAKE) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/build -.PHONY : ExperimentalBuild/fast - -#============================================================================= -# Target rules for targets named NightlyConfigure - -# Build rule for target. -NightlyConfigure: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlyConfigure -.PHONY : NightlyConfigure - -# fast build rule for target. -NightlyConfigure/fast: - $(MAKE) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/build -.PHONY : NightlyConfigure/fast - -#============================================================================= -# Target rules for targets named ExperimentalTest - -# Build rule for target. -ExperimentalTest: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalTest -.PHONY : ExperimentalTest - -# fast build rule for target. -ExperimentalTest/fast: - $(MAKE) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/build -.PHONY : ExperimentalTest/fast - -#============================================================================= -# Target rules for targets named ExperimentalMemCheck - -# Build rule for target. -ExperimentalMemCheck: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalMemCheck -.PHONY : ExperimentalMemCheck - -# fast build rule for target. -ExperimentalMemCheck/fast: - $(MAKE) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/build -.PHONY : ExperimentalMemCheck/fast - -#============================================================================= -# Target rules for targets named Experimental - -# Build rule for target. -Experimental: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Experimental -.PHONY : Experimental - -# fast build rule for target. -Experimental/fast: - $(MAKE) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/build -.PHONY : Experimental/fast - -#============================================================================= -# Target rules for targets named NightlySubmit - -# Build rule for target. -NightlySubmit: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NightlySubmit -.PHONY : NightlySubmit - -# fast build rule for target. -NightlySubmit/fast: - $(MAKE) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/build -.PHONY : NightlySubmit/fast - -#============================================================================= -# Target rules for targets named ExperimentalSubmit - -# Build rule for target. -ExperimentalSubmit: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ExperimentalSubmit -.PHONY : ExperimentalSubmit - -# fast build rule for target. -ExperimentalSubmit/fast: - $(MAKE) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/build -.PHONY : ExperimentalSubmit/fast - -#============================================================================= -# Target rules for targets named ContinuousStart - -# Build rule for target. -ContinuousStart: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousStart -.PHONY : ContinuousStart - -# fast build rule for target. -ContinuousStart/fast: - $(MAKE) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/build -.PHONY : ContinuousStart/fast - -#============================================================================= -# Target rules for targets named ContinuousUpdate - -# Build rule for target. -ContinuousUpdate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ContinuousUpdate -.PHONY : ContinuousUpdate - -# fast build rule for target. -ContinuousUpdate/fast: - $(MAKE) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/build -.PHONY : ContinuousUpdate/fast - -#============================================================================= -# Target rules for targets named VoyagerCamera - -# Build rule for target. -VoyagerCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 VoyagerCamera -.PHONY : VoyagerCamera - -# fast build rule for target. -VoyagerCamera/fast: - $(MAKE) -f objects/CMakeFiles/VoyagerCamera.dir/build.make objects/CMakeFiles/VoyagerCamera.dir/build -.PHONY : VoyagerCamera/fast - -#============================================================================= -# Target rules for targets named viknonoodle_app - -# Build rule for target. -viknonoodle_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 viknonoodle_app -.PHONY : viknonoodle_app - -# fast build rule for target. -viknonoodle_app/fast: - $(MAKE) -f objects/CMakeFiles/viknonoodle_app.dir/build.make objects/CMakeFiles/viknonoodle_app.dir/build -.PHONY : viknonoodle_app/fast - -#============================================================================= -# Target rules for targets named vikcal_app - -# Build rule for target. -vikcal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vikcal_app -.PHONY : vikcal_app - -# fast build rule for target. -vikcal_app/fast: - $(MAKE) -f objects/CMakeFiles/vikcal_app.dir/build.make objects/CMakeFiles/vikcal_app.dir/build -.PHONY : vikcal_app/fast - -#============================================================================= -# Target rules for targets named vik2isis_app - -# Build rule for target. -vik2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vik2isis_app -.PHONY : vik2isis_app - -# fast build rule for target. -vik2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/vik2isis_app.dir/build.make objects/CMakeFiles/vik2isis_app.dir/build -.PHONY : vik2isis_app/fast - -#============================================================================= -# Target rules for targets named rososiris2isis_app - -# Build rule for target. -rososiris2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 rososiris2isis_app -.PHONY : rososiris2isis_app - -# fast build rule for target. -rososiris2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/rososiris2isis_app.dir/build.make objects/CMakeFiles/rososiris2isis_app.dir/build -.PHONY : rososiris2isis_app/fast - -#============================================================================= -# Target rules for targets named RosettaVirtisCamera - -# Build rule for target. -RosettaVirtisCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 RosettaVirtisCamera -.PHONY : RosettaVirtisCamera - -# fast build rule for target. -RosettaVirtisCamera/fast: - $(MAKE) -f objects/CMakeFiles/RosettaVirtisCamera.dir/build.make objects/CMakeFiles/RosettaVirtisCamera.dir/build -.PHONY : RosettaVirtisCamera/fast - -#============================================================================= -# Target rules for targets named thmvisflat_app - -# Build rule for target. -thmvisflat_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thmvisflat_app -.PHONY : thmvisflat_app - -# fast build rule for target. -thmvisflat_app/fast: - $(MAKE) -f objects/CMakeFiles/thmvisflat_app.dir/build.make objects/CMakeFiles/thmvisflat_app.dir/build -.PHONY : thmvisflat_app/fast - -#============================================================================= -# Target rules for targets named ThemisVisCamera - -# Build rule for target. -ThemisVisCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ThemisVisCamera -.PHONY : ThemisVisCamera - -# fast build rule for target. -ThemisVisCamera/fast: - $(MAKE) -f objects/CMakeFiles/ThemisVisCamera.dir/build.make objects/CMakeFiles/ThemisVisCamera.dir/build -.PHONY : ThemisVisCamera/fast - -#============================================================================= -# Target rules for targets named mroctx2isis_app - -# Build rule for target. -mroctx2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mroctx2isis_app -.PHONY : mroctx2isis_app - -# fast build rule for target. -mroctx2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mroctx2isis_app.dir/build.make objects/CMakeFiles/mroctx2isis_app.dir/build -.PHONY : mroctx2isis_app/fast - -#============================================================================= -# Target rules for targets named marcical_app - -# Build rule for target. -marcical_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 marcical_app -.PHONY : marcical_app - -# fast build rule for target. -marcical_app/fast: - $(MAKE) -f objects/CMakeFiles/marcical_app.dir/build.make objects/CMakeFiles/marcical_app.dir/build -.PHONY : marcical_app/fast - -#============================================================================= -# Target rules for targets named marci2isis_app - -# Build rule for target. -marci2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 marci2isis_app -.PHONY : marci2isis_app - -# fast build rule for target. -marci2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/marci2isis_app.dir/build.make objects/CMakeFiles/marci2isis_app.dir/build -.PHONY : marci2isis_app/fast - -#============================================================================= -# Target rules for targets named histitch_app - -# Build rule for target. -histitch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 histitch_app -.PHONY : histitch_app - -# fast build rule for target. -histitch_app/fast: - $(MAKE) -f objects/CMakeFiles/histitch_app.dir/build.make objects/CMakeFiles/histitch_app.dir/build -.PHONY : histitch_app/fast - -#============================================================================= -# Target rules for targets named histat_app - -# Build rule for target. -histat_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 histat_app -.PHONY : histat_app - -# fast build rule for target. -histat_app/fast: - $(MAKE) -f objects/CMakeFiles/histat_app.dir/build.make objects/CMakeFiles/histat_app.dir/build -.PHONY : histat_app/fast - -#============================================================================= -# Target rules for targets named hirdrgen_app - -# Build rule for target. -hirdrgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hirdrgen_app -.PHONY : hirdrgen_app - -# fast build rule for target. -hirdrgen_app/fast: - $(MAKE) -f objects/CMakeFiles/hirdrgen_app.dir/build.make objects/CMakeFiles/hirdrgen_app.dir/build -.PHONY : hirdrgen_app/fast - -#============================================================================= -# Target rules for targets named hinoise_app - -# Build rule for target. -hinoise_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hinoise_app -.PHONY : hinoise_app - -# fast build rule for target. -hinoise_app/fast: - $(MAKE) -f objects/CMakeFiles/hinoise_app.dir/build.make objects/CMakeFiles/hinoise_app.dir/build -.PHONY : hinoise_app/fast - -#============================================================================= -# Target rules for targets named hisharpen_app - -# Build rule for target. -hisharpen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hisharpen_app -.PHONY : hisharpen_app - -# fast build rule for target. -hisharpen_app/fast: - $(MAKE) -f objects/CMakeFiles/hisharpen_app.dir/build.make objects/CMakeFiles/hisharpen_app.dir/build -.PHONY : hisharpen_app/fast - -#============================================================================= -# Target rules for targets named hijitter_app - -# Build rule for target. -hijitter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hijitter_app -.PHONY : hijitter_app - -# fast build rule for target. -hijitter_app/fast: - $(MAKE) -f objects/CMakeFiles/hijitter_app.dir/build.make objects/CMakeFiles/hijitter_app.dir/build -.PHONY : hijitter_app/fast - -#============================================================================= -# Target rules for targets named hifringe_app - -# Build rule for target. -hifringe_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hifringe_app -.PHONY : hifringe_app - -# fast build rule for target. -hifringe_app/fast: - $(MAKE) -f objects/CMakeFiles/hifringe_app.dir/build.make objects/CMakeFiles/hifringe_app.dir/build -.PHONY : hifringe_app/fast - -#============================================================================= -# Target rules for targets named hidtmgen_app - -# Build rule for target. -hidtmgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hidtmgen_app -.PHONY : hidtmgen_app - -# fast build rule for target. -hidtmgen_app/fast: - $(MAKE) -f objects/CMakeFiles/hidtmgen_app.dir/build.make objects/CMakeFiles/hidtmgen_app.dir/build -.PHONY : hidtmgen_app/fast - -#============================================================================= -# Target rules for targets named hicrop_app - -# Build rule for target. -hicrop_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hicrop_app -.PHONY : hicrop_app - -# fast build rule for target. -hicrop_app/fast: - $(MAKE) -f objects/CMakeFiles/hicrop_app.dir/build.make objects/CMakeFiles/hicrop_app.dir/build -.PHONY : hicrop_app/fast - -#============================================================================= -# Target rules for targets named hiccdstitch_app - -# Build rule for target. -hiccdstitch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hiccdstitch_app -.PHONY : hiccdstitch_app - -# fast build rule for target. -hiccdstitch_app/fast: - $(MAKE) -f objects/CMakeFiles/hiccdstitch_app.dir/build.make objects/CMakeFiles/hiccdstitch_app.dir/build -.PHONY : hiccdstitch_app/fast - -#============================================================================= -# Target rules for targets named hicalproc_app - -# Build rule for target. -hicalproc_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hicalproc_app -.PHONY : hicalproc_app - -# fast build rule for target. -hicalproc_app/fast: - $(MAKE) -f objects/CMakeFiles/hicalproc_app.dir/build.make objects/CMakeFiles/hicalproc_app.dir/build -.PHONY : hicalproc_app/fast - -#============================================================================= -# Target rules for targets named hical_app - -# Build rule for target. -hical_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hical_app -.PHONY : hical_app - -# fast build rule for target. -hical_app/fast: - $(MAKE) -f objects/CMakeFiles/hical_app.dir/build.make objects/CMakeFiles/hical_app.dir/build -.PHONY : hical_app/fast - -#============================================================================= -# Target rules for targets named ctxcal_app - -# Build rule for target. -ctxcal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ctxcal_app -.PHONY : ctxcal_app - -# fast build rule for target. -ctxcal_app/fast: - $(MAKE) -f objects/CMakeFiles/ctxcal_app.dir/build.make objects/CMakeFiles/ctxcal_app.dir/build -.PHONY : ctxcal_app/fast - -#============================================================================= -# Target rules for targets named crism2isis_app - -# Build rule for target. -crism2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 crism2isis_app -.PHONY : crism2isis_app - -# fast build rule for target. -crism2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/crism2isis_app.dir/build.make objects/CMakeFiles/crism2isis_app.dir/build -.PHONY : crism2isis_app/fast - -#============================================================================= -# Target rules for targets named mro_unit_test_MarciCamera - -# Build rule for target. -mro_unit_test_MarciCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_MarciCamera -.PHONY : mro_unit_test_MarciCamera - -# fast build rule for target. -mro_unit_test_MarciCamera/fast: - $(MAKE) -f objects/CMakeFiles/mro_unit_test_MarciCamera.dir/build.make objects/CMakeFiles/mro_unit_test_MarciCamera.dir/build -.PHONY : mro_unit_test_MarciCamera/fast - -#============================================================================= -# Target rules for targets named mro_unit_test_HiriseCamera - -# Build rule for target. -mro_unit_test_HiriseCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_HiriseCamera -.PHONY : mro_unit_test_HiriseCamera - -# fast build rule for target. -mro_unit_test_HiriseCamera/fast: - $(MAKE) -f objects/CMakeFiles/mro_unit_test_HiriseCamera.dir/build.make objects/CMakeFiles/mro_unit_test_HiriseCamera.dir/build -.PHONY : mro_unit_test_HiriseCamera/fast - -#============================================================================= -# Target rules for targets named mro_unit_test_CTXCamera - -# Build rule for target. -mro_unit_test_CTXCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_CTXCamera -.PHONY : mro_unit_test_CTXCamera - -# fast build rule for target. -mro_unit_test_CTXCamera/fast: - $(MAKE) -f objects/CMakeFiles/mro_unit_test_CTXCamera.dir/build.make objects/CMakeFiles/mro_unit_test_CTXCamera.dir/build -.PHONY : mro_unit_test_CTXCamera/fast - -#============================================================================= -# Target rules for targets named mro - -# Build rule for target. -mro: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro -.PHONY : mro - -# fast build rule for target. -mro/fast: - $(MAKE) -f objects/CMakeFiles/mro.dir/build.make objects/CMakeFiles/mro.dir/build -.PHONY : mro/fast - -#============================================================================= -# Target rules for targets named HiriseCamera - -# Build rule for target. -HiriseCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HiriseCamera -.PHONY : HiriseCamera - -# fast build rule for target. -HiriseCamera/fast: - $(MAKE) -f objects/CMakeFiles/HiriseCamera.dir/build.make objects/CMakeFiles/HiriseCamera.dir/build -.PHONY : HiriseCamera/fast - -#============================================================================= -# Target rules for targets named CrismCamera - -# Build rule for target. -CrismCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 CrismCamera -.PHONY : CrismCamera - -# fast build rule for target. -CrismCamera/fast: - $(MAKE) -f objects/CMakeFiles/CrismCamera.dir/build.make objects/CMakeFiles/CrismCamera.dir/build -.PHONY : CrismCamera/fast - -#============================================================================= -# Target rules for targets named mocuncompress_app - -# Build rule for target. -mocuncompress_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mocuncompress_app -.PHONY : mocuncompress_app - -# fast build rule for target. -mocuncompress_app/fast: - $(MAKE) -f objects/CMakeFiles/mocuncompress_app.dir/build.make objects/CMakeFiles/mocuncompress_app.dir/build -.PHONY : mocuncompress_app/fast - -#============================================================================= -# Target rules for targets named mocproc_app - -# Build rule for target. -mocproc_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mocproc_app -.PHONY : mocproc_app - -# fast build rule for target. -mocproc_app/fast: - $(MAKE) -f objects/CMakeFiles/mocproc_app.dir/build.make objects/CMakeFiles/mocproc_app.dir/build -.PHONY : mocproc_app/fast - -#============================================================================= -# Target rules for targets named mocnoise50_app - -# Build rule for target. -mocnoise50_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mocnoise50_app -.PHONY : mocnoise50_app - -# fast build rule for target. -mocnoise50_app/fast: - $(MAKE) -f objects/CMakeFiles/mocnoise50_app.dir/build.make objects/CMakeFiles/mocnoise50_app.dir/build -.PHONY : mocnoise50_app/fast - -#============================================================================= -# Target rules for targets named mocgap_app - -# Build rule for target. -mocgap_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mocgap_app -.PHONY : mocgap_app - -# fast build rule for target. -mocgap_app/fast: - $(MAKE) -f objects/CMakeFiles/mocgap_app.dir/build.make objects/CMakeFiles/mocgap_app.dir/build -.PHONY : mocgap_app/fast - -#============================================================================= -# Target rules for targets named moccal_app - -# Build rule for target. -moccal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 moccal_app -.PHONY : moccal_app - -# fast build rule for target. -moccal_app/fast: - $(MAKE) -f objects/CMakeFiles/moccal_app.dir/build.make objects/CMakeFiles/moccal_app.dir/build -.PHONY : moccal_app/fast - -#============================================================================= -# Target rules for targets named mgs_unit_test_MocWideAngleCamera - -# Build rule for target. -mgs_unit_test_MocWideAngleCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocWideAngleCamera -.PHONY : mgs_unit_test_MocWideAngleCamera - -# fast build rule for target. -mgs_unit_test_MocWideAngleCamera/fast: - $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocWideAngleCamera.dir/build.make objects/CMakeFiles/mgs_unit_test_MocWideAngleCamera.dir/build -.PHONY : mgs_unit_test_MocWideAngleCamera/fast - -#============================================================================= -# Target rules for targets named mgs_unit_test_MocLabels - -# Build rule for target. -mgs_unit_test_MocLabels: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocLabels -.PHONY : mgs_unit_test_MocLabels - -# fast build rule for target. -mgs_unit_test_MocLabels/fast: - $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocLabels.dir/build.make objects/CMakeFiles/mgs_unit_test_MocLabels.dir/build -.PHONY : mgs_unit_test_MocLabels/fast - -#============================================================================= -# Target rules for targets named mdisedrinfo_app - -# Build rule for target. -mdisedrinfo_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mdisedrinfo_app -.PHONY : mdisedrinfo_app - -# fast build rule for target. -mdisedrinfo_app/fast: - $(MAKE) -f objects/CMakeFiles/mdisedrinfo_app.dir/build.make objects/CMakeFiles/mdisedrinfo_app.dir/build -.PHONY : mdisedrinfo_app/fast - -#============================================================================= -# Target rules for targets named mdis2pds_app - -# Build rule for target. -mdis2pds_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mdis2pds_app -.PHONY : mdis2pds_app - -# fast build rule for target. -mdis2pds_app/fast: - $(MAKE) -f objects/CMakeFiles/mdis2pds_app.dir/build.make objects/CMakeFiles/mdis2pds_app.dir/build -.PHONY : mdis2pds_app/fast - -#============================================================================= -# Target rules for targets named mer2isis_app - -# Build rule for target. -mer2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mer2isis_app -.PHONY : mer2isis_app - -# fast build rule for target. -mer2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mer2isis_app.dir/build.make objects/CMakeFiles/mer2isis_app.dir/build -.PHONY : mer2isis_app/fast - -#============================================================================= -# Target rules for targets named mar10restore_app - -# Build rule for target. -mar10restore_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mar10restore_app -.PHONY : mar10restore_app - -# fast build rule for target. -mar10restore_app/fast: - $(MAKE) -f objects/CMakeFiles/mar10restore_app.dir/build.make objects/CMakeFiles/mar10restore_app.dir/build -.PHONY : mar10restore_app/fast - -#============================================================================= -# Target rules for targets named mar10cal_app - -# Build rule for target. -mar10cal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mar10cal_app -.PHONY : mar10cal_app - -# fast build rule for target. -mar10cal_app/fast: - $(MAKE) -f objects/CMakeFiles/mar10cal_app.dir/build.make objects/CMakeFiles/mar10cal_app.dir/build -.PHONY : mar10cal_app/fast - -#============================================================================= -# Target rules for targets named lrowacpho_app - -# Build rule for target. -lrowacpho_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lrowacpho_app -.PHONY : lrowacpho_app - -# fast build rule for target. -lrowacpho_app/fast: - $(MAKE) -f objects/CMakeFiles/lrowacpho_app.dir/build.make objects/CMakeFiles/lrowacpho_app.dir/build -.PHONY : lrowacpho_app/fast - -#============================================================================= -# Target rules for targets named lrowaccal_app - -# Build rule for target. -lrowaccal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lrowaccal_app -.PHONY : lrowaccal_app - -# fast build rule for target. -lrowaccal_app/fast: - $(MAKE) -f objects/CMakeFiles/lrowaccal_app.dir/build.make objects/CMakeFiles/lrowaccal_app.dir/build -.PHONY : lrowaccal_app/fast - -#============================================================================= -# Target rules for targets named lronacpho_app - -# Build rule for target. -lronacpho_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lronacpho_app -.PHONY : lronacpho_app - -# fast build rule for target. -lronacpho_app/fast: - $(MAKE) -f objects/CMakeFiles/lronacpho_app.dir/build.make objects/CMakeFiles/lronacpho_app.dir/build -.PHONY : lronacpho_app/fast - -#============================================================================= -# Target rules for targets named lronac2pds_app - -# Build rule for target. -lronac2pds_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lronac2pds_app -.PHONY : lronac2pds_app - -# fast build rule for target. -lronac2pds_app/fast: - $(MAKE) -f objects/CMakeFiles/lronac2pds_app.dir/build.make objects/CMakeFiles/lronac2pds_app.dir/build -.PHONY : lronac2pds_app/fast - -#============================================================================= -# Target rules for targets named lromakeflat_app - -# Build rule for target. -lromakeflat_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lromakeflat_app -.PHONY : lromakeflat_app - -# fast build rule for target. -lromakeflat_app/fast: - $(MAKE) -f objects/CMakeFiles/lromakeflat_app.dir/build.make objects/CMakeFiles/lromakeflat_app.dir/build -.PHONY : lromakeflat_app/fast - -#============================================================================= -# Target rules for targets named hicalbeta_app - -# Build rule for target. -hicalbeta_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hicalbeta_app -.PHONY : hicalbeta_app - -# fast build rule for target. -hicalbeta_app/fast: - $(MAKE) -f objects/CMakeFiles/hicalbeta_app.dir/build.make objects/CMakeFiles/hicalbeta_app.dir/build -.PHONY : hicalbeta_app/fast - -#============================================================================= -# Target rules for targets named MiniRF - -# Build rule for target. -MiniRF: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MiniRF -.PHONY : MiniRF - -# fast build rule for target. -MiniRF/fast: - $(MAKE) -f objects/CMakeFiles/MiniRF.dir/build.make objects/CMakeFiles/MiniRF.dir/build -.PHONY : MiniRF/fast - -#============================================================================= -# Target rules for targets named LroWideAngleCamera - -# Build rule for target. -LroWideAngleCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LroWideAngleCamera -.PHONY : LroWideAngleCamera - -# fast build rule for target. -LroWideAngleCamera/fast: - $(MAKE) -f objects/CMakeFiles/LroWideAngleCamera.dir/build.make objects/CMakeFiles/LroWideAngleCamera.dir/build -.PHONY : LroWideAngleCamera/fast - -#============================================================================= -# Target rules for targets named lo_unit_test_LoMediumCamera - -# Build rule for target. -lo_unit_test_LoMediumCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lo_unit_test_LoMediumCamera -.PHONY : lo_unit_test_LoMediumCamera - -# fast build rule for target. -lo_unit_test_LoMediumCamera/fast: - $(MAKE) -f objects/CMakeFiles/lo_unit_test_LoMediumCamera.dir/build.make objects/CMakeFiles/lo_unit_test_LoMediumCamera.dir/build -.PHONY : lo_unit_test_LoMediumCamera/fast - -#============================================================================= -# Target rules for targets named lo_unit_test_LoHighCamera - -# Build rule for target. -lo_unit_test_LoHighCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lo_unit_test_LoHighCamera -.PHONY : lo_unit_test_LoHighCamera - -# fast build rule for target. -lo_unit_test_LoHighCamera/fast: - $(MAKE) -f objects/CMakeFiles/lo_unit_test_LoHighCamera.dir/build.make objects/CMakeFiles/lo_unit_test_LoHighCamera.dir/build -.PHONY : lo_unit_test_LoHighCamera/fast - -#============================================================================= -# Target rules for targets named lo_unit_test_LoCameraFiducialMap - -# Build rule for target. -lo_unit_test_LoCameraFiducialMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lo_unit_test_LoCameraFiducialMap -.PHONY : lo_unit_test_LoCameraFiducialMap - -# fast build rule for target. -lo_unit_test_LoCameraFiducialMap/fast: - $(MAKE) -f objects/CMakeFiles/lo_unit_test_LoCameraFiducialMap.dir/build.make objects/CMakeFiles/lo_unit_test_LoCameraFiducialMap.dir/build -.PHONY : lo_unit_test_LoCameraFiducialMap/fast - -#============================================================================= -# Target rules for targets named lo - -# Build rule for target. -lo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lo -.PHONY : lo - -# fast build rule for target. -lo/fast: - $(MAKE) -f objects/CMakeFiles/lo.dir/build.make objects/CMakeFiles/lo.dir/build -.PHONY : lo/fast - -#============================================================================= -# Target rules for targets named kaguyatc2isis_app - -# Build rule for target. -kaguyatc2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kaguyatc2isis_app -.PHONY : kaguyatc2isis_app - -# fast build rule for target. -kaguyatc2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/kaguyatc2isis_app.dir/build.make objects/CMakeFiles/kaguyatc2isis_app.dir/build -.PHONY : kaguyatc2isis_app/fast - -#============================================================================= -# Target rules for targets named kaguyasp2isis_app - -# Build rule for target. -kaguyasp2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kaguyasp2isis_app -.PHONY : kaguyasp2isis_app - -# fast build rule for target. -kaguyasp2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/kaguyasp2isis_app.dir/build.make objects/CMakeFiles/kaguyasp2isis_app.dir/build -.PHONY : kaguyasp2isis_app/fast - -#============================================================================= -# Target rules for targets named nirs2isis_app - -# Build rule for target. -nirs2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 nirs2isis_app -.PHONY : nirs2isis_app - -# fast build rule for target. -nirs2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/nirs2isis_app.dir/build.make objects/CMakeFiles/nirs2isis_app.dir/build -.PHONY : nirs2isis_app/fast - -#============================================================================= -# Target rules for targets named HayabusaNirsCamera - -# Build rule for target. -HayabusaNirsCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HayabusaNirsCamera -.PHONY : HayabusaNirsCamera - -# fast build rule for target. -HayabusaNirsCamera/fast: - $(MAKE) -f objects/CMakeFiles/HayabusaNirsCamera.dir/build.make objects/CMakeFiles/HayabusaNirsCamera.dir/build -.PHONY : HayabusaNirsCamera/fast - -#============================================================================= -# Target rules for targets named voyramp_app - -# Build rule for target. -voyramp_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 voyramp_app -.PHONY : voyramp_app - -# fast build rule for target. -voyramp_app/fast: - $(MAKE) -f objects/CMakeFiles/voyramp_app.dir/build.make objects/CMakeFiles/voyramp_app.dir/build -.PHONY : voyramp_app/fast - -#============================================================================= -# Target rules for targets named gllssical_app - -# Build rule for target. -gllssical_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 gllssical_app -.PHONY : gllssical_app - -# fast build rule for target. -gllssical_app/fast: - $(MAKE) -f objects/CMakeFiles/gllssical_app.dir/build.make objects/CMakeFiles/gllssical_app.dir/build -.PHONY : gllssical_app/fast - -#============================================================================= -# Target rules for targets named dawnfc2isis_app - -# Build rule for target. -dawnfc2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dawnfc2isis_app -.PHONY : dawnfc2isis_app - -# fast build rule for target. -dawnfc2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/dawnfc2isis_app.dir/build.make objects/CMakeFiles/dawnfc2isis_app.dir/build -.PHONY : dawnfc2isis_app/fast - -#============================================================================= -# Target rules for targets named clemnircal_app - -# Build rule for target. -clemnircal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clemnircal_app -.PHONY : clemnircal_app - -# fast build rule for target. -clemnircal_app/fast: - $(MAKE) -f objects/CMakeFiles/clemnircal_app.dir/build.make objects/CMakeFiles/clemnircal_app.dir/build -.PHONY : clemnircal_app/fast - -#============================================================================= -# Target rules for targets named clem2isis_app - -# Build rule for target. -clem2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clem2isis_app -.PHONY : clem2isis_app - -# fast build rule for target. -clem2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/clem2isis_app.dir/build.make objects/CMakeFiles/clem2isis_app.dir/build -.PHONY : clem2isis_app/fast - -#============================================================================= -# Target rules for targets named LwirCamera - -# Build rule for target. -LwirCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LwirCamera -.PHONY : LwirCamera - -# fast build rule for target. -LwirCamera/fast: - $(MAKE) -f objects/CMakeFiles/LwirCamera.dir/build.make objects/CMakeFiles/LwirCamera.dir/build -.PHONY : LwirCamera/fast - -#============================================================================= -# Target rules for targets named vimscal_app - -# Build rule for target. -vimscal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vimscal_app -.PHONY : vimscal_app - -# fast build rule for target. -vimscal_app/fast: - $(MAKE) -f objects/CMakeFiles/vimscal_app.dir/build.make objects/CMakeFiles/vimscal_app.dir/build -.PHONY : vimscal_app/fast - -#============================================================================= -# Target rules for targets named vims2isis_app - -# Build rule for target. -vims2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vims2isis_app -.PHONY : vims2isis_app - -# fast build rule for target. -vims2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/vims2isis_app.dir/build.make objects/CMakeFiles/vims2isis_app.dir/build -.PHONY : vims2isis_app/fast - -#============================================================================= -# Target rules for targets named cisscal_app - -# Build rule for target. -cisscal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cisscal_app -.PHONY : cisscal_app - -# fast build rule for target. -cisscal_app/fast: - $(MAKE) -f objects/CMakeFiles/cisscal_app.dir/build.make objects/CMakeFiles/cisscal_app.dir/build -.PHONY : cisscal_app/fast - -#============================================================================= -# Target rules for targets named cassini_unit_test_IssWACamera - -# Build rule for target. -cassini_unit_test_IssWACamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_IssWACamera -.PHONY : cassini_unit_test_IssWACamera - -# fast build rule for target. -cassini_unit_test_IssWACamera/fast: - $(MAKE) -f objects/CMakeFiles/cassini_unit_test_IssWACamera.dir/build.make objects/CMakeFiles/cassini_unit_test_IssWACamera.dir/build -.PHONY : cassini_unit_test_IssWACamera/fast - -#============================================================================= -# Target rules for targets named vikclean_app - -# Build rule for target. -vikclean_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vikclean_app -.PHONY : vikclean_app - -# fast build rule for target. -vikclean_app/fast: - $(MAKE) -f objects/CMakeFiles/vikclean_app.dir/build.make objects/CMakeFiles/vikclean_app.dir/build -.PHONY : vikclean_app/fast - -#============================================================================= -# Target rules for targets named cassini - -# Build rule for target. -cassini: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cassini -.PHONY : cassini - -# fast build rule for target. -cassini/fast: - $(MAKE) -f objects/CMakeFiles/cassini.dir/build.make objects/CMakeFiles/cassini.dir/build -.PHONY : cassini/fast - -#============================================================================= -# Target rules for targets named IssNACamera - -# Build rule for target. -IssNACamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 IssNACamera -.PHONY : IssNACamera - -# fast build rule for target. -IssNACamera/fast: - $(MAKE) -f objects/CMakeFiles/IssNACamera.dir/build.make objects/CMakeFiles/IssNACamera.dir/build -.PHONY : IssNACamera/fast - -#============================================================================= -# Target rules for targets named apollowarp_app - -# Build rule for target. -apollowarp_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollowarp_app -.PHONY : apollowarp_app - -# fast build rule for target. -apollowarp_app/fast: - $(MAKE) -f objects/CMakeFiles/apollowarp_app.dir/build.make objects/CMakeFiles/apollowarp_app.dir/build -.PHONY : apollowarp_app/fast - -#============================================================================= -# Target rules for targets named lorri2isis_app - -# Build rule for target. -lorri2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lorri2isis_app -.PHONY : lorri2isis_app - -# fast build rule for target. -lorri2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/lorri2isis_app.dir/build.make objects/CMakeFiles/lorri2isis_app.dir/build -.PHONY : lorri2isis_app/fast - -#============================================================================= -# Target rules for targets named apolloremrx_app - -# Build rule for target. -apolloremrx_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apolloremrx_app -.PHONY : apolloremrx_app - -# fast build rule for target. -apolloremrx_app/fast: - $(MAKE) -f objects/CMakeFiles/apolloremrx_app.dir/build.make objects/CMakeFiles/apolloremrx_app.dir/build -.PHONY : apolloremrx_app/fast - -#============================================================================= -# Target rules for targets named apollopaninit_app - -# Build rule for target. -apollopaninit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollopaninit_app -.PHONY : apollopaninit_app - -# fast build rule for target. -apollopaninit_app/fast: - $(MAKE) -f objects/CMakeFiles/apollopaninit_app.dir/build.make objects/CMakeFiles/apollopaninit_app.dir/build -.PHONY : apollopaninit_app/fast - -#============================================================================= -# Target rules for targets named apollofindrx_app - -# Build rule for target. -apollofindrx_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollofindrx_app -.PHONY : apollofindrx_app - -# fast build rule for target. -apollofindrx_app/fast: - $(MAKE) -f objects/CMakeFiles/apollofindrx_app.dir/build.make objects/CMakeFiles/apollofindrx_app.dir/build -.PHONY : apollofindrx_app/fast - -#============================================================================= -# Target rules for targets named apollo2isis_app - -# Build rule for target. -apollo2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollo2isis_app -.PHONY : apollo2isis_app - -# fast build rule for target. -apollo2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/apollo2isis_app.dir/build.make objects/CMakeFiles/apollo2isis_app.dir/build -.PHONY : apollo2isis_app/fast - -#============================================================================= -# Target rules for targets named apollo_unit_test_CentroidApolloPan - -# Build rule for target. -apollo_unit_test_CentroidApolloPan: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_CentroidApolloPan -.PHONY : apollo_unit_test_CentroidApolloPan - -# fast build rule for target. -apollo_unit_test_CentroidApolloPan/fast: - $(MAKE) -f objects/CMakeFiles/apollo_unit_test_CentroidApolloPan.dir/build.make objects/CMakeFiles/apollo_unit_test_CentroidApolloPan.dir/build -.PHONY : apollo_unit_test_CentroidApolloPan/fast - -#============================================================================= -# Target rules for targets named ApolloPanoramicCamera - -# Build rule for target. -ApolloPanoramicCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ApolloPanoramicCamera -.PHONY : ApolloPanoramicCamera - -# fast build rule for target. -ApolloPanoramicCamera/fast: - $(MAKE) -f objects/CMakeFiles/ApolloPanoramicCamera.dir/build.make objects/CMakeFiles/ApolloPanoramicCamera.dir/build -.PHONY : ApolloPanoramicCamera/fast - -#============================================================================= -# Target rules for targets named ApolloMetricCamera - -# Build rule for target. -ApolloMetricCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ApolloMetricCamera -.PHONY : ApolloMetricCamera - -# fast build rule for target. -ApolloMetricCamera/fast: - $(MAKE) -f objects/CMakeFiles/ApolloMetricCamera.dir/build.make objects/CMakeFiles/ApolloMetricCamera.dir/build -.PHONY : ApolloMetricCamera/fast - -#============================================================================= -# Target rules for targets named kerneldbgen_app - -# Build rule for target. -kerneldbgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kerneldbgen_app -.PHONY : kerneldbgen_app - -# fast build rule for target. -kerneldbgen_app/fast: - $(MAKE) -f objects/CMakeFiles/kerneldbgen_app.dir/build.make objects/CMakeFiles/kerneldbgen_app.dir/build -.PHONY : kerneldbgen_app/fast - -#============================================================================= -# Target rules for targets named isiscomplete_app - -# Build rule for target. -isiscomplete_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isiscomplete_app -.PHONY : isiscomplete_app - -# fast build rule for target. -isiscomplete_app/fast: - $(MAKE) -f objects/CMakeFiles/isiscomplete_app.dir/build.make objects/CMakeFiles/isiscomplete_app.dir/build -.PHONY : isiscomplete_app/fast - -#============================================================================= -# Target rules for targets named dempack_app - -# Build rule for target. -dempack_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dempack_app -.PHONY : dempack_app - -# fast build rule for target. -dempack_app/fast: - $(MAKE) -f objects/CMakeFiles/dempack_app.dir/build.make objects/CMakeFiles/dempack_app.dir/build -.PHONY : dempack_app/fast - -#============================================================================= -# Target rules for targets named hi2isis_app - -# Build rule for target. -hi2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hi2isis_app -.PHONY : hi2isis_app - -# fast build rule for target. -hi2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/hi2isis_app.dir/build.make objects/CMakeFiles/hi2isis_app.dir/build -.PHONY : hi2isis_app/fast - -#============================================================================= -# Target rules for targets named csspckgen_app - -# Build rule for target. -csspckgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 csspckgen_app -.PHONY : csspckgen_app - -# fast build rule for target. -csspckgen_app/fast: - $(MAKE) -f objects/CMakeFiles/csspckgen_app.dir/build.make objects/CMakeFiles/csspckgen_app.dir/build -.PHONY : csspckgen_app/fast - -#============================================================================= -# Target rules for targets named qtie_app - -# Build rule for target. -qtie_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 qtie_app -.PHONY : qtie_app - -# fast build rule for target. -qtie_app/fast: - $(MAKE) -f objects/CMakeFiles/qtie_app.dir/build.make objects/CMakeFiles/qtie_app.dir/build -.PHONY : qtie_app/fast - -#============================================================================= -# Target rules for targets named qnet_app - -# Build rule for target. -qnet_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 qnet_app -.PHONY : qnet_app - -# fast build rule for target. -qnet_app/fast: - $(MAKE) -f objects/CMakeFiles/qnet_app.dir/build.make objects/CMakeFiles/qnet_app.dir/build -.PHONY : qnet_app/fast - -#============================================================================= -# Target rules for targets named qmos_app - -# Build rule for target. -qmos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 qmos_app -.PHONY : qmos_app - -# fast build rule for target. -qmos_app/fast: - $(MAKE) -f objects/CMakeFiles/qmos_app.dir/build.make objects/CMakeFiles/qmos_app.dir/build -.PHONY : qmos_app/fast - -#============================================================================= -# Target rules for targets named warp_app - -# Build rule for target. -warp_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 warp_app -.PHONY : warp_app - -# fast build rule for target. -warp_app/fast: - $(MAKE) -f objects/CMakeFiles/warp_app.dir/build.make objects/CMakeFiles/warp_app.dir/build -.PHONY : warp_app/fast - -#============================================================================= -# Target rules for targets named sumspice_app - -# Build rule for target. -sumspice_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 sumspice_app -.PHONY : sumspice_app - -# fast build rule for target. -sumspice_app/fast: - $(MAKE) -f objects/CMakeFiles/sumspice_app.dir/build.make objects/CMakeFiles/sumspice_app.dir/build -.PHONY : sumspice_app/fast - -#============================================================================= -# Target rules for targets named slither_app - -# Build rule for target. -slither_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 slither_app -.PHONY : slither_app - -# fast build rule for target. -slither_app/fast: - $(MAKE) -f objects/CMakeFiles/slither_app.dir/build.make objects/CMakeFiles/slither_app.dir/build -.PHONY : slither_app/fast - -#============================================================================= -# Target rules for targets named prtloganalyzer_app - -# Build rule for target. -prtloganalyzer_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 prtloganalyzer_app -.PHONY : prtloganalyzer_app - -# fast build rule for target. -prtloganalyzer_app/fast: - $(MAKE) -f objects/CMakeFiles/prtloganalyzer_app.dir/build.make objects/CMakeFiles/prtloganalyzer_app.dir/build -.PHONY : prtloganalyzer_app/fast - -#============================================================================= -# Target rules for targets named jigsaw_app - -# Build rule for target. -jigsaw_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 jigsaw_app -.PHONY : jigsaw_app - -# fast build rule for target. -jigsaw_app/fast: - $(MAKE) -f objects/CMakeFiles/jigsaw_app.dir/build.make objects/CMakeFiles/jigsaw_app.dir/build -.PHONY : jigsaw_app/fast - -#============================================================================= -# Target rules for targets named fplanemap_app - -# Build rule for target. -fplanemap_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 fplanemap_app -.PHONY : fplanemap_app - -# fast build rule for target. -fplanemap_app/fast: - $(MAKE) -f objects/CMakeFiles/fplanemap_app.dir/build.make objects/CMakeFiles/fplanemap_app.dir/build -.PHONY : fplanemap_app/fast - -#============================================================================= -# Target rules for targets named findfeatures_app - -# Build rule for target. -findfeatures_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 findfeatures_app -.PHONY : findfeatures_app - -# fast build rule for target. -findfeatures_app/fast: - $(MAKE) -f objects/CMakeFiles/findfeatures_app.dir/build.make objects/CMakeFiles/findfeatures_app.dir/build -.PHONY : findfeatures_app/fast - -#============================================================================= -# Target rules for targets named coreg_app - -# Build rule for target. -coreg_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 coreg_app -.PHONY : coreg_app - -# fast build rule for target. -coreg_app/fast: - $(MAKE) -f objects/CMakeFiles/coreg_app.dir/build.make objects/CMakeFiles/coreg_app.dir/build -.PHONY : coreg_app/fast - -#============================================================================= -# Target rules for targets named cnetwinnow_app - -# Build rule for target. -cnetwinnow_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetwinnow_app -.PHONY : cnetwinnow_app - -# fast build rule for target. -cnetwinnow_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetwinnow_app.dir/build.make objects/CMakeFiles/cnetwinnow_app.dir/build -.PHONY : cnetwinnow_app/fast - -#============================================================================= -# Target rules for targets named cnetthinner_app - -# Build rule for target. -cnetthinner_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetthinner_app -.PHONY : cnetthinner_app - -# fast build rule for target. -cnetthinner_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetthinner_app.dir/build.make objects/CMakeFiles/cnetthinner_app.dir/build -.PHONY : cnetthinner_app/fast - -#============================================================================= -# Target rules for targets named cnetpvl2bin_app - -# Build rule for target. -cnetpvl2bin_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetpvl2bin_app -.PHONY : cnetpvl2bin_app - -# fast build rule for target. -cnetpvl2bin_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetpvl2bin_app.dir/build.make objects/CMakeFiles/cnetpvl2bin_app.dir/build -.PHONY : cnetpvl2bin_app/fast - -#============================================================================= -# Target rules for targets named MsiCamera - -# Build rule for target. -MsiCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MsiCamera -.PHONY : MsiCamera - -# fast build rule for target. -MsiCamera/fast: - $(MAKE) -f objects/CMakeFiles/MsiCamera.dir/build.make objects/CMakeFiles/MsiCamera.dir/build -.PHONY : MsiCamera/fast - -#============================================================================= -# Target rules for targets named cnetmerge_app - -# Build rule for target. -cnetmerge_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetmerge_app -.PHONY : cnetmerge_app - -# fast build rule for target. -cnetmerge_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetmerge_app.dir/build.make objects/CMakeFiles/cnetmerge_app.dir/build -.PHONY : cnetmerge_app/fast - -#============================================================================= -# Target rules for targets named cnetnewradii_app - -# Build rule for target. -cnetnewradii_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetnewradii_app -.PHONY : cnetnewradii_app - -# fast build rule for target. -cnetnewradii_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetnewradii_app.dir/build.make objects/CMakeFiles/cnetnewradii_app.dir/build -.PHONY : cnetnewradii_app/fast - -#============================================================================= -# Target rules for targets named cnethist_app - -# Build rule for target. -cnethist_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnethist_app -.PHONY : cnethist_app - -# fast build rule for target. -cnethist_app/fast: - $(MAKE) -f objects/CMakeFiles/cnethist_app.dir/build.make objects/CMakeFiles/cnethist_app.dir/build -.PHONY : cnethist_app/fast - -#============================================================================= -# Target rules for targets named cnetcombinept_app - -# Build rule for target. -cnetcombinept_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetcombinept_app -.PHONY : cnetcombinept_app - -# fast build rule for target. -cnetcombinept_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetcombinept_app.dir/build.make objects/CMakeFiles/cnetcombinept_app.dir/build -.PHONY : cnetcombinept_app/fast - -#============================================================================= -# Target rules for targets named cnetbin2pvl_app - -# Build rule for target. -cnetbin2pvl_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetbin2pvl_app -.PHONY : cnetbin2pvl_app - -# fast build rule for target. -cnetbin2pvl_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetbin2pvl_app.dir/build.make objects/CMakeFiles/cnetbin2pvl_app.dir/build -.PHONY : cnetbin2pvl_app/fast - -#============================================================================= -# Target rules for targets named cnet2mat_app - -# Build rule for target. -cnet2mat_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnet2mat_app -.PHONY : cnet2mat_app - -# fast build rule for target. -cnet2mat_app/fast: - $(MAKE) -f objects/CMakeFiles/cnet2mat_app.dir/build.make objects/CMakeFiles/cnet2mat_app.dir/build -.PHONY : cnet2mat_app/fast - -#============================================================================= -# Target rules for targets named cnet2dem_app - -# Build rule for target. -cnet2dem_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnet2dem_app -.PHONY : cnet2dem_app - -# fast build rule for target. -cnet2dem_app/fast: - $(MAKE) -f objects/CMakeFiles/cnet2dem_app.dir/build.make objects/CMakeFiles/cnet2dem_app.dir/build -.PHONY : cnet2dem_app/fast - -#============================================================================= -# Target rules for targets named vicar2isis_app - -# Build rule for target. -vicar2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vicar2isis_app -.PHONY : vicar2isis_app - -# fast build rule for target. -vicar2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/vicar2isis_app.dir/build.make objects/CMakeFiles/vicar2isis_app.dir/build -.PHONY : vicar2isis_app/fast - -#============================================================================= -# Target rules for targets named NewHorizonsMvicFrameCamera - -# Build rule for target. -NewHorizonsMvicFrameCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsMvicFrameCamera -.PHONY : NewHorizonsMvicFrameCamera - -# fast build rule for target. -NewHorizonsMvicFrameCamera/fast: - $(MAKE) -f objects/CMakeFiles/NewHorizonsMvicFrameCamera.dir/build.make objects/CMakeFiles/NewHorizonsMvicFrameCamera.dir/build -.PHONY : NewHorizonsMvicFrameCamera/fast - -#============================================================================= -# Target rules for targets named uncrop_app - -# Build rule for target. -uncrop_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 uncrop_app -.PHONY : uncrop_app - -# fast build rule for target. -uncrop_app/fast: - $(MAKE) -f objects/CMakeFiles/uncrop_app.dir/build.make objects/CMakeFiles/uncrop_app.dir/build -.PHONY : uncrop_app/fast - -#============================================================================= -# Target rules for targets named trim_app - -# Build rule for target. -trim_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 trim_app -.PHONY : trim_app - -# fast build rule for target. -trim_app/fast: - $(MAKE) -f objects/CMakeFiles/trim_app.dir/build.make objects/CMakeFiles/trim_app.dir/build -.PHONY : trim_app/fast - -#============================================================================= -# Target rules for targets named tonematch_app - -# Build rule for target. -tonematch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 tonematch_app -.PHONY : tonematch_app - -# fast build rule for target. -tonematch_app/fast: - $(MAKE) -f objects/CMakeFiles/tonematch_app.dir/build.make objects/CMakeFiles/tonematch_app.dir/build -.PHONY : tonematch_app/fast - -#============================================================================= -# Target rules for targets named tabledump_app - -# Build rule for target. -tabledump_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 tabledump_app -.PHONY : tabledump_app - -# fast build rule for target. -tabledump_app/fast: - $(MAKE) -f objects/CMakeFiles/tabledump_app.dir/build.make objects/CMakeFiles/tabledump_app.dir/build -.PHONY : tabledump_app/fast - -#============================================================================= -# Target rules for targets named cassini_unit_test_VimsCamera - -# Build rule for target. -cassini_unit_test_VimsCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_VimsCamera -.PHONY : cassini_unit_test_VimsCamera - -# fast build rule for target. -cassini_unit_test_VimsCamera/fast: - $(MAKE) -f objects/CMakeFiles/cassini_unit_test_VimsCamera.dir/build.make objects/CMakeFiles/cassini_unit_test_VimsCamera.dir/build -.PHONY : cassini_unit_test_VimsCamera/fast - -#============================================================================= -# Target rules for targets named table2cube_app - -# Build rule for target. -table2cube_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 table2cube_app -.PHONY : table2cube_app - -# fast build rule for target. -table2cube_app/fast: - $(MAKE) -f objects/CMakeFiles/table2cube_app.dir/build.make objects/CMakeFiles/table2cube_app.dir/build -.PHONY : table2cube_app/fast - -#============================================================================= -# Target rules for targets named hideal2pds_app - -# Build rule for target. -hideal2pds_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hideal2pds_app -.PHONY : hideal2pds_app - -# fast build rule for target. -hideal2pds_app/fast: - $(MAKE) -f objects/CMakeFiles/hideal2pds_app.dir/build.make objects/CMakeFiles/hideal2pds_app.dir/build -.PHONY : hideal2pds_app/fast - -#============================================================================= -# Target rules for targets named stretch_app - -# Build rule for target. -stretch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 stretch_app -.PHONY : stretch_app - -# fast build rule for target. -stretch_app/fast: - $(MAKE) -f objects/CMakeFiles/stretch_app.dir/build.make objects/CMakeFiles/stretch_app.dir/build -.PHONY : stretch_app/fast - -#============================================================================= -# Target rules for targets named lrowac2isis_app - -# Build rule for target. -lrowac2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lrowac2isis_app -.PHONY : lrowac2isis_app - -# fast build rule for target. -lrowac2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/lrowac2isis_app.dir/build.make objects/CMakeFiles/lrowac2isis_app.dir/build -.PHONY : lrowac2isis_app/fast - -#============================================================================= -# Target rules for targets named apollo - -# Build rule for target. -apollo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollo -.PHONY : apollo - -# fast build rule for target. -apollo/fast: - $(MAKE) -f objects/CMakeFiles/apollo.dir/build.make objects/CMakeFiles/apollo.dir/build -.PHONY : apollo/fast - -#============================================================================= -# Target rules for targets named spicefit_app - -# Build rule for target. -spicefit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 spicefit_app -.PHONY : spicefit_app - -# fast build rule for target. -spicefit_app/fast: - $(MAKE) -f objects/CMakeFiles/spicefit_app.dir/build.make objects/CMakeFiles/spicefit_app.dir/build -.PHONY : spicefit_app/fast - -#============================================================================= -# Target rules for targets named speclowpass_app - -# Build rule for target. -speclowpass_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 speclowpass_app -.PHONY : speclowpass_app - -# fast build rule for target. -speclowpass_app/fast: - $(MAKE) -f objects/CMakeFiles/speclowpass_app.dir/build.make objects/CMakeFiles/speclowpass_app.dir/build -.PHONY : speclowpass_app/fast - -#============================================================================= -# Target rules for targets named chan1m32isis_app - -# Build rule for target. -chan1m32isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 chan1m32isis_app -.PHONY : chan1m32isis_app - -# fast build rule for target. -chan1m32isis_app/fast: - $(MAKE) -f objects/CMakeFiles/chan1m32isis_app.dir/build.make objects/CMakeFiles/chan1m32isis_app.dir/build -.PHONY : chan1m32isis_app/fast - -#============================================================================= -# Target rules for targets named spechighpass_app - -# Build rule for target. -spechighpass_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 spechighpass_app -.PHONY : spechighpass_app - -# fast build rule for target. -spechighpass_app/fast: - $(MAKE) -f objects/CMakeFiles/spechighpass_app.dir/build.make objects/CMakeFiles/spechighpass_app.dir/build -.PHONY : spechighpass_app/fast - -#============================================================================= -# Target rules for targets named specadd_app - -# Build rule for target. -specadd_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 specadd_app -.PHONY : specadd_app - -# fast build rule for target. -specadd_app/fast: - $(MAKE) -f objects/CMakeFiles/specadd_app.dir/build.make objects/CMakeFiles/specadd_app.dir/build -.PHONY : specadd_app/fast - -#============================================================================= -# Target rules for targets named smtk_app - -# Build rule for target. -smtk_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 smtk_app -.PHONY : smtk_app - -# fast build rule for target. -smtk_app/fast: - $(MAKE) -f objects/CMakeFiles/smtk_app.dir/build.make objects/CMakeFiles/smtk_app.dir/build -.PHONY : smtk_app/fast - -#============================================================================= -# Target rules for targets named slpmap_app - -# Build rule for target. -slpmap_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 slpmap_app -.PHONY : slpmap_app - -# fast build rule for target. -slpmap_app/fast: - $(MAKE) -f objects/CMakeFiles/slpmap_app.dir/build.make objects/CMakeFiles/slpmap_app.dir/build -.PHONY : slpmap_app/fast - -#============================================================================= -# Target rules for targets named skypt_app - -# Build rule for target. -skypt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 skypt_app -.PHONY : skypt_app - -# fast build rule for target. -skypt_app/fast: - $(MAKE) -f objects/CMakeFiles/skypt_app.dir/build.make objects/CMakeFiles/skypt_app.dir/build -.PHONY : skypt_app/fast - -#============================================================================= -# Target rules for targets named skymap_app - -# Build rule for target. -skymap_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 skymap_app -.PHONY : skymap_app - -# fast build rule for target. -skymap_app/fast: - $(MAKE) -f objects/CMakeFiles/skymap_app.dir/build.make objects/CMakeFiles/skymap_app.dir/build -.PHONY : skymap_app/fast - -#============================================================================= -# Target rules for targets named clemuvviscal_app - -# Build rule for target. -clemuvviscal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clemuvviscal_app -.PHONY : clemuvviscal_app - -# fast build rule for target. -clemuvviscal_app/fast: - $(MAKE) -f objects/CMakeFiles/clemuvviscal_app.dir/build.make objects/CMakeFiles/clemuvviscal_app.dir/build -.PHONY : clemuvviscal_app/fast - -#============================================================================= -# Target rules for targets named sigmastretch_app - -# Build rule for target. -sigmastretch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 sigmastretch_app -.PHONY : sigmastretch_app - -# fast build rule for target. -sigmastretch_app/fast: - $(MAKE) -f objects/CMakeFiles/sigmastretch_app.dir/build.make objects/CMakeFiles/sigmastretch_app.dir/build -.PHONY : sigmastretch_app/fast - -#============================================================================= -# Target rules for targets named shadow_app - -# Build rule for target. -shadow_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 shadow_app -.PHONY : shadow_app - -# fast build rule for target. -shadow_app/fast: - $(MAKE) -f objects/CMakeFiles/shadow_app.dir/build.make objects/CMakeFiles/shadow_app.dir/build -.PHONY : shadow_app/fast - -#============================================================================= -# Target rules for targets named shade_app - -# Build rule for target. -shade_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 shade_app -.PHONY : shade_app - -# fast build rule for target. -shade_app/fast: - $(MAKE) -f objects/CMakeFiles/shade_app.dir/build.make objects/CMakeFiles/shade_app.dir/build -.PHONY : shade_app/fast - -#============================================================================= -# Target rules for targets named mar102isis_app - -# Build rule for target. -mar102isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mar102isis_app -.PHONY : mar102isis_app - -# fast build rule for target. -mar102isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mar102isis_app.dir/build.make objects/CMakeFiles/mar102isis_app.dir/build -.PHONY : mar102isis_app/fast - -#============================================================================= -# Target rules for targets named segment_app - -# Build rule for target. -segment_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 segment_app -.PHONY : segment_app - -# fast build rule for target. -segment_app/fast: - $(MAKE) -f objects/CMakeFiles/segment_app.dir/build.make objects/CMakeFiles/segment_app.dir/build -.PHONY : segment_app/fast - -#============================================================================= -# Target rules for targets named pointreg_app - -# Build rule for target. -pointreg_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pointreg_app -.PHONY : pointreg_app - -# fast build rule for target. -pointreg_app/fast: - $(MAKE) -f objects/CMakeFiles/pointreg_app.dir/build.make objects/CMakeFiles/pointreg_app.dir/build -.PHONY : pointreg_app/fast - -#============================================================================= -# Target rules for targets named rotate_app - -# Build rule for target. -rotate_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 rotate_app -.PHONY : rotate_app - -# fast build rule for target. -rotate_app/fast: - $(MAKE) -f objects/CMakeFiles/rotate_app.dir/build.make objects/CMakeFiles/rotate_app.dir/build -.PHONY : rotate_app/fast - -#============================================================================= -# Target rules for targets named ringspt_app - -# Build rule for target. -ringspt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ringspt_app -.PHONY : ringspt_app - -# fast build rule for target. -ringspt_app/fast: - $(MAKE) -f objects/CMakeFiles/ringspt_app.dir/build.make objects/CMakeFiles/ringspt_app.dir/build -.PHONY : ringspt_app/fast - -#============================================================================= -# Target rules for targets named ringscam2map_app - -# Build rule for target. -ringscam2map_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ringscam2map_app -.PHONY : ringscam2map_app - -# fast build rule for target. -ringscam2map_app/fast: - $(MAKE) -f objects/CMakeFiles/ringscam2map_app.dir/build.make objects/CMakeFiles/ringscam2map_app.dir/build -.PHONY : ringscam2map_app/fast - -#============================================================================= -# Target rules for targets named cnetstats_app - -# Build rule for target. -cnetstats_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetstats_app -.PHONY : cnetstats_app - -# fast build rule for target. -cnetstats_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetstats_app.dir/build.make objects/CMakeFiles/cnetstats_app.dir/build -.PHONY : cnetstats_app/fast - -#============================================================================= -# Target rules for targets named ringsautomos_app - -# Build rule for target. -ringsautomos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ringsautomos_app -.PHONY : ringsautomos_app - -# fast build rule for target. -ringsautomos_app/fast: - $(MAKE) -f objects/CMakeFiles/ringsautomos_app.dir/build.make objects/CMakeFiles/ringsautomos_app.dir/build -.PHONY : ringsautomos_app/fast - -#============================================================================= -# Target rules for targets named raw2isis_app - -# Build rule for target. -raw2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 raw2isis_app -.PHONY : raw2isis_app - -# fast build rule for target. -raw2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/raw2isis_app.dir/build.make objects/CMakeFiles/raw2isis_app.dir/build -.PHONY : raw2isis_app/fast - -#============================================================================= -# Target rules for targets named autoseed_app - -# Build rule for target. -autoseed_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 autoseed_app -.PHONY : autoseed_app - -# fast build rule for target. -autoseed_app/fast: - $(MAKE) -f objects/CMakeFiles/autoseed_app.dir/build.make objects/CMakeFiles/autoseed_app.dir/build -.PHONY : autoseed_app/fast - -#============================================================================= -# Target rules for targets named pixel2map_app - -# Build rule for target. -pixel2map_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pixel2map_app -.PHONY : pixel2map_app - -# fast build rule for target. -pixel2map_app/fast: - $(MAKE) -f objects/CMakeFiles/pixel2map_app.dir/build.make objects/CMakeFiles/pixel2map_app.dir/build -.PHONY : pixel2map_app/fast - -#============================================================================= -# Target rules for targets named thmproc_app - -# Build rule for target. -thmproc_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thmproc_app -.PHONY : thmproc_app - -# fast build rule for target. -thmproc_app/fast: - $(MAKE) -f objects/CMakeFiles/thmproc_app.dir/build.make objects/CMakeFiles/thmproc_app.dir/build -.PHONY : thmproc_app/fast - -#============================================================================= -# Target rules for targets named photomet_app - -# Build rule for target. -photomet_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 photomet_app -.PHONY : photomet_app - -# fast build rule for target. -photomet_app/fast: - $(MAKE) -f objects/CMakeFiles/photomet_app.dir/build.make objects/CMakeFiles/photomet_app.dir/build -.PHONY : photomet_app/fast - -#============================================================================= -# Target rules for targets named clemnirclean_app - -# Build rule for target. -clemnirclean_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clemnirclean_app -.PHONY : clemnirclean_app - -# fast build rule for target. -clemnirclean_app/fast: - $(MAKE) -f objects/CMakeFiles/clemnirclean_app.dir/build.make objects/CMakeFiles/clemnirclean_app.dir/build -.PHONY : clemnirclean_app/fast - -#============================================================================= -# Target rules for targets named photemplate_app - -# Build rule for target. -photemplate_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 photemplate_app -.PHONY : photemplate_app - -# fast build rule for target. -photemplate_app/fast: - $(MAKE) -f objects/CMakeFiles/photemplate_app.dir/build.make objects/CMakeFiles/photemplate_app.dir/build -.PHONY : photemplate_app/fast - -#============================================================================= -# Target rules for targets named phohillier_app - -# Build rule for target. -phohillier_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 phohillier_app -.PHONY : phohillier_app - -# fast build rule for target. -phohillier_app/fast: - $(MAKE) -f objects/CMakeFiles/phohillier_app.dir/build.make objects/CMakeFiles/phohillier_app.dir/build -.PHONY : phohillier_app/fast - -#============================================================================= -# Target rules for targets named thm2isis_app - -# Build rule for target. -thm2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thm2isis_app -.PHONY : thm2isis_app - -# fast build rule for target. -thm2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/thm2isis_app.dir/build.make objects/CMakeFiles/thm2isis_app.dir/build -.PHONY : thm2isis_app/fast - -#============================================================================= -# Target rules for targets named phoempglobal_app - -# Build rule for target. -phoempglobal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 phoempglobal_app -.PHONY : phoempglobal_app - -# fast build rule for target. -phoempglobal_app/fast: - $(MAKE) -f objects/CMakeFiles/phoempglobal_app.dir/build.make objects/CMakeFiles/phoempglobal_app.dir/build -.PHONY : phoempglobal_app/fast - -#============================================================================= -# Target rules for targets named viknobutter_app - -# Build rule for target. -viknobutter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 viknobutter_app -.PHONY : viknobutter_app - -# fast build rule for target. -viknobutter_app/fast: - $(MAKE) -f objects/CMakeFiles/viknobutter_app.dir/build.make objects/CMakeFiles/viknobutter_app.dir/build -.PHONY : viknobutter_app/fast - -#============================================================================= -# Target rules for targets named phocube_app - -# Build rule for target. -phocube_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 phocube_app -.PHONY : phocube_app - -# fast build rule for target. -phocube_app/fast: - $(MAKE) -f objects/CMakeFiles/phocube_app.dir/build.make objects/CMakeFiles/phocube_app.dir/build -.PHONY : phocube_app/fast - -#============================================================================= -# Target rules for targets named pca_app - -# Build rule for target. -pca_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pca_app -.PHONY : pca_app - -# fast build rule for target. -pca_app/fast: - $(MAKE) -f objects/CMakeFiles/pca_app.dir/build.make objects/CMakeFiles/pca_app.dir/build -.PHONY : pca_app/fast - -#============================================================================= -# Target rules for targets named pad_app - -# Build rule for target. -pad_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pad_app -.PHONY : pad_app - -# fast build rule for target. -pad_app/fast: - $(MAKE) -f objects/CMakeFiles/pad_app.dir/build.make objects/CMakeFiles/pad_app.dir/build -.PHONY : pad_app/fast - -#============================================================================= -# Target rules for targets named outline_app - -# Build rule for target. -outline_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 outline_app -.PHONY : outline_app - -# fast build rule for target. -outline_app/fast: - $(MAKE) -f objects/CMakeFiles/outline_app.dir/build.make objects/CMakeFiles/outline_app.dir/build -.PHONY : outline_app/fast - -#============================================================================= -# Target rules for targets named cneteditor_app - -# Build rule for target. -cneteditor_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cneteditor_app -.PHONY : cneteditor_app - -# fast build rule for target. -cneteditor_app/fast: - $(MAKE) -f objects/CMakeFiles/cneteditor_app.dir/build.make objects/CMakeFiles/cneteditor_app.dir/build -.PHONY : cneteditor_app/fast - -#============================================================================= -# Target rules for targets named noseam_app - -# Build rule for target. -noseam_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 noseam_app -.PHONY : noseam_app - -# fast build rule for target. -noseam_app/fast: - $(MAKE) -f objects/CMakeFiles/noseam_app.dir/build.make objects/CMakeFiles/noseam_app.dir/build -.PHONY : noseam_app/fast - -#============================================================================= -# Target rules for targets named mocevenodd_app - -# Build rule for target. -mocevenodd_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mocevenodd_app -.PHONY : mocevenodd_app - -# fast build rule for target. -mocevenodd_app/fast: - $(MAKE) -f objects/CMakeFiles/mocevenodd_app.dir/build.make objects/CMakeFiles/mocevenodd_app.dir/build -.PHONY : mocevenodd_app/fast - -#============================================================================= -# Target rules for targets named mosrange_app - -# Build rule for target. -mosrange_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mosrange_app -.PHONY : mosrange_app - -# fast build rule for target. -mosrange_app/fast: - $(MAKE) -f objects/CMakeFiles/mosrange_app.dir/build.make objects/CMakeFiles/mosrange_app.dir/build -.PHONY : mosrange_app/fast - -#============================================================================= -# Target rules for targets named mode_app - -# Build rule for target. -mode_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mode_app -.PHONY : mode_app - -# fast build rule for target. -mode_app/fast: - $(MAKE) -f objects/CMakeFiles/mode_app.dir/build.make objects/CMakeFiles/mode_app.dir/build -.PHONY : mode_app/fast - -#============================================================================= -# Target rules for targets named minmax_app - -# Build rule for target. -minmax_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 minmax_app -.PHONY : minmax_app - -# fast build rule for target. -minmax_app/fast: - $(MAKE) -f objects/CMakeFiles/minmax_app.dir/build.make objects/CMakeFiles/minmax_app.dir/build -.PHONY : minmax_app/fast - -#============================================================================= -# Target rules for targets named median_app - -# Build rule for target. -median_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 median_app -.PHONY : median_app - -# fast build rule for target. -median_app/fast: - $(MAKE) -f objects/CMakeFiles/median_app.dir/build.make objects/CMakeFiles/median_app.dir/build -.PHONY : median_app/fast - -#============================================================================= -# Target rules for targets named maptrim_app - -# Build rule for target. -maptrim_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 maptrim_app -.PHONY : maptrim_app - -# fast build rule for target. -maptrim_app/fast: - $(MAKE) -f objects/CMakeFiles/maptrim_app.dir/build.make objects/CMakeFiles/maptrim_app.dir/build -.PHONY : maptrim_app/fast - -#============================================================================= -# Target rules for targets named mappt_app - -# Build rule for target. -mappt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mappt_app -.PHONY : mappt_app - -# fast build rule for target. -mappt_app/fast: - $(MAKE) -f objects/CMakeFiles/mappt_app.dir/build.make objects/CMakeFiles/mappt_app.dir/build -.PHONY : mappt_app/fast - -#============================================================================= -# Target rules for targets named mapmos_app - -# Build rule for target. -mapmos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mapmos_app -.PHONY : mapmos_app - -# fast build rule for target. -mapmos_app/fast: - $(MAKE) -f objects/CMakeFiles/mapmos_app.dir/build.make objects/CMakeFiles/mapmos_app.dir/build -.PHONY : mapmos_app/fast - -#============================================================================= -# Target rules for targets named socetframesettings_app - -# Build rule for target. -socetframesettings_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 socetframesettings_app -.PHONY : socetframesettings_app - -# fast build rule for target. -socetframesettings_app/fast: - $(MAKE) -f objects/CMakeFiles/socetframesettings_app.dir/build.make objects/CMakeFiles/socetframesettings_app.dir/build -.PHONY : socetframesettings_app/fast - -#============================================================================= -# Target rules for targets named apollo_unit_test_ApolloMetricCamera - -# Build rule for target. -apollo_unit_test_ApolloMetricCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_ApolloMetricCamera -.PHONY : apollo_unit_test_ApolloMetricCamera - -# fast build rule for target. -apollo_unit_test_ApolloMetricCamera/fast: - $(MAKE) -f objects/CMakeFiles/apollo_unit_test_ApolloMetricCamera.dir/build.make objects/CMakeFiles/apollo_unit_test_ApolloMetricCamera.dir/build -.PHONY : apollo_unit_test_ApolloMetricCamera/fast - -#============================================================================= -# Target rules for targets named maplab_app - -# Build rule for target. -maplab_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 maplab_app -.PHONY : maplab_app - -# fast build rule for target. -maplab_app/fast: - $(MAKE) -f objects/CMakeFiles/maplab_app.dir/build.make objects/CMakeFiles/maplab_app.dir/build -.PHONY : maplab_app/fast - -#============================================================================= -# Target rules for targets named amicacal_app - -# Build rule for target. -amicacal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 amicacal_app -.PHONY : amicacal_app - -# fast build rule for target. -amicacal_app/fast: - $(MAKE) -f objects/CMakeFiles/amicacal_app.dir/build.make objects/CMakeFiles/amicacal_app.dir/build -.PHONY : amicacal_app/fast - -#============================================================================= -# Target rules for targets named map2map_app - -# Build rule for target. -map2map_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 map2map_app -.PHONY : map2map_app - -# fast build rule for target. -map2map_app/fast: - $(MAKE) -f objects/CMakeFiles/map2map_app.dir/build.make objects/CMakeFiles/map2map_app.dir/build -.PHONY : map2map_app/fast - -#============================================================================= -# Target rules for targets named hiequal_app - -# Build rule for target. -hiequal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hiequal_app -.PHONY : hiequal_app - -# fast build rule for target. -hiequal_app/fast: - $(MAKE) -f objects/CMakeFiles/hiequal_app.dir/build.make objects/CMakeFiles/hiequal_app.dir/build -.PHONY : hiequal_app/fast - -#============================================================================= -# Target rules for targets named map2cam_app - -# Build rule for target. -map2cam_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 map2cam_app -.PHONY : map2cam_app - -# fast build rule for target. -map2cam_app/fast: - $(MAKE) -f objects/CMakeFiles/map2cam_app.dir/build.make objects/CMakeFiles/map2cam_app.dir/build -.PHONY : map2cam_app/fast - -#============================================================================= -# Target rules for targets named lowpass_app - -# Build rule for target. -lowpass_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lowpass_app -.PHONY : lowpass_app - -# fast build rule for target. -lowpass_app/fast: - $(MAKE) -f objects/CMakeFiles/lowpass_app.dir/build.make objects/CMakeFiles/lowpass_app.dir/build -.PHONY : lowpass_app/fast - -#============================================================================= -# Target rules for targets named lineeq_app - -# Build rule for target. -lineeq_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lineeq_app -.PHONY : lineeq_app - -# fast build rule for target. -lineeq_app/fast: - $(MAKE) -f objects/CMakeFiles/lineeq_app.dir/build.make objects/CMakeFiles/lineeq_app.dir/build -.PHONY : lineeq_app/fast - -#============================================================================= -# Target rules for targets named kernfilter_app - -# Build rule for target. -kernfilter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kernfilter_app -.PHONY : kernfilter_app - -# fast build rule for target. -kernfilter_app/fast: - $(MAKE) -f objects/CMakeFiles/kernfilter_app.dir/build.make objects/CMakeFiles/kernfilter_app.dir/build -.PHONY : kernfilter_app/fast - -#============================================================================= -# Target rules for targets named isisui_app - -# Build rule for target. -isisui_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isisui_app -.PHONY : isisui_app - -# fast build rule for target. -isisui_app/fast: - $(MAKE) -f objects/CMakeFiles/isisui_app.dir/build.make objects/CMakeFiles/isisui_app.dir/build -.PHONY : isisui_app/fast - -#============================================================================= -# Target rules for targets named isisminer_app - -# Build rule for target. -isisminer_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isisminer_app -.PHONY : isisminer_app - -# fast build rule for target. -isisminer_app/fast: - $(MAKE) -f objects/CMakeFiles/isisminer_app.dir/build.make objects/CMakeFiles/isisminer_app.dir/build -.PHONY : isisminer_app/fast - -#============================================================================= -# Target rules for targets named interestcube_app - -# Build rule for target. -interestcube_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 interestcube_app -.PHONY : interestcube_app - -# fast build rule for target. -interestcube_app/fast: - $(MAKE) -f objects/CMakeFiles/interestcube_app.dir/build.make objects/CMakeFiles/interestcube_app.dir/build -.PHONY : interestcube_app/fast - -#============================================================================= -# Target rules for targets named CTXCamera - -# Build rule for target. -CTXCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 CTXCamera -.PHONY : CTXCamera - -# fast build rule for target. -CTXCamera/fast: - $(MAKE) -f objects/CMakeFiles/CTXCamera.dir/build.make objects/CMakeFiles/CTXCamera.dir/build -.PHONY : CTXCamera/fast - -#============================================================================= -# Target rules for targets named ifft_app - -# Build rule for target. -ifft_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ifft_app -.PHONY : ifft_app - -# fast build rule for target. -ifft_app/fast: - $(MAKE) -f objects/CMakeFiles/ifft_app.dir/build.make objects/CMakeFiles/ifft_app.dir/build -.PHONY : ifft_app/fast - -#============================================================================= -# Target rules for targets named hifurrows_app - -# Build rule for target. -hifurrows_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hifurrows_app -.PHONY : hifurrows_app - -# fast build rule for target. -hifurrows_app/fast: - $(MAKE) -f objects/CMakeFiles/hifurrows_app.dir/build.make objects/CMakeFiles/hifurrows_app.dir/build -.PHONY : hifurrows_app/fast - -#============================================================================= -# Target rules for targets named histmatch_app - -# Build rule for target. -histmatch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 histmatch_app -.PHONY : histmatch_app - -# fast build rule for target. -histmatch_app/fast: - $(MAKE) -f objects/CMakeFiles/histmatch_app.dir/build.make objects/CMakeFiles/histmatch_app.dir/build -.PHONY : histmatch_app/fast - -#============================================================================= -# Target rules for targets named highpass_app - -# Build rule for target. -highpass_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 highpass_app -.PHONY : highpass_app - -# fast build rule for target. -highpass_app/fast: - $(MAKE) -f objects/CMakeFiles/highpass_app.dir/build.make objects/CMakeFiles/highpass_app.dir/build -.PHONY : highpass_app/fast - -#============================================================================= -# Target rules for targets named mro_unit_test_HiLab - -# Build rule for target. -mro_unit_test_HiLab: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_HiLab -.PHONY : mro_unit_test_HiLab - -# fast build rule for target. -mro_unit_test_HiLab/fast: - $(MAKE) -f objects/CMakeFiles/mro_unit_test_HiLab.dir/build.make objects/CMakeFiles/mro_unit_test_HiLab.dir/build -.PHONY : mro_unit_test_HiLab/fast - -#============================================================================= -# Target rules for targets named grid_app - -# Build rule for target. -grid_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 grid_app -.PHONY : grid_app - -# fast build rule for target. -grid_app/fast: - $(MAKE) -f objects/CMakeFiles/grid_app.dir/build.make objects/CMakeFiles/grid_app.dir/build -.PHONY : grid_app/fast - -#============================================================================= -# Target rules for targets named greyscale_app - -# Build rule for target. -greyscale_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 greyscale_app -.PHONY : greyscale_app - -# fast build rule for target. -greyscale_app/fast: - $(MAKE) -f objects/CMakeFiles/greyscale_app.dir/build.make objects/CMakeFiles/greyscale_app.dir/build -.PHONY : greyscale_app/fast - -#============================================================================= -# Target rules for targets named IssWACamera - -# Build rule for target. -IssWACamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 IssWACamera -.PHONY : IssWACamera - -# fast build rule for target. -IssWACamera/fast: - $(MAKE) -f objects/CMakeFiles/IssWACamera.dir/build.make objects/CMakeFiles/IssWACamera.dir/build -.PHONY : IssWACamera/fast - -#============================================================================= -# Target rules for targets named isis2std_app - -# Build rule for target. -isis2std_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis2std_app -.PHONY : isis2std_app - -# fast build rule for target. -isis2std_app/fast: - $(MAKE) -f objects/CMakeFiles/isis2std_app.dir/build.make objects/CMakeFiles/isis2std_app.dir/build -.PHONY : isis2std_app/fast - -#============================================================================= -# Target rules for targets named gradient_app - -# Build rule for target. -gradient_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 gradient_app -.PHONY : gradient_app - -# fast build rule for target. -gradient_app/fast: - $(MAKE) -f objects/CMakeFiles/gradient_app.dir/build.make objects/CMakeFiles/gradient_app.dir/build -.PHONY : gradient_app/fast - -#============================================================================= -# Target rules for targets named getsn_app - -# Build rule for target. -getsn_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 getsn_app -.PHONY : getsn_app - -# fast build rule for target. -getsn_app/fast: - $(MAKE) -f objects/CMakeFiles/getsn_app.dir/build.make objects/CMakeFiles/getsn_app.dir/build -.PHONY : getsn_app/fast - -#============================================================================= -# Target rules for targets named getkey_app - -# Build rule for target. -getkey_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 getkey_app -.PHONY : getkey_app - -# fast build rule for target. -getkey_app/fast: - $(MAKE) -f objects/CMakeFiles/getkey_app.dir/build.make objects/CMakeFiles/getkey_app.dir/build -.PHONY : getkey_app/fast - -#============================================================================= -# Target rules for targets named footprintmerge_app - -# Build rule for target. -footprintmerge_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 footprintmerge_app -.PHONY : footprintmerge_app - -# fast build rule for target. -footprintmerge_app/fast: - $(MAKE) -f objects/CMakeFiles/footprintmerge_app.dir/build.make objects/CMakeFiles/footprintmerge_app.dir/build -.PHONY : footprintmerge_app/fast - -#============================================================================= -# Target rules for targets named thmdriftcor_app - -# Build rule for target. -thmdriftcor_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thmdriftcor_app -.PHONY : thmdriftcor_app - -# fast build rule for target. -thmdriftcor_app/fast: - $(MAKE) -f objects/CMakeFiles/thmdriftcor_app.dir/build.make objects/CMakeFiles/thmdriftcor_app.dir/build -.PHONY : thmdriftcor_app/fast - -#============================================================================= -# Target rules for targets named lronaccal_app - -# Build rule for target. -lronaccal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lronaccal_app -.PHONY : lronaccal_app - -# fast build rule for target. -lronaccal_app/fast: - $(MAKE) -f objects/CMakeFiles/lronaccal_app.dir/build.make objects/CMakeFiles/lronaccal_app.dir/build -.PHONY : lronaccal_app/fast - -#============================================================================= -# Target rules for targets named footprintinit_app - -# Build rule for target. -footprintinit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 footprintinit_app -.PHONY : footprintinit_app - -# fast build rule for target. -footprintinit_app/fast: - $(MAKE) -f objects/CMakeFiles/footprintinit_app.dir/build.make objects/CMakeFiles/footprintinit_app.dir/build -.PHONY : footprintinit_app/fast - -#============================================================================= -# Target rules for targets named HiresCamera - -# Build rule for target. -HiresCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HiresCamera -.PHONY : HiresCamera - -# fast build rule for target. -HiresCamera/fast: - $(MAKE) -f objects/CMakeFiles/HiresCamera.dir/build.make objects/CMakeFiles/HiresCamera.dir/build -.PHONY : HiresCamera/fast - -#============================================================================= -# Target rules for targets named fits2isis_app - -# Build rule for target. -fits2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 fits2isis_app -.PHONY : fits2isis_app - -# fast build rule for target. -fits2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/fits2isis_app.dir/build.make objects/CMakeFiles/fits2isis_app.dir/build -.PHONY : fits2isis_app/fast - -#============================================================================= -# Target rules for targets named findimageoverlaps_app - -# Build rule for target. -findimageoverlaps_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 findimageoverlaps_app -.PHONY : findimageoverlaps_app - -# fast build rule for target. -findimageoverlaps_app/fast: - $(MAKE) -f objects/CMakeFiles/findimageoverlaps_app.dir/build.make objects/CMakeFiles/findimageoverlaps_app.dir/build -.PHONY : findimageoverlaps_app/fast - -#============================================================================= -# Target rules for targets named findgaps_app - -# Build rule for target. -findgaps_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 findgaps_app -.PHONY : findgaps_app - -# fast build rule for target. -findgaps_app/fast: - $(MAKE) -f objects/CMakeFiles/findgaps_app.dir/build.make objects/CMakeFiles/findgaps_app.dir/build -.PHONY : findgaps_app/fast - -#============================================================================= -# Target rules for targets named errors_app - -# Build rule for target. -errors_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 errors_app -.PHONY : errors_app - -# fast build rule for target. -errors_app/fast: - $(MAKE) -f objects/CMakeFiles/errors_app.dir/build.make objects/CMakeFiles/errors_app.dir/build -.PHONY : errors_app/fast - -#============================================================================= -# Target rules for targets named higlob_app - -# Build rule for target. -higlob_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 higlob_app -.PHONY : higlob_app - -# fast build rule for target. -higlob_app/fast: - $(MAKE) -f objects/CMakeFiles/higlob_app.dir/build.make objects/CMakeFiles/higlob_app.dir/build -.PHONY : higlob_app/fast - -#============================================================================= -# Target rules for targets named skyrange_app - -# Build rule for target. -skyrange_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 skyrange_app -.PHONY : skyrange_app - -# fast build rule for target. -skyrange_app/fast: - $(MAKE) -f objects/CMakeFiles/skyrange_app.dir/build.make objects/CMakeFiles/skyrange_app.dir/build -.PHONY : skyrange_app/fast - -#============================================================================= -# Target rules for targets named equalizer_app - -# Build rule for target. -equalizer_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 equalizer_app -.PHONY : equalizer_app - -# fast build rule for target. -equalizer_app/fast: - $(MAKE) -f objects/CMakeFiles/equalizer_app.dir/build.make objects/CMakeFiles/equalizer_app.dir/build -.PHONY : equalizer_app/fast - -#============================================================================= -# Target rules for targets named edrget_app - -# Build rule for target. -edrget_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 edrget_app -.PHONY : edrget_app - -# fast build rule for target. -edrget_app/fast: - $(MAKE) -f objects/CMakeFiles/edrget_app.dir/build.make objects/CMakeFiles/edrget_app.dir/build -.PHONY : edrget_app/fast - -#============================================================================= -# Target rules for targets named VikingCamera - -# Build rule for target. -VikingCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 VikingCamera -.PHONY : VikingCamera - -# fast build rule for target. -VikingCamera/fast: - $(MAKE) -f objects/CMakeFiles/VikingCamera.dir/build.make objects/CMakeFiles/VikingCamera.dir/build -.PHONY : VikingCamera/fast - -#============================================================================= -# Target rules for targets named phoemplocal_app - -# Build rule for target. -phoemplocal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 phoemplocal_app -.PHONY : phoemplocal_app - -# fast build rule for target. -phoemplocal_app/fast: - $(MAKE) -f objects/CMakeFiles/phoemplocal_app.dir/build.make objects/CMakeFiles/phoemplocal_app.dir/build -.PHONY : phoemplocal_app/fast - -#============================================================================= -# Target rules for targets named editlab_app - -# Build rule for target. -editlab_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 editlab_app -.PHONY : editlab_app - -# fast build rule for target. -editlab_app/fast: - $(MAKE) -f objects/CMakeFiles/editlab_app.dir/build.make objects/CMakeFiles/editlab_app.dir/build -.PHONY : editlab_app/fast - -#============================================================================= -# Target rules for targets named poly_app - -# Build rule for target. -poly_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 poly_app -.PHONY : poly_app - -# fast build rule for target. -poly_app/fast: - $(MAKE) -f objects/CMakeFiles/poly_app.dir/build.make objects/CMakeFiles/poly_app.dir/build -.PHONY : poly_app/fast - -#============================================================================= -# Target rules for targets named dstripe_app - -# Build rule for target. -dstripe_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dstripe_app -.PHONY : dstripe_app - -# fast build rule for target. -dstripe_app/fast: - $(MAKE) -f objects/CMakeFiles/dstripe_app.dir/build.make objects/CMakeFiles/dstripe_app.dir/build -.PHONY : dstripe_app/fast - -#============================================================================= -# Target rules for targets named dsk2isis_app - -# Build rule for target. -dsk2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dsk2isis_app -.PHONY : dsk2isis_app - -# fast build rule for target. -dsk2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/dsk2isis_app.dir/build.make objects/CMakeFiles/dsk2isis_app.dir/build -.PHONY : dsk2isis_app/fast - -#============================================================================= -# Target rules for targets named divfilter_app - -# Build rule for target. -divfilter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 divfilter_app -.PHONY : divfilter_app - -# fast build rule for target. -divfilter_app/fast: - $(MAKE) -f objects/CMakeFiles/divfilter_app.dir/build.make objects/CMakeFiles/divfilter_app.dir/build -.PHONY : divfilter_app/fast - -#============================================================================= -# Target rules for targets named MdisCamera - -# Build rule for target. -MdisCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MdisCamera -.PHONY : MdisCamera - -# fast build rule for target. -MdisCamera/fast: - $(MAKE) -f objects/CMakeFiles/MdisCamera.dir/build.make objects/CMakeFiles/MdisCamera.dir/build -.PHONY : MdisCamera/fast - -#============================================================================= -# Target rules for targets named desmear_app - -# Build rule for target. -desmear_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 desmear_app -.PHONY : desmear_app - -# fast build rule for target. -desmear_app/fast: - $(MAKE) -f objects/CMakeFiles/desmear_app.dir/build.make objects/CMakeFiles/desmear_app.dir/build -.PHONY : desmear_app/fast - -#============================================================================= -# Target rules for targets named demprep_app - -# Build rule for target. -demprep_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 demprep_app -.PHONY : demprep_app - -# fast build rule for target. -demprep_app/fast: - $(MAKE) -f objects/CMakeFiles/demprep_app.dir/build.make objects/CMakeFiles/demprep_app.dir/build -.PHONY : demprep_app/fast - -#============================================================================= -# Target rules for targets named ddd2isis_app - -# Build rule for target. -ddd2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ddd2isis_app -.PHONY : ddd2isis_app - -# fast build rule for target. -ddd2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/ddd2isis_app.dir/build.make objects/CMakeFiles/ddd2isis_app.dir/build -.PHONY : ddd2isis_app/fast - -#============================================================================= -# Target rules for targets named cubeit_app - -# Build rule for target. -cubeit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cubeit_app -.PHONY : cubeit_app - -# fast build rule for target. -cubeit_app/fast: - $(MAKE) -f objects/CMakeFiles/cubeit_app.dir/build.make objects/CMakeFiles/cubeit_app.dir/build -.PHONY : cubeit_app/fast - -#============================================================================= -# Target rules for targets named cubeavg_app - -# Build rule for target. -cubeavg_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cubeavg_app -.PHONY : cubeavg_app - -# fast build rule for target. -cubeavg_app/fast: - $(MAKE) -f objects/CMakeFiles/cubeavg_app.dir/build.make objects/CMakeFiles/cubeavg_app.dir/build -.PHONY : cubeavg_app/fast - -#============================================================================= -# Target rules for targets named messckgen_app - -# Build rule for target. -messckgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 messckgen_app -.PHONY : messckgen_app - -# fast build rule for target. -messckgen_app/fast: - $(MAKE) -f objects/CMakeFiles/messckgen_app.dir/build.make objects/CMakeFiles/messckgen_app.dir/build -.PHONY : messckgen_app/fast - -#============================================================================= -# Target rules for targets named cropspecial_app - -# Build rule for target. -cropspecial_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cropspecial_app -.PHONY : cropspecial_app - -# fast build rule for target. -cropspecial_app/fast: - $(MAKE) -f objects/CMakeFiles/cropspecial_app.dir/build.make objects/CMakeFiles/cropspecial_app.dir/build -.PHONY : cropspecial_app/fast - -#============================================================================= -# Target rules for targets named KaguyaMiCamera - -# Build rule for target. -KaguyaMiCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 KaguyaMiCamera -.PHONY : KaguyaMiCamera - -# fast build rule for target. -KaguyaMiCamera/fast: - $(MAKE) -f objects/CMakeFiles/KaguyaMiCamera.dir/build.make objects/CMakeFiles/KaguyaMiCamera.dir/build -.PHONY : KaguyaMiCamera/fast - -#============================================================================= -# Target rules for targets named svfilter_app - -# Build rule for target. -svfilter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 svfilter_app -.PHONY : svfilter_app - -# fast build rule for target. -svfilter_app/fast: - $(MAKE) -f objects/CMakeFiles/svfilter_app.dir/build.make objects/CMakeFiles/svfilter_app.dir/build -.PHONY : svfilter_app/fast - -#============================================================================= -# Target rules for targets named crop_app - -# Build rule for target. -crop_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 crop_app -.PHONY : crop_app - -# fast build rule for target. -crop_app/fast: - $(MAKE) -f objects/CMakeFiles/crop_app.dir/build.make objects/CMakeFiles/crop_app.dir/build -.PHONY : crop_app/fast - -#============================================================================= -# Target rules for targets named copylabel_app - -# Build rule for target. -copylabel_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 copylabel_app -.PHONY : copylabel_app - -# fast build rule for target. -copylabel_app/fast: - $(MAKE) -f objects/CMakeFiles/copylabel_app.dir/build.make objects/CMakeFiles/copylabel_app.dir/build -.PHONY : copylabel_app/fast - -#============================================================================= -# Target rules for targets named circle_app - -# Build rule for target. -circle_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 circle_app -.PHONY : circle_app - -# fast build rule for target. -circle_app/fast: - $(MAKE) -f objects/CMakeFiles/circle_app.dir/build.make objects/CMakeFiles/circle_app.dir/build -.PHONY : circle_app/fast - -#============================================================================= -# Target rules for targets named catlab_app - -# Build rule for target. -catlab_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 catlab_app -.PHONY : catlab_app - -# fast build rule for target. -catlab_app/fast: - $(MAKE) -f objects/CMakeFiles/catlab_app.dir/build.make objects/CMakeFiles/catlab_app.dir/build -.PHONY : catlab_app/fast - -#============================================================================= -# Target rules for targets named camtrim_app - -# Build rule for target. -camtrim_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 camtrim_app -.PHONY : camtrim_app - -# fast build rule for target. -camtrim_app/fast: - $(MAKE) -f objects/CMakeFiles/camtrim_app.dir/build.make objects/CMakeFiles/camtrim_app.dir/build -.PHONY : camtrim_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MaximumCorrelation - -# Build rule for target. -isis3_unit_test_MaximumCorrelation: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MaximumCorrelation -.PHONY : isis3_unit_test_MaximumCorrelation - -# fast build rule for target. -isis3_unit_test_MaximumCorrelation/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MaximumCorrelation.dir/build.make objects/CMakeFiles/isis3_unit_test_MaximumCorrelation.dir/build -.PHONY : isis3_unit_test_MaximumCorrelation/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Gruen - -# Build rule for target. -isis3_unit_test_Gruen: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Gruen -.PHONY : isis3_unit_test_Gruen - -# fast build rule for target. -isis3_unit_test_Gruen/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Gruen.dir/build.make objects/CMakeFiles/isis3_unit_test_Gruen.dir/build -.PHONY : isis3_unit_test_Gruen/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LunarLambertMcEwen - -# Build rule for target. -isis3_unit_test_LunarLambertMcEwen: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarLambertMcEwen -.PHONY : isis3_unit_test_LunarLambertMcEwen - -# fast build rule for target. -isis3_unit_test_LunarLambertMcEwen/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarLambertMcEwen.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarLambertMcEwen.dir/build -.PHONY : isis3_unit_test_LunarLambertMcEwen/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Mixed - -# Build rule for target. -isis3_unit_test_Mixed: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Mixed -.PHONY : isis3_unit_test_Mixed - -# fast build rule for target. -isis3_unit_test_Mixed/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Mixed.dir/build.make objects/CMakeFiles/isis3_unit_test_Mixed.dir/build -.PHONY : isis3_unit_test_Mixed/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LunarLambertEmpirical - -# Build rule for target. -isis3_unit_test_LunarLambertEmpirical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarLambertEmpirical -.PHONY : isis3_unit_test_LunarLambertEmpirical - -# fast build rule for target. -isis3_unit_test_LunarLambertEmpirical/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarLambertEmpirical.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarLambertEmpirical.dir/build -.PHONY : isis3_unit_test_LunarLambertEmpirical/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PolygonSeederFactory - -# Build rule for target. -isis3_unit_test_PolygonSeederFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolygonSeederFactory -.PHONY : isis3_unit_test_PolygonSeederFactory - -# fast build rule for target. -isis3_unit_test_PolygonSeederFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolygonSeederFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_PolygonSeederFactory.dir/build -.PHONY : isis3_unit_test_PolygonSeederFactory/fast - -#============================================================================= -# Target rules for targets named HayabusaAmicaCamera - -# Build rule for target. -HayabusaAmicaCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HayabusaAmicaCamera -.PHONY : HayabusaAmicaCamera - -# fast build rule for target. -HayabusaAmicaCamera/fast: - $(MAKE) -f objects/CMakeFiles/HayabusaAmicaCamera.dir/build.make objects/CMakeFiles/HayabusaAmicaCamera.dir/build -.PHONY : HayabusaAmicaCamera/fast - -#============================================================================= -# Target rules for targets named deltack_app - -# Build rule for target. -deltack_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 deltack_app -.PHONY : deltack_app - -# fast build rule for target. -deltack_app/fast: - $(MAKE) -f objects/CMakeFiles/deltack_app.dir/build.make objects/CMakeFiles/deltack_app.dir/build -.PHONY : deltack_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Longitude - -# Build rule for target. -isis3_unit_test_Longitude: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Longitude -.PHONY : isis3_unit_test_Longitude - -# fast build rule for target. -isis3_unit_test_Longitude/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Longitude.dir/build.make objects/CMakeFiles/isis3_unit_test_Longitude.dir/build -.PHONY : isis3_unit_test_Longitude/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Matrix - -# Build rule for target. -isis3_unit_test_Matrix: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Matrix -.PHONY : isis3_unit_test_Matrix - -# fast build rule for target. -isis3_unit_test_Matrix/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Matrix.dir/build.make objects/CMakeFiles/isis3_unit_test_Matrix.dir/build -.PHONY : isis3_unit_test_Matrix/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CubeInfixToPostfix - -# Build rule for target. -isis3_unit_test_CubeInfixToPostfix: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeInfixToPostfix -.PHONY : isis3_unit_test_CubeInfixToPostfix - -# fast build rule for target. -isis3_unit_test_CubeInfixToPostfix/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeInfixToPostfix.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeInfixToPostfix.dir/build -.PHONY : isis3_unit_test_CubeInfixToPostfix/fast - -#============================================================================= -# Target rules for targets named qview_app - -# Build rule for target. -qview_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 qview_app -.PHONY : qview_app - -# fast build rule for target. -qview_app/fast: - $(MAKE) -f objects/CMakeFiles/qview_app.dir/build.make objects/CMakeFiles/qview_app.dir/build -.PHONY : qview_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LineEquation - -# Build rule for target. -isis3_unit_test_LineEquation: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineEquation -.PHONY : isis3_unit_test_LineEquation - -# fast build rule for target. -isis3_unit_test_LineEquation/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineEquation.dir/build.make objects/CMakeFiles/isis3_unit_test_LineEquation.dir/build -.PHONY : isis3_unit_test_LineEquation/fast - -#============================================================================= -# Target rules for targets named cosi_app - -# Build rule for target. -cosi_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cosi_app -.PHONY : cosi_app - -# fast build rule for target. -cosi_app/fast: - $(MAKE) -f objects/CMakeFiles/cosi_app.dir/build.make objects/CMakeFiles/cosi_app.dir/build -.PHONY : cosi_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LambertAzimuthalEqualArea - -# Build rule for target. -isis3_unit_test_LambertAzimuthalEqualArea: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LambertAzimuthalEqualArea -.PHONY : isis3_unit_test_LambertAzimuthalEqualArea - -# fast build rule for target. -isis3_unit_test_LambertAzimuthalEqualArea/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LambertAzimuthalEqualArea.dir/build.make objects/CMakeFiles/isis3_unit_test_LambertAzimuthalEqualArea.dir/build -.PHONY : isis3_unit_test_LambertAzimuthalEqualArea/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LineScanCameraSkyMap - -# Build rule for target. -isis3_unit_test_LineScanCameraSkyMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCameraSkyMap -.PHONY : isis3_unit_test_LineScanCameraSkyMap - -# fast build rule for target. -isis3_unit_test_LineScanCameraSkyMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCameraSkyMap.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCameraSkyMap.dir/build -.PHONY : isis3_unit_test_LineScanCameraSkyMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_JP2Importer - -# Build rule for target. -isis3_unit_test_JP2Importer: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Importer -.PHONY : isis3_unit_test_JP2Importer - -# fast build rule for target. -isis3_unit_test_JP2Importer/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Importer.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Importer.dir/build -.PHONY : isis3_unit_test_JP2Importer/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlPointList - -# Build rule for target. -isis3_unit_test_ControlPointList: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlPointList -.PHONY : isis3_unit_test_ControlPointList - -# fast build rule for target. -isis3_unit_test_ControlPointList/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlPointList.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlPointList.dir/build -.PHONY : isis3_unit_test_ControlPointList/fast - -#============================================================================= -# Target rules for targets named mimap2isis_app - -# Build rule for target. -mimap2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mimap2isis_app -.PHONY : mimap2isis_app - -# fast build rule for target. -mimap2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mimap2isis_app.dir/build.make objects/CMakeFiles/mimap2isis_app.dir/build -.PHONY : mimap2isis_app/fast - -#============================================================================= -# Target rules for targets named kaguyami2isis_app - -# Build rule for target. -kaguyami2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kaguyami2isis_app -.PHONY : kaguyami2isis_app - -# fast build rule for target. -kaguyami2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/kaguyami2isis_app.dir/build.make objects/CMakeFiles/kaguyami2isis_app.dir/build -.PHONY : kaguyami2isis_app/fast - -#============================================================================= -# Target rules for targets named remrx_app - -# Build rule for target. -remrx_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 remrx_app -.PHONY : remrx_app - -# fast build rule for target. -remrx_app/fast: - $(MAKE) -f objects/CMakeFiles/remrx_app.dir/build.make objects/CMakeFiles/remrx_app.dir/build -.PHONY : remrx_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_JP2Exporter - -# Build rule for target. -isis3_unit_test_JP2Exporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Exporter -.PHONY : isis3_unit_test_JP2Exporter - -# fast build rule for target. -isis3_unit_test_JP2Exporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Exporter.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Exporter.dir/build -.PHONY : isis3_unit_test_JP2Exporter/fast - -#============================================================================= -# Target rules for targets named cnettable_app - -# Build rule for target. -cnettable_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnettable_app -.PHONY : cnettable_app - -# fast build rule for target. -cnettable_app/fast: - $(MAKE) -f objects/CMakeFiles/cnettable_app.dir/build.make objects/CMakeFiles/cnettable_app.dir/build -.PHONY : cnettable_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_JP2Error - -# Build rule for target. -isis3_unit_test_JP2Error: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Error -.PHONY : isis3_unit_test_JP2Error - -# fast build rule for target. -isis3_unit_test_JP2Error/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Error.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Error.dir/build -.PHONY : isis3_unit_test_JP2Error/fast - -#============================================================================= -# Target rules for targets named leisa2isis_app - -# Build rule for target. -leisa2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 leisa2isis_app -.PHONY : leisa2isis_app - -# fast build rule for target. -leisa2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/leisa2isis_app.dir/build.make objects/CMakeFiles/leisa2isis_app.dir/build -.PHONY : leisa2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Isis - -# Build rule for target. -isis3_unit_test_Isis: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Isis -.PHONY : isis3_unit_test_Isis - -# fast build rule for target. -isis3_unit_test_Isis/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Isis.dir/build.make objects/CMakeFiles/isis3_unit_test_Isis.dir/build -.PHONY : isis3_unit_test_Isis/fast - -#============================================================================= -# Target rules for targets named spkwriter_app - -# Build rule for target. -spkwriter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 spkwriter_app -.PHONY : spkwriter_app - -# fast build rule for target. -spkwriter_app/fast: - $(MAKE) -f objects/CMakeFiles/spkwriter_app.dir/build.make objects/CMakeFiles/spkwriter_app.dir/build -.PHONY : spkwriter_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MinnaertEmpirical - -# Build rule for target. -isis3_unit_test_MinnaertEmpirical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MinnaertEmpirical -.PHONY : isis3_unit_test_MinnaertEmpirical - -# fast build rule for target. -isis3_unit_test_MinnaertEmpirical/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MinnaertEmpirical.dir/build.make objects/CMakeFiles/isis3_unit_test_MinnaertEmpirical.dir/build -.PHONY : isis3_unit_test_MinnaertEmpirical/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Intercept - -# Build rule for target. -isis3_unit_test_Intercept: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Intercept -.PHONY : isis3_unit_test_Intercept - -# fast build rule for target. -isis3_unit_test_Intercept/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Intercept.dir/build.make objects/CMakeFiles/isis3_unit_test_Intercept.dir/build -.PHONY : isis3_unit_test_Intercept/fast - -#============================================================================= -# Target rules for targets named ringsmappt_app - -# Build rule for target. -ringsmappt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ringsmappt_app -.PHONY : ringsmappt_app - -# fast build rule for target. -ringsmappt_app/fast: - $(MAKE) -f objects/CMakeFiles/ringsmappt_app.dir/build.make objects/CMakeFiles/ringsmappt_app.dir/build -.PHONY : ringsmappt_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BandManager - -# Build rule for target. -isis3_unit_test_BandManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BandManager -.PHONY : isis3_unit_test_BandManager - -# fast build rule for target. -isis3_unit_test_BandManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BandManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BandManager.dir/build -.PHONY : isis3_unit_test_BandManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_InfixToPostfix - -# Build rule for target. -isis3_unit_test_InfixToPostfix: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InfixToPostfix -.PHONY : isis3_unit_test_InfixToPostfix - -# fast build rule for target. -isis3_unit_test_InfixToPostfix/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InfixToPostfix.dir/build.make objects/CMakeFiles/isis3_unit_test_InfixToPostfix.dir/build -.PHONY : isis3_unit_test_InfixToPostfix/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Planar - -# Build rule for target. -isis3_unit_test_Planar: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Planar -.PHONY : isis3_unit_test_Planar - -# fast build rule for target. -isis3_unit_test_Planar/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Planar.dir/build.make objects/CMakeFiles/isis3_unit_test_Planar.dir/build -.PHONY : isis3_unit_test_Planar/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ImportPdsTable - -# Build rule for target. -isis3_unit_test_ImportPdsTable: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImportPdsTable -.PHONY : isis3_unit_test_ImportPdsTable - -# fast build rule for target. -isis3_unit_test_ImportPdsTable/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImportPdsTable.dir/build.make objects/CMakeFiles/isis3_unit_test_ImportPdsTable.dir/build -.PHONY : isis3_unit_test_ImportPdsTable/fast - -#============================================================================= -# Target rules for targets named mro_unit_test_CrismCamera - -# Build rule for target. -mro_unit_test_CrismCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_CrismCamera -.PHONY : mro_unit_test_CrismCamera - -# fast build rule for target. -mro_unit_test_CrismCamera/fast: - $(MAKE) -f objects/CMakeFiles/mro_unit_test_CrismCamera.dir/build.make objects/CMakeFiles/mro_unit_test_CrismCamera.dir/build -.PHONY : mro_unit_test_CrismCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Resource - -# Build rule for target. -isis3_unit_test_Resource: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Resource -.PHONY : isis3_unit_test_Resource - -# fast build rule for target. -isis3_unit_test_Resource/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Resource.dir/build.make objects/CMakeFiles/isis3_unit_test_Resource.dir/build -.PHONY : isis3_unit_test_Resource/fast - -#============================================================================= -# Target rules for targets named UvvisCamera - -# Build rule for target. -UvvisCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 UvvisCamera -.PHONY : UvvisCamera - -# fast build rule for target. -UvvisCamera/fast: - $(MAKE) -f objects/CMakeFiles/UvvisCamera.dir/build.make objects/CMakeFiles/UvvisCamera.dir/build -.PHONY : UvvisCamera/fast - -#============================================================================= -# Target rules for targets named cnetdiff_app - -# Build rule for target. -cnetdiff_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetdiff_app -.PHONY : cnetdiff_app - -# fast build rule for target. -cnetdiff_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetdiff_app.dir/build.make objects/CMakeFiles/cnetdiff_app.dir/build -.PHONY : cnetdiff_app/fast - -#============================================================================= -# Target rules for targets named cubeatt_app - -# Build rule for target. -cubeatt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cubeatt_app -.PHONY : cubeatt_app - -# fast build rule for target. -cubeatt_app/fast: - $(MAKE) -f objects/CMakeFiles/cubeatt_app.dir/build.make objects/CMakeFiles/cubeatt_app.dir/build -.PHONY : cubeatt_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ImageImporter - -# Build rule for target. -isis3_unit_test_ImageImporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageImporter -.PHONY : isis3_unit_test_ImageImporter - -# fast build rule for target. -isis3_unit_test_ImageImporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageImporter.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageImporter.dir/build -.PHONY : isis3_unit_test_ImageImporter/fast - -#============================================================================= -# Target rules for targets named makecube_app - -# Build rule for target. -makecube_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 makecube_app -.PHONY : makecube_app - -# fast build rule for target. -makecube_app/fast: - $(MAKE) -f objects/CMakeFiles/makecube_app.dir/build.make objects/CMakeFiles/makecube_app.dir/build -.PHONY : makecube_app/fast - -#============================================================================= -# Target rules for targets named isis2fits_app - -# Build rule for target. -isis2fits_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis2fits_app -.PHONY : isis2fits_app - -# fast build rule for target. -isis2fits_app/fast: - $(MAKE) -f objects/CMakeFiles/isis2fits_app.dir/build.make objects/CMakeFiles/isis2fits_app.dir/build -.PHONY : isis2fits_app/fast - -#============================================================================= -# Target rules for targets named Mercator - -# Build rule for target. -Mercator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Mercator -.PHONY : Mercator - -# fast build rule for target. -Mercator/fast: - $(MAKE) -f objects/CMakeFiles/Mercator.dir/build.make objects/CMakeFiles/Mercator.dir/build -.PHONY : Mercator/fast - -#============================================================================= -# Target rules for targets named UpturnedEllipsoidTransverseAzimuthal - -# Build rule for target. -UpturnedEllipsoidTransverseAzimuthal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 UpturnedEllipsoidTransverseAzimuthal -.PHONY : UpturnedEllipsoidTransverseAzimuthal - -# fast build rule for target. -UpturnedEllipsoidTransverseAzimuthal/fast: - $(MAKE) -f objects/CMakeFiles/UpturnedEllipsoidTransverseAzimuthal.dir/build.make objects/CMakeFiles/UpturnedEllipsoidTransverseAzimuthal.dir/build -.PHONY : UpturnedEllipsoidTransverseAzimuthal/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SerialNumberList - -# Build rule for target. -isis3_unit_test_SerialNumberList: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SerialNumberList -.PHONY : isis3_unit_test_SerialNumberList - -# fast build rule for target. -isis3_unit_test_SerialNumberList/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SerialNumberList.dir/build.make objects/CMakeFiles/isis3_unit_test_SerialNumberList.dir/build -.PHONY : isis3_unit_test_SerialNumberList/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ImageExporter - -# Build rule for target. -isis3_unit_test_ImageExporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageExporter -.PHONY : isis3_unit_test_ImageExporter - -# fast build rule for target. -isis3_unit_test_ImageExporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageExporter.dir/build -.PHONY : isis3_unit_test_ImageExporter/fast - -#============================================================================= -# Target rules for targets named DawnFcCamera - -# Build rule for target. -DawnFcCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 DawnFcCamera -.PHONY : DawnFcCamera - -# fast build rule for target. -DawnFcCamera/fast: - $(MAKE) -f objects/CMakeFiles/DawnFcCamera.dir/build.make objects/CMakeFiles/DawnFcCamera.dir/build -.PHONY : DawnFcCamera/fast - -#============================================================================= -# Target rules for targets named apollocal_app - -# Build rule for target. -apollocal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollocal_app -.PHONY : apollocal_app - -# fast build rule for target. -apollocal_app/fast: - $(MAKE) -f objects/CMakeFiles/apollocal_app.dir/build.make objects/CMakeFiles/apollocal_app.dir/build -.PHONY : apollocal_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ImageOverlapSet - -# Build rule for target. -isis3_unit_test_ImageOverlapSet: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageOverlapSet -.PHONY : isis3_unit_test_ImageOverlapSet - -# fast build rule for target. -isis3_unit_test_ImageOverlapSet/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageOverlapSet.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageOverlapSet.dir/build -.PHONY : isis3_unit_test_ImageOverlapSet/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal - -# Build rule for target. -isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal -.PHONY : isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal - -# fast build rule for target. -isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal.dir/build.make objects/CMakeFiles/isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal.dir/build -.PHONY : isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal/fast - -#============================================================================= -# Target rules for targets named hirdr2isis_app - -# Build rule for target. -hirdr2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hirdr2isis_app -.PHONY : hirdr2isis_app - -# fast build rule for target. -hirdr2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/hirdr2isis_app.dir/build.make objects/CMakeFiles/hirdr2isis_app.dir/build -.PHONY : hirdr2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_IdealCamera - -# Build rule for target. -isis3_unit_test_IdealCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IdealCamera -.PHONY : isis3_unit_test_IdealCamera - -# fast build rule for target. -isis3_unit_test_IdealCamera/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IdealCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_IdealCamera.dir/build -.PHONY : isis3_unit_test_IdealCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessExportPds - -# Build rule for target. -isis3_unit_test_ProcessExportPds: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessExportPds -.PHONY : isis3_unit_test_ProcessExportPds - -# fast build rule for target. -isis3_unit_test_ProcessExportPds/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessExportPds.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessExportPds.dir/build -.PHONY : isis3_unit_test_ProcessExportPds/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_IException - -# Build rule for target. -isis3_unit_test_IException: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IException -.PHONY : isis3_unit_test_IException - -# fast build rule for target. -isis3_unit_test_IException/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IException.dir/build.make objects/CMakeFiles/isis3_unit_test_IException.dir/build -.PHONY : isis3_unit_test_IException/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_HapkeAtm1 - -# Build rule for target. -isis3_unit_test_HapkeAtm1: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_HapkeAtm1 -.PHONY : isis3_unit_test_HapkeAtm1 - -# fast build rule for target. -isis3_unit_test_HapkeAtm1/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_HapkeAtm1.dir/build.make objects/CMakeFiles/isis3_unit_test_HapkeAtm1.dir/build -.PHONY : isis3_unit_test_HapkeAtm1/fast - -#============================================================================= -# Target rules for targets named mar10clean_app - -# Build rule for target. -mar10clean_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mar10clean_app -.PHONY : mar10clean_app - -# fast build rule for target. -mar10clean_app/fast: - $(MAKE) -f objects/CMakeFiles/mar10clean_app.dir/build.make objects/CMakeFiles/mar10clean_app.dir/build -.PHONY : mar10clean_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Gui - -# Build rule for target. -isis3_unit_test_Gui: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Gui -.PHONY : isis3_unit_test_Gui - -# fast build rule for target. -isis3_unit_test_Gui/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Gui.dir/build.make objects/CMakeFiles/isis3_unit_test_Gui.dir/build -.PHONY : isis3_unit_test_Gui/fast - -#============================================================================= -# Target rules for targets named thmnoseam_app - -# Build rule for target. -thmnoseam_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thmnoseam_app -.PHONY : thmnoseam_app - -# fast build rule for target. -thmnoseam_app/fast: - $(MAKE) -f objects/CMakeFiles/thmnoseam_app.dir/build.make objects/CMakeFiles/thmnoseam_app.dir/build -.PHONY : thmnoseam_app/fast - -#============================================================================= -# Target rules for targets named fx_app - -# Build rule for target. -fx_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 fx_app -.PHONY : fx_app - -# fast build rule for target. -fx_app/fast: - $(MAKE) -f objects/CMakeFiles/fx_app.dir/build.make objects/CMakeFiles/fx_app.dir/build -.PHONY : fx_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Ransac - -# Build rule for target. -isis3_unit_test_Ransac: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Ransac -.PHONY : isis3_unit_test_Ransac - -# fast build rule for target. -isis3_unit_test_Ransac/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Ransac.dir/build.make objects/CMakeFiles/isis3_unit_test_Ransac.dir/build -.PHONY : isis3_unit_test_Ransac/fast - -#============================================================================= -# Target rules for targets named RosettaOsirisCamera - -# Build rule for target. -RosettaOsirisCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 RosettaOsirisCamera -.PHONY : RosettaOsirisCamera - -# fast build rule for target. -RosettaOsirisCamera/fast: - $(MAKE) -f objects/CMakeFiles/RosettaOsirisCamera.dir/build.make objects/CMakeFiles/RosettaOsirisCamera.dir/build -.PHONY : RosettaOsirisCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Histogram - -# Build rule for target. -isis3_unit_test_Histogram: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Histogram -.PHONY : isis3_unit_test_Histogram - -# fast build rule for target. -isis3_unit_test_Histogram/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Histogram.dir/build.make objects/CMakeFiles/isis3_unit_test_Histogram.dir/build -.PHONY : isis3_unit_test_Histogram/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GroupedStatistics - -# Build rule for target. -isis3_unit_test_GroupedStatistics: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GroupedStatistics -.PHONY : isis3_unit_test_GroupedStatistics - -# fast build rule for target. -isis3_unit_test_GroupedStatistics/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GroupedStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_GroupedStatistics.dir/build -.PHONY : isis3_unit_test_GroupedStatistics/fast - -#============================================================================= -# Target rules for targets named apollo_unit_test_Apollo - -# Build rule for target. -apollo_unit_test_Apollo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_Apollo -.PHONY : apollo_unit_test_Apollo - -# fast build rule for target. -apollo_unit_test_Apollo/fast: - $(MAKE) -f objects/CMakeFiles/apollo_unit_test_Apollo.dir/build.make objects/CMakeFiles/apollo_unit_test_Apollo.dir/build -.PHONY : apollo_unit_test_Apollo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GaussianStretch - -# Build rule for target. -isis3_unit_test_GaussianStretch: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GaussianStretch -.PHONY : isis3_unit_test_GaussianStretch - -# fast build rule for target. -isis3_unit_test_GaussianStretch/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GaussianStretch.dir/build.make objects/CMakeFiles/isis3_unit_test_GaussianStretch.dir/build -.PHONY : isis3_unit_test_GaussianStretch/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GroundGrid - -# Build rule for target. -isis3_unit_test_GroundGrid: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GroundGrid -.PHONY : isis3_unit_test_GroundGrid - -# fast build rule for target. -isis3_unit_test_GroundGrid/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GroundGrid.dir/build.make objects/CMakeFiles/isis3_unit_test_GroundGrid.dir/build -.PHONY : isis3_unit_test_GroundGrid/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GSLUtility - -# Build rule for target. -isis3_unit_test_GSLUtility: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GSLUtility -.PHONY : isis3_unit_test_GSLUtility - -# fast build rule for target. -isis3_unit_test_GSLUtility/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GSLUtility.dir/build.make objects/CMakeFiles/isis3_unit_test_GSLUtility.dir/build -.PHONY : isis3_unit_test_GSLUtility/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_FramingCamera - -# Build rule for target. -isis3_unit_test_FramingCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FramingCamera -.PHONY : isis3_unit_test_FramingCamera - -# fast build rule for target. -isis3_unit_test_FramingCamera/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FramingCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_FramingCamera.dir/build -.PHONY : isis3_unit_test_FramingCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Stretch - -# Build rule for target. -isis3_unit_test_Stretch: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Stretch -.PHONY : isis3_unit_test_Stretch - -# fast build rule for target. -isis3_unit_test_Stretch/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Stretch.dir/build.make objects/CMakeFiles/isis3_unit_test_Stretch.dir/build -.PHONY : isis3_unit_test_Stretch/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_FileName - -# Build rule for target. -isis3_unit_test_FileName: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FileName -.PHONY : isis3_unit_test_FileName - -# fast build rule for target. -isis3_unit_test_FileName/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FileName.dir/build.make objects/CMakeFiles/isis3_unit_test_FileName.dir/build -.PHONY : isis3_unit_test_FileName/fast - -#============================================================================= -# Target rules for targets named SsiCamera - -# Build rule for target. -SsiCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 SsiCamera -.PHONY : SsiCamera - -# fast build rule for target. -SsiCamera/fast: - $(MAKE) -f objects/CMakeFiles/SsiCamera.dir/build.make objects/CMakeFiles/SsiCamera.dir/build -.PHONY : SsiCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Isotropic2 - -# Build rule for target. -isis3_unit_test_Isotropic2: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Isotropic2 -.PHONY : isis3_unit_test_Isotropic2 - -# fast build rule for target. -isis3_unit_test_Isotropic2/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Isotropic2.dir/build.make objects/CMakeFiles/isis3_unit_test_Isotropic2.dir/build -.PHONY : isis3_unit_test_Isotropic2/fast - -#============================================================================= -# Target rules for targets named NewHorizonsMvicTdiCamera - -# Build rule for target. -NewHorizonsMvicTdiCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsMvicTdiCamera -.PHONY : NewHorizonsMvicTdiCamera - -# fast build rule for target. -NewHorizonsMvicTdiCamera/fast: - $(MAKE) -f objects/CMakeFiles/NewHorizonsMvicTdiCamera.dir/build.make objects/CMakeFiles/NewHorizonsMvicTdiCamera.dir/build -.PHONY : NewHorizonsMvicTdiCamera/fast - -#============================================================================= -# Target rules for targets named mrf2pds_app - -# Build rule for target. -mrf2pds_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mrf2pds_app -.PHONY : mrf2pds_app - -# fast build rule for target. -mrf2pds_app/fast: - $(MAKE) -f objects/CMakeFiles/mrf2pds_app.dir/build.make objects/CMakeFiles/mrf2pds_app.dir/build -.PHONY : mrf2pds_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Pipeline - -# Build rule for target. -isis3_unit_test_Pipeline: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Pipeline -.PHONY : isis3_unit_test_Pipeline - -# fast build rule for target. -isis3_unit_test_Pipeline/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Pipeline.dir/build.make objects/CMakeFiles/isis3_unit_test_Pipeline.dir/build -.PHONY : isis3_unit_test_Pipeline/fast - -#============================================================================= -# Target rules for targets named mask_app - -# Build rule for target. -mask_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mask_app -.PHONY : mask_app - -# fast build rule for target. -mask_app/fast: - $(MAKE) -f objects/CMakeFiles/mask_app.dir/build.make objects/CMakeFiles/mask_app.dir/build -.PHONY : mask_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_FileList - -# Build rule for target. -isis3_unit_test_FileList: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FileList -.PHONY : isis3_unit_test_FileList - -# fast build rule for target. -isis3_unit_test_FileList/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FileList.dir/build.make objects/CMakeFiles/isis3_unit_test_FileList.dir/build -.PHONY : isis3_unit_test_FileList/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_HapkeAtm2 - -# Build rule for target. -isis3_unit_test_HapkeAtm2: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_HapkeAtm2 -.PHONY : isis3_unit_test_HapkeAtm2 - -# fast build rule for target. -isis3_unit_test_HapkeAtm2/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_HapkeAtm2.dir/build.make objects/CMakeFiles/isis3_unit_test_HapkeAtm2.dir/build -.PHONY : isis3_unit_test_HapkeAtm2/fast - -#============================================================================= -# Target rules for targets named algebra_app - -# Build rule for target. -algebra_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 algebra_app -.PHONY : algebra_app - -# fast build rule for target. -algebra_app/fast: - $(MAKE) -f objects/CMakeFiles/algebra_app.dir/build.make objects/CMakeFiles/algebra_app.dir/build -.PHONY : algebra_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Isotropic1 - -# Build rule for target. -isis3_unit_test_Isotropic1: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Isotropic1 -.PHONY : isis3_unit_test_Isotropic1 - -# fast build rule for target. -isis3_unit_test_Isotropic1/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Isotropic1.dir/build.make objects/CMakeFiles/isis3_unit_test_Isotropic1.dir/build -.PHONY : isis3_unit_test_Isotropic1/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_InlineInfixToPostfix - -# Build rule for target. -isis3_unit_test_InlineInfixToPostfix: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InlineInfixToPostfix -.PHONY : isis3_unit_test_InlineInfixToPostfix - -# fast build rule for target. -isis3_unit_test_InlineInfixToPostfix/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InlineInfixToPostfix.dir/build.make objects/CMakeFiles/isis3_unit_test_InlineInfixToPostfix.dir/build -.PHONY : isis3_unit_test_InlineInfixToPostfix/fast - -#============================================================================= -# Target rules for targets named bit2bit_app - -# Build rule for target. -bit2bit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 bit2bit_app -.PHONY : bit2bit_app - -# fast build rule for target. -bit2bit_app/fast: - $(MAKE) -f objects/CMakeFiles/bit2bit_app.dir/build.make objects/CMakeFiles/bit2bit_app.dir/build -.PHONY : bit2bit_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ExportPdsTable - -# Build rule for target. -isis3_unit_test_ExportPdsTable: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ExportPdsTable -.PHONY : isis3_unit_test_ExportPdsTable - -# fast build rule for target. -isis3_unit_test_ExportPdsTable/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ExportPdsTable.dir/build.make objects/CMakeFiles/isis3_unit_test_ExportPdsTable.dir/build -.PHONY : isis3_unit_test_ExportPdsTable/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PrincipalComponentAnalysis - -# Build rule for target. -isis3_unit_test_PrincipalComponentAnalysis: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PrincipalComponentAnalysis -.PHONY : isis3_unit_test_PrincipalComponentAnalysis - -# fast build rule for target. -isis3_unit_test_PrincipalComponentAnalysis/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PrincipalComponentAnalysis.dir/build.make objects/CMakeFiles/isis3_unit_test_PrincipalComponentAnalysis.dir/build -.PHONY : isis3_unit_test_PrincipalComponentAnalysis/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Equirectangular - -# Build rule for target. -isis3_unit_test_Equirectangular: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Equirectangular -.PHONY : isis3_unit_test_Equirectangular - -# fast build rule for target. -isis3_unit_test_Equirectangular/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Equirectangular.dir/build.make objects/CMakeFiles/isis3_unit_test_Equirectangular.dir/build -.PHONY : isis3_unit_test_Equirectangular/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TopoAtm - -# Build rule for target. -isis3_unit_test_TopoAtm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TopoAtm -.PHONY : isis3_unit_test_TopoAtm - -# fast build rule for target. -isis3_unit_test_TopoAtm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TopoAtm.dir/build.make objects/CMakeFiles/isis3_unit_test_TopoAtm.dir/build -.PHONY : isis3_unit_test_TopoAtm/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Environment - -# Build rule for target. -isis3_unit_test_Environment: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Environment -.PHONY : isis3_unit_test_Environment - -# fast build rule for target. -isis3_unit_test_Environment/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Environment.dir/build.make objects/CMakeFiles/isis3_unit_test_Environment.dir/build -.PHONY : isis3_unit_test_Environment/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Enlarge - -# Build rule for target. -isis3_unit_test_Enlarge: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Enlarge -.PHONY : isis3_unit_test_Enlarge - -# fast build rule for target. -isis3_unit_test_Enlarge/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Enlarge.dir/build.make objects/CMakeFiles/isis3_unit_test_Enlarge.dir/build -.PHONY : isis3_unit_test_Enlarge/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_OverlapNormalization - -# Build rule for target. -isis3_unit_test_OverlapNormalization: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OverlapNormalization -.PHONY : isis3_unit_test_OverlapNormalization - -# fast build rule for target. -isis3_unit_test_OverlapNormalization/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OverlapNormalization.dir/build.make objects/CMakeFiles/isis3_unit_test_OverlapNormalization.dir/build -.PHONY : isis3_unit_test_OverlapNormalization/fast - -#============================================================================= -# Target rules for targets named himos_app - -# Build rule for target. -himos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 himos_app -.PHONY : himos_app - -# fast build rule for target. -himos_app/fast: - $(MAKE) -f objects/CMakeFiles/himos_app.dir/build.make objects/CMakeFiles/himos_app.dir/build -.PHONY : himos_app/fast - -#============================================================================= -# Target rules for targets named StandardDeviationOperator - -# Build rule for target. -StandardDeviationOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 StandardDeviationOperator -.PHONY : StandardDeviationOperator - -# fast build rule for target. -StandardDeviationOperator/fast: - $(MAKE) -f objects/CMakeFiles/StandardDeviationOperator.dir/build.make objects/CMakeFiles/StandardDeviationOperator.dir/build -.PHONY : StandardDeviationOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SessionLog - -# Build rule for target. -isis3_unit_test_SessionLog: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SessionLog -.PHONY : isis3_unit_test_SessionLog - -# fast build rule for target. -isis3_unit_test_SessionLog/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SessionLog.dir/build.make objects/CMakeFiles/isis3_unit_test_SessionLog.dir/build -.PHONY : isis3_unit_test_SessionLog/fast - -#============================================================================= -# Target rules for targets named makeflat_app - -# Build rule for target. -makeflat_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 makeflat_app -.PHONY : makeflat_app - -# fast build rule for target. -makeflat_app/fast: - $(MAKE) -f objects/CMakeFiles/makeflat_app.dir/build.make objects/CMakeFiles/makeflat_app.dir/build -.PHONY : makeflat_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LunarLambert - -# Build rule for target. -isis3_unit_test_LunarLambert: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarLambert -.PHONY : isis3_unit_test_LunarLambert - -# fast build rule for target. -isis3_unit_test_LunarLambert/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarLambert.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarLambert.dir/build -.PHONY : isis3_unit_test_LunarLambert/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Distance - -# Build rule for target. -isis3_unit_test_Distance: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Distance -.PHONY : isis3_unit_test_Distance - -# fast build rule for target. -isis3_unit_test_Distance/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Distance.dir/build.make objects/CMakeFiles/isis3_unit_test_Distance.dir/build -.PHONY : isis3_unit_test_Distance/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Displacement - -# Build rule for target. -isis3_unit_test_Displacement: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Displacement -.PHONY : isis3_unit_test_Displacement - -# fast build rule for target. -isis3_unit_test_Displacement/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Displacement.dir/build.make objects/CMakeFiles/isis3_unit_test_Displacement.dir/build -.PHONY : isis3_unit_test_Displacement/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_JP2Encoder - -# Build rule for target. -isis3_unit_test_JP2Encoder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Encoder -.PHONY : isis3_unit_test_JP2Encoder - -# fast build rule for target. -isis3_unit_test_JP2Encoder/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Encoder.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Encoder.dir/build -.PHONY : isis3_unit_test_JP2Encoder/fast - -#============================================================================= -# Target rules for targets named cassini_unit_test_CisscalFile - -# Build rule for target. -cassini_unit_test_CisscalFile: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_CisscalFile -.PHONY : cassini_unit_test_CisscalFile - -# fast build rule for target. -cassini_unit_test_CisscalFile/fast: - $(MAKE) -f objects/CMakeFiles/cassini_unit_test_CisscalFile.dir/build.make objects/CMakeFiles/cassini_unit_test_CisscalFile.dir/build -.PHONY : cassini_unit_test_CisscalFile/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ImageOverlap - -# Build rule for target. -isis3_unit_test_ImageOverlap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImageOverlap -.PHONY : isis3_unit_test_ImageOverlap - -# fast build rule for target. -isis3_unit_test_ImageOverlap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImageOverlap.dir/build.make objects/CMakeFiles/isis3_unit_test_ImageOverlap.dir/build -.PHONY : isis3_unit_test_ImageOverlap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_DemShape - -# Build rule for target. -isis3_unit_test_DemShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DemShape -.PHONY : isis3_unit_test_DemShape - -# fast build rule for target. -isis3_unit_test_DemShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DemShape.dir/build.make objects/CMakeFiles/isis3_unit_test_DemShape.dir/build -.PHONY : isis3_unit_test_DemShape/fast - -#============================================================================= -# Target rules for targets named trimfilter_app - -# Build rule for target. -trimfilter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 trimfilter_app -.PHONY : trimfilter_app - -# fast build rule for target. -trimfilter_app/fast: - $(MAKE) -f objects/CMakeFiles/trimfilter_app.dir/build.make objects/CMakeFiles/trimfilter_app.dir/build -.PHONY : trimfilter_app/fast - -#============================================================================= -# Target rules for targets named MoonAlbedo - -# Build rule for target. -MoonAlbedo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MoonAlbedo -.PHONY : MoonAlbedo - -# fast build rule for target. -MoonAlbedo/fast: - $(MAKE) -f objects/CMakeFiles/MoonAlbedo.dir/build.make objects/CMakeFiles/MoonAlbedo.dir/build -.PHONY : MoonAlbedo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GisBlob - -# Build rule for target. -isis3_unit_test_GisBlob: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GisBlob -.PHONY : isis3_unit_test_GisBlob - -# fast build rule for target. -isis3_unit_test_GisBlob/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GisBlob.dir/build.make objects/CMakeFiles/isis3_unit_test_GisBlob.dir/build -.PHONY : isis3_unit_test_GisBlob/fast - -#============================================================================= -# Target rules for targets named noisefilter_app - -# Build rule for target. -noisefilter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 noisefilter_app -.PHONY : noisefilter_app - -# fast build rule for target. -noisefilter_app/fast: - $(MAKE) -f objects/CMakeFiles/noisefilter_app.dir/build.make objects/CMakeFiles/noisefilter_app.dir/build -.PHONY : noisefilter_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CubeManager - -# Build rule for target. -isis3_unit_test_CubeManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeManager -.PHONY : isis3_unit_test_CubeManager - -# fast build rule for target. -isis3_unit_test_CubeManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeManager.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeManager.dir/build -.PHONY : isis3_unit_test_CubeManager/fast - -#============================================================================= -# Target rules for targets named lo2isis_app - -# Build rule for target. -lo2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lo2isis_app -.PHONY : lo2isis_app - -# fast build rule for target. -lo2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/lo2isis_app.dir/build.make objects/CMakeFiles/lo2isis_app.dir/build -.PHONY : lo2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AutoReg - -# Build rule for target. -isis3_unit_test_AutoReg: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AutoReg -.PHONY : isis3_unit_test_AutoReg - -# fast build rule for target. -isis3_unit_test_AutoReg/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AutoReg.dir/build.make objects/CMakeFiles/isis3_unit_test_AutoReg.dir/build -.PHONY : isis3_unit_test_AutoReg/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Stereo - -# Build rule for target. -isis3_unit_test_Stereo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Stereo -.PHONY : isis3_unit_test_Stereo - -# fast build rule for target. -isis3_unit_test_Stereo/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Stereo.dir/build.make objects/CMakeFiles/isis3_unit_test_Stereo.dir/build -.PHONY : isis3_unit_test_Stereo/fast - -#============================================================================= -# Target rules for targets named LunarLambertEmpirical - -# Build rule for target. -LunarLambertEmpirical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LunarLambertEmpirical -.PHONY : LunarLambertEmpirical - -# fast build rule for target. -LunarLambertEmpirical/fast: - $(MAKE) -f objects/CMakeFiles/LunarLambertEmpirical.dir/build.make objects/CMakeFiles/LunarLambertEmpirical.dir/build -.PHONY : LunarLambertEmpirical/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Latitude - -# Build rule for target. -isis3_unit_test_Latitude: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Latitude -.PHONY : isis3_unit_test_Latitude - -# fast build rule for target. -isis3_unit_test_Latitude/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Latitude.dir/build.make objects/CMakeFiles/isis3_unit_test_Latitude.dir/build -.PHONY : isis3_unit_test_Latitude/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MaximumLikelihoodWFunctions - -# Build rule for target. -isis3_unit_test_MaximumLikelihoodWFunctions: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MaximumLikelihoodWFunctions -.PHONY : isis3_unit_test_MaximumLikelihoodWFunctions - -# fast build rule for target. -isis3_unit_test_MaximumLikelihoodWFunctions/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MaximumLikelihoodWFunctions.dir/build.make objects/CMakeFiles/isis3_unit_test_MaximumLikelihoodWFunctions.dir/build -.PHONY : isis3_unit_test_MaximumLikelihoodWFunctions/fast - -#============================================================================= -# Target rules for targets named LoMediumCamera - -# Build rule for target. -LoMediumCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LoMediumCamera -.PHONY : LoMediumCamera - -# fast build rule for target. -LoMediumCamera/fast: - $(MAKE) -f objects/CMakeFiles/LoMediumCamera.dir/build.make objects/CMakeFiles/LoMediumCamera.dir/build -.PHONY : LoMediumCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Constants - -# Build rule for target. -isis3_unit_test_Constants: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Constants -.PHONY : isis3_unit_test_Constants - -# fast build rule for target. -isis3_unit_test_Constants/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Constants.dir/build.make objects/CMakeFiles/isis3_unit_test_Constants.dir/build -.PHONY : isis3_unit_test_Constants/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_EmbreeShapeModel - -# Build rule for target. -isis3_unit_test_EmbreeShapeModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EmbreeShapeModel -.PHONY : isis3_unit_test_EmbreeShapeModel - -# fast build rule for target. -isis3_unit_test_EmbreeShapeModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EmbreeShapeModel.dir/build.make objects/CMakeFiles/isis3_unit_test_EmbreeShapeModel.dir/build -.PHONY : isis3_unit_test_EmbreeShapeModel/fast - -#============================================================================= -# Target rules for targets named NoOperator - -# Build rule for target. -NoOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NoOperator -.PHONY : NoOperator - -# fast build rule for target. -NoOperator/fast: - $(MAKE) -f objects/CMakeFiles/NoOperator.dir/build.make objects/CMakeFiles/NoOperator.dir/build -.PHONY : NoOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_IString - -# Build rule for target. -isis3_unit_test_IString: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IString -.PHONY : isis3_unit_test_IString - -# fast build rule for target. -isis3_unit_test_IString/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IString.dir/build.make objects/CMakeFiles/isis3_unit_test_IString.dir/build -.PHONY : isis3_unit_test_IString/fast - -#============================================================================= -# Target rules for targets named ThemisIrCamera - -# Build rule for target. -ThemisIrCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ThemisIrCamera -.PHONY : ThemisIrCamera - -# fast build rule for target. -ThemisIrCamera/fast: - $(MAKE) -f objects/CMakeFiles/ThemisIrCamera.dir/build.make objects/CMakeFiles/ThemisIrCamera.dir/build -.PHONY : ThemisIrCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Column - -# Build rule for target. -isis3_unit_test_Column: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Column -.PHONY : isis3_unit_test_Column - -# fast build rule for target. -isis3_unit_test_Column/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Column.dir/build.make objects/CMakeFiles/isis3_unit_test_Column.dir/build -.PHONY : isis3_unit_test_Column/fast - -#============================================================================= -# Target rules for targets named MarciCamera - -# Build rule for target. -MarciCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MarciCamera -.PHONY : MarciCamera - -# fast build rule for target. -MarciCamera/fast: - $(MAKE) -f objects/CMakeFiles/MarciCamera.dir/build.make objects/CMakeFiles/MarciCamera.dir/build -.PHONY : MarciCamera/fast - -#============================================================================= -# Target rules for targets named cnetadd_app - -# Build rule for target. -cnetadd_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetadd_app -.PHONY : cnetadd_app - -# fast build rule for target. -cnetadd_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetadd_app.dir/build.make objects/CMakeFiles/cnetadd_app.dir/build -.PHONY : cnetadd_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CollectorMap - -# Build rule for target. -isis3_unit_test_CollectorMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CollectorMap -.PHONY : isis3_unit_test_CollectorMap - -# fast build rule for target. -isis3_unit_test_CollectorMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CollectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CollectorMap.dir/build -.PHONY : isis3_unit_test_CollectorMap/fast - -#============================================================================= -# Target rules for targets named HrscCamera - -# Build rule for target. -HrscCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HrscCamera -.PHONY : HrscCamera - -# fast build rule for target. -HrscCamera/fast: - $(MAKE) -f objects/CMakeFiles/HrscCamera.dir/build.make objects/CMakeFiles/HrscCamera.dir/build -.PHONY : HrscCamera/fast - -#============================================================================= -# Target rules for targets named MoravecOperator - -# Build rule for target. -MoravecOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MoravecOperator -.PHONY : MoravecOperator - -# fast build rule for target. -MoravecOperator/fast: - $(MAKE) -f objects/CMakeFiles/MoravecOperator.dir/build.make objects/CMakeFiles/MoravecOperator.dir/build -.PHONY : MoravecOperator/fast - -#============================================================================= -# Target rules for targets named hicolormos_app - -# Build rule for target. -hicolormos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hicolormos_app -.PHONY : hicolormos_app - -# fast build rule for target. -hicolormos_app/fast: - $(MAKE) -f objects/CMakeFiles/hicolormos_app.dir/build.make objects/CMakeFiles/hicolormos_app.dir/build -.PHONY : hicolormos_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CSVReader - -# Build rule for target. -isis3_unit_test_CSVReader: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CSVReader -.PHONY : isis3_unit_test_CSVReader - -# fast build rule for target. -isis3_unit_test_CSVReader/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CSVReader.dir/build.make objects/CMakeFiles/isis3_unit_test_CSVReader.dir/build -.PHONY : isis3_unit_test_CSVReader/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Interpolator - -# Build rule for target. -isis3_unit_test_Interpolator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Interpolator -.PHONY : isis3_unit_test_Interpolator - -# fast build rule for target. -isis3_unit_test_Interpolator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Interpolator.dir/build.make objects/CMakeFiles/isis3_unit_test_Interpolator.dir/build -.PHONY : isis3_unit_test_Interpolator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpectralDefinition - -# Build rule for target. -isis3_unit_test_SpectralDefinition: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinition -.PHONY : isis3_unit_test_SpectralDefinition - -# fast build rule for target. -isis3_unit_test_SpectralDefinition/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinition.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinition.dir/build -.PHONY : isis3_unit_test_SpectralDefinition/fast - -#============================================================================= -# Target rules for targets named StripPolygonSeeder - -# Build rule for target. -StripPolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 StripPolygonSeeder -.PHONY : StripPolygonSeeder - -# fast build rule for target. -StripPolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/StripPolygonSeeder.dir/build.make objects/CMakeFiles/StripPolygonSeeder.dir/build -.PHONY : StripPolygonSeeder/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MosaicSceneWidget - -# Build rule for target. -isis3_unit_test_MosaicSceneWidget: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MosaicSceneWidget -.PHONY : isis3_unit_test_MosaicSceneWidget - -# fast build rule for target. -isis3_unit_test_MosaicSceneWidget/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MosaicSceneWidget.dir/build.make objects/CMakeFiles/isis3_unit_test_MosaicSceneWidget.dir/build -.PHONY : isis3_unit_test_MosaicSceneWidget/fast - -#============================================================================= -# Target rules for targets named explode_app - -# Build rule for target. -explode_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 explode_app -.PHONY : explode_app - -# fast build rule for target. -explode_app/fast: - $(MAKE) -f objects/CMakeFiles/explode_app.dir/build.make objects/CMakeFiles/explode_app.dir/build -.PHONY : explode_app/fast - -#============================================================================= -# Target rules for targets named ObliqueCylindrical - -# Build rule for target. -ObliqueCylindrical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ObliqueCylindrical -.PHONY : ObliqueCylindrical - -# fast build rule for target. -ObliqueCylindrical/fast: - $(MAKE) -f objects/CMakeFiles/ObliqueCylindrical.dir/build.make objects/CMakeFiles/ObliqueCylindrical.dir/build -.PHONY : ObliqueCylindrical/fast - -#============================================================================= -# Target rules for targets named LunarLambertMcEwen - -# Build rule for target. -LunarLambertMcEwen: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LunarLambertMcEwen -.PHONY : LunarLambertMcEwen - -# fast build rule for target. -LunarLambertMcEwen/fast: - $(MAKE) -f objects/CMakeFiles/LunarLambertMcEwen.dir/build.make objects/CMakeFiles/LunarLambertMcEwen.dir/build -.PHONY : LunarLambertMcEwen/fast - -#============================================================================= -# Target rules for targets named PolarStereographic - -# Build rule for target. -PolarStereographic: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 PolarStereographic -.PHONY : PolarStereographic - -# fast build rule for target. -PolarStereographic/fast: - $(MAKE) -f objects/CMakeFiles/PolarStereographic.dir/build.make objects/CMakeFiles/PolarStereographic.dir/build -.PHONY : PolarStereographic/fast - -#============================================================================= -# Target rules for targets named MocNarrowAngleCamera - -# Build rule for target. -MocNarrowAngleCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MocNarrowAngleCamera -.PHONY : MocNarrowAngleCamera - -# fast build rule for target. -MocNarrowAngleCamera/fast: - $(MAKE) -f objects/CMakeFiles/MocNarrowAngleCamera.dir/build.make objects/CMakeFiles/MocNarrowAngleCamera.dir/build -.PHONY : MocNarrowAngleCamera/fast - -#============================================================================= -# Target rules for targets named PointPerspective - -# Build rule for target. -PointPerspective: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 PointPerspective -.PHONY : PointPerspective - -# fast build rule for target. -PointPerspective/fast: - $(MAKE) -f objects/CMakeFiles/PointPerspective.dir/build.make objects/CMakeFiles/PointPerspective.dir/build -.PHONY : PointPerspective/fast - -#============================================================================= -# Target rules for targets named mical_app - -# Build rule for target. -mical_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mical_app -.PHONY : mical_app - -# fast build rule for target. -mical_app/fast: - $(MAKE) -f objects/CMakeFiles/mical_app.dir/build.make objects/CMakeFiles/mical_app.dir/build -.PHONY : mical_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TransverseMercator - -# Build rule for target. -isis3_unit_test_TransverseMercator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TransverseMercator -.PHONY : isis3_unit_test_TransverseMercator - -# fast build rule for target. -isis3_unit_test_TransverseMercator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TransverseMercator.dir/build.make objects/CMakeFiles/isis3_unit_test_TransverseMercator.dir/build -.PHONY : isis3_unit_test_TransverseMercator/fast - -#============================================================================= -# Target rules for targets named LoHighCamera - -# Build rule for target. -LoHighCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LoHighCamera -.PHONY : LoHighCamera - -# fast build rule for target. -LoHighCamera/fast: - $(MAKE) -f objects/CMakeFiles/LoHighCamera.dir/build.make objects/CMakeFiles/LoHighCamera.dir/build -.PHONY : LoHighCamera/fast - -#============================================================================= -# Target rules for targets named AdaptiveGruen - -# Build rule for target. -AdaptiveGruen: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 AdaptiveGruen -.PHONY : AdaptiveGruen - -# fast build rule for target. -AdaptiveGruen/fast: - $(MAKE) -f objects/CMakeFiles/AdaptiveGruen.dir/build.make objects/CMakeFiles/AdaptiveGruen.dir/build -.PHONY : AdaptiveGruen/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Spice - -# Build rule for target. -isis3_unit_test_Spice: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Spice -.PHONY : isis3_unit_test_Spice - -# fast build rule for target. -isis3_unit_test_Spice/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Spice.dir/build.make objects/CMakeFiles/isis3_unit_test_Spice.dir/build -.PHONY : isis3_unit_test_Spice/fast - -#============================================================================= -# Target rules for targets named LambertAzimuthalEqualArea - -# Build rule for target. -LambertAzimuthalEqualArea: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LambertAzimuthalEqualArea -.PHONY : LambertAzimuthalEqualArea - -# fast build rule for target. -LambertAzimuthalEqualArea/fast: - $(MAKE) -f objects/CMakeFiles/LambertAzimuthalEqualArea.dir/build.make objects/CMakeFiles/LambertAzimuthalEqualArea.dir/build -.PHONY : LambertAzimuthalEqualArea/fast - -#============================================================================= -# Target rules for targets named mirror_app - -# Build rule for target. -mirror_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mirror_app -.PHONY : mirror_app - -# fast build rule for target. -mirror_app/fast: - $(MAKE) -f objects/CMakeFiles/mirror_app.dir/build.make objects/CMakeFiles/mirror_app.dir/build -.PHONY : mirror_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_History - -# Build rule for target. -isis3_unit_test_History: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_History -.PHONY : isis3_unit_test_History - -# fast build rule for target. -isis3_unit_test_History/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_History.dir/build.make objects/CMakeFiles/isis3_unit_test_History.dir/build -.PHONY : isis3_unit_test_History/fast - -#============================================================================= -# Target rules for targets named rosvirtis2isis_app - -# Build rule for target. -rosvirtis2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 rosvirtis2isis_app -.PHONY : rosvirtis2isis_app - -# fast build rule for target. -rosvirtis2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/rosvirtis2isis_app.dir/build.make objects/CMakeFiles/rosvirtis2isis_app.dir/build -.PHONY : rosvirtis2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MinimumDifference - -# Build rule for target. -isis3_unit_test_MinimumDifference: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MinimumDifference -.PHONY : isis3_unit_test_MinimumDifference - -# fast build rule for target. -isis3_unit_test_MinimumDifference/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MinimumDifference.dir/build.make objects/CMakeFiles/isis3_unit_test_MinimumDifference.dir/build -.PHONY : isis3_unit_test_MinimumDifference/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessByTile - -# Build rule for target. -isis3_unit_test_ProcessByTile: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByTile -.PHONY : isis3_unit_test_ProcessByTile - -# fast build rule for target. -isis3_unit_test_ProcessByTile/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByTile.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByTile.dir/build -.PHONY : isis3_unit_test_ProcessByTile/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlTokenizer - -# Build rule for target. -isis3_unit_test_PvlTokenizer: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlTokenizer -.PHONY : isis3_unit_test_PvlTokenizer - -# fast build rule for target. -isis3_unit_test_PvlTokenizer/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlTokenizer.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlTokenizer.dir/build -.PHONY : isis3_unit_test_PvlTokenizer/fast - -#============================================================================= -# Target rules for targets named thmvistrim_app - -# Build rule for target. -thmvistrim_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thmvistrim_app -.PHONY : thmvistrim_app - -# fast build rule for target. -thmvistrim_app/fast: - $(MAKE) -f objects/CMakeFiles/thmvistrim_app.dir/build.make objects/CMakeFiles/thmvistrim_app.dir/build -.PHONY : thmvistrim_app/fast - -#============================================================================= -# Target rules for targets named MocWideAngleCamera - -# Build rule for target. -MocWideAngleCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MocWideAngleCamera -.PHONY : MocWideAngleCamera - -# fast build rule for target. -MocWideAngleCamera/fast: - $(MAKE) -f objects/CMakeFiles/MocWideAngleCamera.dir/build.make objects/CMakeFiles/MocWideAngleCamera.dir/build -.PHONY : MocWideAngleCamera/fast - -#============================================================================= -# Target rules for targets named mdisproc_app - -# Build rule for target. -mdisproc_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mdisproc_app -.PHONY : mdisproc_app - -# fast build rule for target. -mdisproc_app/fast: - $(MAKE) -f objects/CMakeFiles/mdisproc_app.dir/build.make objects/CMakeFiles/mdisproc_app.dir/build -.PHONY : mdisproc_app/fast - -#============================================================================= -# Target rules for targets named Planar - -# Build rule for target. -Planar: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Planar -.PHONY : Planar - -# fast build rule for target. -Planar/fast: - $(MAKE) -f objects/CMakeFiles/Planar.dir/build.make objects/CMakeFiles/Planar.dir/build -.PHONY : Planar/fast - -#============================================================================= -# Target rules for targets named hijitreg_app - -# Build rule for target. -hijitreg_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hijitreg_app -.PHONY : hijitreg_app - -# fast build rule for target. -hijitreg_app/fast: - $(MAKE) -f objects/CMakeFiles/hijitreg_app.dir/build.make objects/CMakeFiles/hijitreg_app.dir/build -.PHONY : hijitreg_app/fast - -#============================================================================= -# Target rules for targets named MaximumCorrelation - -# Build rule for target. -MaximumCorrelation: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MaximumCorrelation -.PHONY : MaximumCorrelation - -# fast build rule for target. -MaximumCorrelation/fast: - $(MAKE) -f objects/CMakeFiles/MaximumCorrelation.dir/build.make objects/CMakeFiles/MaximumCorrelation.dir/build -.PHONY : MaximumCorrelation/fast - -#============================================================================= -# Target rules for targets named Hapke - -# Build rule for target. -Hapke: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Hapke -.PHONY : Hapke - -# fast build rule for target. -Hapke/fast: - $(MAKE) -f objects/CMakeFiles/Hapke.dir/build.make objects/CMakeFiles/Hapke.dir/build -.PHONY : Hapke/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlFormatPds - -# Build rule for target. -isis3_unit_test_PvlFormatPds: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlFormatPds -.PHONY : isis3_unit_test_PvlFormatPds - -# fast build rule for target. -isis3_unit_test_PvlFormatPds/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlFormatPds.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlFormatPds.dir/build -.PHONY : isis3_unit_test_PvlFormatPds/fast - -#============================================================================= -# Target rules for targets named cnetsplit_app - -# Build rule for target. -cnetsplit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetsplit_app -.PHONY : cnetsplit_app - -# fast build rule for target. -cnetsplit_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetsplit_app.dir/build.make objects/CMakeFiles/cnetsplit_app.dir/build -.PHONY : cnetsplit_app/fast - -#============================================================================= -# Target rules for targets named TransverseMercator - -# Build rule for target. -TransverseMercator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 TransverseMercator -.PHONY : TransverseMercator - -# fast build rule for target. -TransverseMercator/fast: - $(MAKE) -f objects/CMakeFiles/TransverseMercator.dir/build.make objects/CMakeFiles/TransverseMercator.dir/build -.PHONY : TransverseMercator/fast - -#============================================================================= -# Target rules for targets named ciss2isis_app - -# Build rule for target. -ciss2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ciss2isis_app -.PHONY : ciss2isis_app - -# fast build rule for target. -ciss2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/ciss2isis_app.dir/build.make objects/CMakeFiles/ciss2isis_app.dir/build -.PHONY : ciss2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Cube - -# Build rule for target. -isis3_unit_test_Cube: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Cube -.PHONY : isis3_unit_test_Cube - -# fast build rule for target. -isis3_unit_test_Cube/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Cube.dir/build.make objects/CMakeFiles/isis3_unit_test_Cube.dir/build -.PHONY : isis3_unit_test_Cube/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AdaptiveGruen - -# Build rule for target. -isis3_unit_test_AdaptiveGruen: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AdaptiveGruen -.PHONY : isis3_unit_test_AdaptiveGruen - -# fast build rule for target. -isis3_unit_test_AdaptiveGruen/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AdaptiveGruen.dir/build.make objects/CMakeFiles/isis3_unit_test_AdaptiveGruen.dir/build -.PHONY : isis3_unit_test_AdaptiveGruen/fast - -#============================================================================= -# Target rules for targets named cubenorm_app - -# Build rule for target. -cubenorm_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cubenorm_app -.PHONY : cubenorm_app - -# fast build rule for target. -cubenorm_app/fast: - $(MAKE) -f objects/CMakeFiles/cubenorm_app.dir/build.make objects/CMakeFiles/cubenorm_app.dir/build -.PHONY : cubenorm_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Chip - -# Build rule for target. -isis3_unit_test_Chip: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Chip -.PHONY : isis3_unit_test_Chip - -# fast build rule for target. -isis3_unit_test_Chip/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Chip.dir/build.make objects/CMakeFiles/isis3_unit_test_Chip.dir/build -.PHONY : isis3_unit_test_Chip/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ExportDescription - -# Build rule for target. -isis3_unit_test_ExportDescription: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ExportDescription -.PHONY : isis3_unit_test_ExportDescription - -# fast build rule for target. -isis3_unit_test_ExportDescription/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ExportDescription.dir/build.make objects/CMakeFiles/isis3_unit_test_ExportDescription.dir/build -.PHONY : isis3_unit_test_ExportDescription/fast - -#============================================================================= -# Target rules for targets named appjit_app - -# Build rule for target. -appjit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 appjit_app -.PHONY : appjit_app - -# fast build rule for target. -appjit_app/fast: - $(MAKE) -f objects/CMakeFiles/appjit_app.dir/build.make objects/CMakeFiles/appjit_app.dir/build -.PHONY : appjit_app/fast - -#============================================================================= -# Target rules for targets named ckwriter_app - -# Build rule for target. -ckwriter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ckwriter_app -.PHONY : ckwriter_app - -# fast build rule for target. -ckwriter_app/fast: - $(MAKE) -f objects/CMakeFiles/ckwriter_app.dir/build.make objects/CMakeFiles/ckwriter_app.dir/build -.PHONY : ckwriter_app/fast - -#============================================================================= -# Target rules for targets named ForstnerOperator - -# Build rule for target. -ForstnerOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ForstnerOperator -.PHONY : ForstnerOperator - -# fast build rule for target. -ForstnerOperator/fast: - $(MAKE) -f objects/CMakeFiles/ForstnerOperator.dir/build.make objects/CMakeFiles/ForstnerOperator.dir/build -.PHONY : ForstnerOperator/fast - -#============================================================================= -# Target rules for targets named Lambert - -# Build rule for target. -Lambert: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Lambert -.PHONY : Lambert - -# fast build rule for target. -Lambert/fast: - $(MAKE) -f objects/CMakeFiles/Lambert.dir/build.make objects/CMakeFiles/Lambert.dir/build -.PHONY : Lambert/fast - -#============================================================================= -# Target rules for targets named mrf2isis_app - -# Build rule for target. -mrf2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mrf2isis_app -.PHONY : mrf2isis_app - -# fast build rule for target. -mrf2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mrf2isis_app.dir/build.make objects/CMakeFiles/mrf2isis_app.dir/build -.PHONY : mrf2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Spectel - -# Build rule for target. -isis3_unit_test_Spectel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Spectel -.PHONY : isis3_unit_test_Spectel - -# fast build rule for target. -isis3_unit_test_Spectel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Spectel.dir/build.make objects/CMakeFiles/isis3_unit_test_Spectel.dir/build -.PHONY : isis3_unit_test_Spectel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Topo - -# Build rule for target. -isis3_unit_test_Topo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Topo -.PHONY : isis3_unit_test_Topo - -# fast build rule for target. -isis3_unit_test_Topo/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Topo.dir/build.make objects/CMakeFiles/isis3_unit_test_Topo.dir/build -.PHONY : isis3_unit_test_Topo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Equalization - -# Build rule for target. -isis3_unit_test_Equalization: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Equalization -.PHONY : isis3_unit_test_Equalization - -# fast build rule for target. -isis3_unit_test_Equalization/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Equalization.dir/build.make objects/CMakeFiles/isis3_unit_test_Equalization.dir/build -.PHONY : isis3_unit_test_Equalization/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Hillshade - -# Build rule for target. -isis3_unit_test_Hillshade: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Hillshade -.PHONY : isis3_unit_test_Hillshade - -# fast build rule for target. -isis3_unit_test_Hillshade/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Hillshade.dir/build.make objects/CMakeFiles/isis3_unit_test_Hillshade.dir/build -.PHONY : isis3_unit_test_Hillshade/fast - -#============================================================================= -# Target rules for targets named DawnVirCamera - -# Build rule for target. -DawnVirCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 DawnVirCamera -.PHONY : DawnVirCamera - -# fast build rule for target. -DawnVirCamera/fast: - $(MAKE) -f objects/CMakeFiles/DawnVirCamera.dir/build.make objects/CMakeFiles/DawnVirCamera.dir/build -.PHONY : DawnVirCamera/fast - -#============================================================================= -# Target rules for targets named Sinusoidal - -# Build rule for target. -Sinusoidal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Sinusoidal -.PHONY : Sinusoidal - -# fast build rule for target. -Sinusoidal/fast: - $(MAKE) -f objects/CMakeFiles/Sinusoidal.dir/build.make objects/CMakeFiles/Sinusoidal.dir/build -.PHONY : Sinusoidal/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Projection - -# Build rule for target. -isis3_unit_test_Projection: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Projection -.PHONY : isis3_unit_test_Projection - -# fast build rule for target. -isis3_unit_test_Projection/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Projection.dir/build.make objects/CMakeFiles/isis3_unit_test_Projection.dir/build -.PHONY : isis3_unit_test_Projection/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadarGroundMap - -# Build rule for target. -isis3_unit_test_RadarGroundMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarGroundMap -.PHONY : isis3_unit_test_RadarGroundMap - -# fast build rule for target. -isis3_unit_test_RadarGroundMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarGroundMap.dir/build -.PHONY : isis3_unit_test_RadarGroundMap/fast - -#============================================================================= -# Target rules for targets named cathist_app - -# Build rule for target. -cathist_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cathist_app -.PHONY : cathist_app - -# fast build rule for target. -cathist_app/fast: - $(MAKE) -f objects/CMakeFiles/cathist_app.dir/build.make objects/CMakeFiles/cathist_app.dir/build -.PHONY : cathist_app/fast - -#============================================================================= -# Target rules for targets named LommelSeeliger - -# Build rule for target. -LommelSeeliger: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LommelSeeliger -.PHONY : LommelSeeliger - -# fast build rule for target. -LommelSeeliger/fast: - $(MAKE) -f objects/CMakeFiles/LommelSeeliger.dir/build.make objects/CMakeFiles/LommelSeeliger.dir/build -.PHONY : LommelSeeliger/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SimpleCylindrical - -# Build rule for target. -isis3_unit_test_SimpleCylindrical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SimpleCylindrical -.PHONY : isis3_unit_test_SimpleCylindrical - -# fast build rule for target. -isis3_unit_test_SimpleCylindrical/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SimpleCylindrical.dir/build.make objects/CMakeFiles/isis3_unit_test_SimpleCylindrical.dir/build -.PHONY : isis3_unit_test_SimpleCylindrical/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GisTopology - -# Build rule for target. -isis3_unit_test_GisTopology: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GisTopology -.PHONY : isis3_unit_test_GisTopology - -# fast build rule for target. -isis3_unit_test_GisTopology/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GisTopology.dir/build.make objects/CMakeFiles/isis3_unit_test_GisTopology.dir/build -.PHONY : isis3_unit_test_GisTopology/fast - -#============================================================================= -# Target rules for targets named HapkeAtm1 - -# Build rule for target. -HapkeAtm1: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HapkeAtm1 -.PHONY : HapkeAtm1 - -# fast build rule for target. -HapkeAtm1/fast: - $(MAKE) -f objects/CMakeFiles/HapkeAtm1.dir/build.make objects/CMakeFiles/HapkeAtm1.dir/build -.PHONY : HapkeAtm1/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Message - -# Build rule for target. -isis3_unit_test_Message: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Message -.PHONY : isis3_unit_test_Message - -# fast build rule for target. -isis3_unit_test_Message/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Message.dir/build.make objects/CMakeFiles/isis3_unit_test_Message.dir/build -.PHONY : isis3_unit_test_Message/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_DatabaseFactory - -# Build rule for target. -isis3_unit_test_DatabaseFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DatabaseFactory -.PHONY : isis3_unit_test_DatabaseFactory - -# fast build rule for target. -isis3_unit_test_DatabaseFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DatabaseFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_DatabaseFactory.dir/build -.PHONY : isis3_unit_test_DatabaseFactory/fast - -#============================================================================= -# Target rules for targets named rolo2isis_app - -# Build rule for target. -rolo2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 rolo2isis_app -.PHONY : rolo2isis_app - -# fast build rule for target. -rolo2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/rolo2isis_app.dir/build.make objects/CMakeFiles/rolo2isis_app.dir/build -.PHONY : rolo2isis_app/fast - -#============================================================================= -# Target rules for targets named LroNarrowAngleCamera - -# Build rule for target. -LroNarrowAngleCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LroNarrowAngleCamera -.PHONY : LroNarrowAngleCamera - -# fast build rule for target. -LroNarrowAngleCamera/fast: - $(MAKE) -f objects/CMakeFiles/LroNarrowAngleCamera.dir/build.make objects/CMakeFiles/LroNarrowAngleCamera.dir/build -.PHONY : LroNarrowAngleCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_FunctionTools - -# Build rule for target. -isis3_unit_test_FunctionTools: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FunctionTools -.PHONY : isis3_unit_test_FunctionTools - -# fast build rule for target. -isis3_unit_test_FunctionTools/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FunctionTools.dir/build.make objects/CMakeFiles/isis3_unit_test_FunctionTools.dir/build -.PHONY : isis3_unit_test_FunctionTools/fast - -#============================================================================= -# Target rules for targets named noproj_app - -# Build rule for target. -noproj_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 noproj_app -.PHONY : noproj_app - -# fast build rule for target. -noproj_app/fast: - $(MAKE) -f objects/CMakeFiles/noproj_app.dir/build.make objects/CMakeFiles/noproj_app.dir/build -.PHONY : noproj_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Minnaert - -# Build rule for target. -isis3_unit_test_Minnaert: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Minnaert -.PHONY : isis3_unit_test_Minnaert - -# fast build rule for target. -isis3_unit_test_Minnaert/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Minnaert.dir/build.make objects/CMakeFiles/isis3_unit_test_Minnaert.dir/build -.PHONY : isis3_unit_test_Minnaert/fast - -#============================================================================= -# Target rules for targets named mat2cnet_app - -# Build rule for target. -mat2cnet_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mat2cnet_app -.PHONY : mat2cnet_app - -# fast build rule for target. -mat2cnet_app/fast: - $(MAKE) -f objects/CMakeFiles/mat2cnet_app.dir/build.make objects/CMakeFiles/mat2cnet_app.dir/build -.PHONY : mat2cnet_app/fast - -#============================================================================= -# Target rules for targets named camrange_app - -# Build rule for target. -camrange_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 camrange_app -.PHONY : camrange_app - -# fast build rule for target. -camrange_app/fast: - $(MAKE) -f objects/CMakeFiles/camrange_app.dir/build.make objects/CMakeFiles/camrange_app.dir/build -.PHONY : camrange_app/fast - -#============================================================================= -# Target rules for targets named Orthographic - -# Build rule for target. -Orthographic: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Orthographic -.PHONY : Orthographic - -# fast build rule for target. -Orthographic/fast: - $(MAKE) -f objects/CMakeFiles/Orthographic.dir/build.make objects/CMakeFiles/Orthographic.dir/build -.PHONY : Orthographic/fast - -#============================================================================= -# Target rules for targets named camstats_app - -# Build rule for target. -camstats_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 camstats_app -.PHONY : camstats_app - -# fast build rule for target. -camstats_app/fast: - $(MAKE) -f objects/CMakeFiles/camstats_app.dir/build.make objects/CMakeFiles/camstats_app.dir/build -.PHONY : camstats_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ObliqueCylindrical - -# Build rule for target. -isis3_unit_test_ObliqueCylindrical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ObliqueCylindrical -.PHONY : isis3_unit_test_ObliqueCylindrical - -# fast build rule for target. -isis3_unit_test_ObliqueCylindrical/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ObliqueCylindrical.dir/build.make objects/CMakeFiles/isis3_unit_test_ObliqueCylindrical.dir/build -.PHONY : isis3_unit_test_ObliqueCylindrical/fast - -#============================================================================= -# Target rules for targets named NirCamera - -# Build rule for target. -NirCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NirCamera -.PHONY : NirCamera - -# fast build rule for target. -NirCamera/fast: - $(MAKE) -f objects/CMakeFiles/NirCamera.dir/build.make objects/CMakeFiles/NirCamera.dir/build -.PHONY : NirCamera/fast - -#============================================================================= -# Target rules for targets named RingCylindrical - -# Build rule for target. -RingCylindrical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 RingCylindrical -.PHONY : RingCylindrical - -# fast build rule for target. -RingCylindrical/fast: - $(MAKE) -f objects/CMakeFiles/RingCylindrical.dir/build.make objects/CMakeFiles/RingCylindrical.dir/build -.PHONY : RingCylindrical/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LimitPolygonSeeder - -# Build rule for target. -isis3_unit_test_LimitPolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LimitPolygonSeeder -.PHONY : isis3_unit_test_LimitPolygonSeeder - -# fast build rule for target. -isis3_unit_test_LimitPolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LimitPolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_LimitPolygonSeeder.dir/build -.PHONY : isis3_unit_test_LimitPolygonSeeder/fast - -#============================================================================= -# Target rules for targets named clemnirnoise_app - -# Build rule for target. -clemnirnoise_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clemnirnoise_app -.PHONY : clemnirnoise_app - -# fast build rule for target. -clemnirnoise_app/fast: - $(MAKE) -f objects/CMakeFiles/clemnirnoise_app.dir/build.make objects/CMakeFiles/clemnirnoise_app.dir/build -.PHONY : clemnirnoise_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraDistortionMap - -# Build rule for target. -isis3_unit_test_CameraDistortionMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraDistortionMap -.PHONY : isis3_unit_test_CameraDistortionMap - -# fast build rule for target. -isis3_unit_test_CameraDistortionMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraDistortionMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraDistortionMap.dir/build -.PHONY : isis3_unit_test_CameraDistortionMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpectralDefinition1D - -# Build rule for target. -isis3_unit_test_SpectralDefinition1D: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinition1D -.PHONY : isis3_unit_test_SpectralDefinition1D - -# fast build rule for target. -isis3_unit_test_SpectralDefinition1D/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinition1D.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinition1D.dir/build -.PHONY : isis3_unit_test_SpectralDefinition1D/fast - -#============================================================================= -# Target rules for targets named lronacecho_app - -# Build rule for target. -lronacecho_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lronacecho_app -.PHONY : lronacecho_app - -# fast build rule for target. -lronacecho_app/fast: - $(MAKE) -f objects/CMakeFiles/lronacecho_app.dir/build.make objects/CMakeFiles/lronacecho_app.dir/build -.PHONY : lronacecho_app/fast - -#============================================================================= -# Target rules for targets named overlapstats_app - -# Build rule for target. -overlapstats_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 overlapstats_app -.PHONY : overlapstats_app - -# fast build rule for target. -overlapstats_app/fast: - $(MAKE) -f objects/CMakeFiles/overlapstats_app.dir/build.make objects/CMakeFiles/overlapstats_app.dir/build -.PHONY : overlapstats_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlGraph - -# Build rule for target. -isis3_unit_test_ControlGraph: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlGraph -.PHONY : isis3_unit_test_ControlGraph - -# fast build rule for target. -isis3_unit_test_ControlGraph/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlGraph.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlGraph.dir/build -.PHONY : isis3_unit_test_ControlGraph/fast - -#============================================================================= -# Target rules for targets named vdcomp_app - -# Build rule for target. -vdcomp_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vdcomp_app -.PHONY : vdcomp_app - -# fast build rule for target. -vdcomp_app/fast: - $(MAKE) -f objects/CMakeFiles/vdcomp_app.dir/build.make objects/CMakeFiles/vdcomp_app.dir/build -.PHONY : vdcomp_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessImport - -# Build rule for target. -isis3_unit_test_ProcessImport: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImport -.PHONY : isis3_unit_test_ProcessImport - -# fast build rule for target. -isis3_unit_test_ProcessImport/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImport.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImport.dir/build -.PHONY : isis3_unit_test_ProcessImport/fast - -#============================================================================= -# Target rules for targets named messspkgen_app - -# Build rule for target. -messspkgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 messspkgen_app -.PHONY : messspkgen_app - -# fast build rule for target. -messspkgen_app/fast: - $(MAKE) -f objects/CMakeFiles/messspkgen_app.dir/build.make objects/CMakeFiles/messspkgen_app.dir/build -.PHONY : messspkgen_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Endian - -# Build rule for target. -isis3_unit_test_Endian: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Endian -.PHONY : isis3_unit_test_Endian - -# fast build rule for target. -isis3_unit_test_Endian/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Endian.dir/build.make objects/CMakeFiles/isis3_unit_test_Endian.dir/build -.PHONY : isis3_unit_test_Endian/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Application - -# Build rule for target. -isis3_unit_test_Application: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Application -.PHONY : isis3_unit_test_Application - -# fast build rule for target. -isis3_unit_test_Application/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Application.dir/build.make objects/CMakeFiles/isis3_unit_test_Application.dir/build -.PHONY : isis3_unit_test_Application/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_QtExporter - -# Build rule for target. -isis3_unit_test_QtExporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_QtExporter -.PHONY : isis3_unit_test_QtExporter - -# fast build rule for target. -isis3_unit_test_QtExporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_QtExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_QtExporter.dir/build -.PHONY : isis3_unit_test_QtExporter/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Kernels - -# Build rule for target. -isis3_unit_test_Kernels: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Kernels -.PHONY : isis3_unit_test_Kernels - -# fast build rule for target. -isis3_unit_test_Kernels/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Kernels.dir/build.make objects/CMakeFiles/isis3_unit_test_Kernels.dir/build -.PHONY : isis3_unit_test_Kernels/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TiffImporter - -# Build rule for target. -isis3_unit_test_TiffImporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TiffImporter -.PHONY : isis3_unit_test_TiffImporter - -# fast build rule for target. -isis3_unit_test_TiffImporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TiffImporter.dir/build.make objects/CMakeFiles/isis3_unit_test_TiffImporter.dir/build -.PHONY : isis3_unit_test_TiffImporter/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CubeCalculator - -# Build rule for target. -isis3_unit_test_CubeCalculator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeCalculator -.PHONY : isis3_unit_test_CubeCalculator - -# fast build rule for target. -isis3_unit_test_CubeCalculator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeCalculator.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeCalculator.dir/build -.PHONY : isis3_unit_test_CubeCalculator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraDetectorMap - -# Build rule for target. -isis3_unit_test_CameraDetectorMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraDetectorMap -.PHONY : isis3_unit_test_CameraDetectorMap - -# fast build rule for target. -isis3_unit_test_CameraDetectorMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraDetectorMap.dir/build -.PHONY : isis3_unit_test_CameraDetectorMap/fast - -#============================================================================= -# Target rules for targets named flip_app - -# Build rule for target. -flip_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 flip_app -.PHONY : flip_app - -# fast build rule for target. -flip_app/fast: - $(MAKE) -f objects/CMakeFiles/flip_app.dir/build.make objects/CMakeFiles/flip_app.dir/build -.PHONY : flip_app/fast - -#============================================================================= -# Target rules for targets named LambertConformal - -# Build rule for target. -LambertConformal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LambertConformal -.PHONY : LambertConformal - -# fast build rule for target. -LambertConformal/fast: - $(MAKE) -f objects/CMakeFiles/LambertConformal.dir/build.make objects/CMakeFiles/LambertConformal.dir/build -.PHONY : LambertConformal/fast - -#============================================================================= -# Target rules for targets named lrowac2pds_app - -# Build rule for target. -lrowac2pds_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lrowac2pds_app -.PHONY : lrowac2pds_app - -# fast build rule for target. -lrowac2pds_app/fast: - $(MAKE) -f objects/CMakeFiles/lrowac2pds_app.dir/build.make objects/CMakeFiles/lrowac2pds_app.dir/build -.PHONY : lrowac2pds_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GisGeometry - -# Build rule for target. -isis3_unit_test_GisGeometry: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GisGeometry -.PHONY : isis3_unit_test_GisGeometry - -# fast build rule for target. -isis3_unit_test_GisGeometry/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GisGeometry.dir/build.make objects/CMakeFiles/isis3_unit_test_GisGeometry.dir/build -.PHONY : isis3_unit_test_GisGeometry/fast - -#============================================================================= -# Target rules for targets named amica2isis_app - -# Build rule for target. -amica2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 amica2isis_app -.PHONY : amica2isis_app - -# fast build rule for target. -amica2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/amica2isis_app.dir/build.make objects/CMakeFiles/amica2isis_app.dir/build -.PHONY : amica2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlSequence - -# Build rule for target. -isis3_unit_test_PvlSequence: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlSequence -.PHONY : isis3_unit_test_PvlSequence - -# fast build rule for target. -isis3_unit_test_PvlSequence/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlSequence.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlSequence.dir/build -.PHONY : isis3_unit_test_PvlSequence/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Quaternion - -# Build rule for target. -isis3_unit_test_Quaternion: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Quaternion -.PHONY : isis3_unit_test_Quaternion - -# fast build rule for target. -isis3_unit_test_Quaternion/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Quaternion.dir/build.make objects/CMakeFiles/isis3_unit_test_Quaternion.dir/build -.PHONY : isis3_unit_test_Quaternion/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_EllipsoidShape - -# Build rule for target. -isis3_unit_test_EllipsoidShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EllipsoidShape -.PHONY : isis3_unit_test_EllipsoidShape - -# fast build rule for target. -isis3_unit_test_EllipsoidShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EllipsoidShape.dir/build.make objects/CMakeFiles/isis3_unit_test_EllipsoidShape.dir/build -.PHONY : isis3_unit_test_EllipsoidShape/fast - -#============================================================================= -# Target rules for targets named GridPolygonSeeder - -# Build rule for target. -GridPolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 GridPolygonSeeder -.PHONY : GridPolygonSeeder - -# fast build rule for target. -GridPolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/GridPolygonSeeder.dir/build.make objects/CMakeFiles/GridPolygonSeeder.dir/build -.PHONY : GridPolygonSeeder/fast - -#============================================================================= -# Target rules for targets named maptemplate_app - -# Build rule for target. -maptemplate_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 maptemplate_app -.PHONY : maptemplate_app - -# fast build rule for target. -maptemplate_app/fast: - $(MAKE) -f objects/CMakeFiles/maptemplate_app.dir/build.make objects/CMakeFiles/maptemplate_app.dir/build -.PHONY : maptemplate_app/fast - -#============================================================================= -# Target rules for targets named decorstretch_app - -# Build rule for target. -decorstretch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 decorstretch_app -.PHONY : decorstretch_app - -# fast build rule for target. -decorstretch_app/fast: - $(MAKE) -f objects/CMakeFiles/decorstretch_app.dir/build.make objects/CMakeFiles/decorstretch_app.dir/build -.PHONY : decorstretch_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LineScanCamera - -# Build rule for target. -isis3_unit_test_LineScanCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCamera -.PHONY : isis3_unit_test_LineScanCamera - -# fast build rule for target. -isis3_unit_test_LineScanCamera/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCamera.dir/build -.PHONY : isis3_unit_test_LineScanCamera/fast - -#============================================================================= -# Target rules for targets named cassini_unit_test_CissLabels - -# Build rule for target. -cassini_unit_test_CissLabels: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_CissLabels -.PHONY : cassini_unit_test_CissLabels - -# fast build rule for target. -cassini_unit_test_CissLabels/fast: - $(MAKE) -f objects/CMakeFiles/cassini_unit_test_CissLabels.dir/build.make objects/CMakeFiles/cassini_unit_test_CissLabels.dir/build -.PHONY : cassini_unit_test_CissLabels/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_FilterCachingAlgorithm - -# Build rule for target. -isis3_unit_test_FilterCachingAlgorithm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FilterCachingAlgorithm -.PHONY : isis3_unit_test_FilterCachingAlgorithm - -# fast build rule for target. -isis3_unit_test_FilterCachingAlgorithm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FilterCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_FilterCachingAlgorithm.dir/build -.PHONY : isis3_unit_test_FilterCachingAlgorithm/fast - -#============================================================================= -# Target rules for targets named SimpleCylindrical - -# Build rule for target. -SimpleCylindrical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 SimpleCylindrical -.PHONY : SimpleCylindrical - -# fast build rule for target. -SimpleCylindrical/fast: - $(MAKE) -f objects/CMakeFiles/SimpleCylindrical.dir/build.make objects/CMakeFiles/SimpleCylindrical.dir/build -.PHONY : SimpleCylindrical/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AtmosModel - -# Build rule for target. -isis3_unit_test_AtmosModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AtmosModel -.PHONY : isis3_unit_test_AtmosModel - -# fast build rule for target. -isis3_unit_test_AtmosModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AtmosModel.dir/build.make objects/CMakeFiles/isis3_unit_test_AtmosModel.dir/build -.PHONY : isis3_unit_test_AtmosModel/fast - -#============================================================================= -# Target rules for targets named mvic2isis_app - -# Build rule for target. -mvic2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mvic2isis_app -.PHONY : mvic2isis_app - -# fast build rule for target. -mvic2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mvic2isis_app.dir/build.make objects/CMakeFiles/mvic2isis_app.dir/build -.PHONY : mvic2isis_app/fast - -#============================================================================= -# Target rules for targets named lronac2isis_app - -# Build rule for target. -lronac2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lronac2isis_app -.PHONY : lronac2isis_app - -# fast build rule for target. -lronac2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/lronac2isis_app.dir/build.make objects/CMakeFiles/lronac2isis_app.dir/build -.PHONY : lronac2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BasisFunction - -# Build rule for target. -isis3_unit_test_BasisFunction: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BasisFunction -.PHONY : isis3_unit_test_BasisFunction - -# fast build rule for target. -isis3_unit_test_BasisFunction/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BasisFunction.dir/build.make objects/CMakeFiles/isis3_unit_test_BasisFunction.dir/build -.PHONY : isis3_unit_test_BasisFunction/fast - -#============================================================================= -# Target rules for targets named AlbedoAtm - -# Build rule for target. -AlbedoAtm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 AlbedoAtm -.PHONY : AlbedoAtm - -# fast build rule for target. -AlbedoAtm/fast: - $(MAKE) -f objects/CMakeFiles/AlbedoAtm.dir/build.make objects/CMakeFiles/AlbedoAtm.dir/build -.PHONY : AlbedoAtm/fast - -#============================================================================= -# Target rules for targets named catoriglab_app - -# Build rule for target. -catoriglab_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 catoriglab_app -.PHONY : catoriglab_app - -# fast build rule for target. -catoriglab_app/fast: - $(MAKE) -f objects/CMakeFiles/catoriglab_app.dir/build.make objects/CMakeFiles/catoriglab_app.dir/build -.PHONY : catoriglab_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AlphaCube - -# Build rule for target. -isis3_unit_test_AlphaCube: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AlphaCube -.PHONY : isis3_unit_test_AlphaCube - -# fast build rule for target. -isis3_unit_test_AlphaCube/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AlphaCube.dir/build.make objects/CMakeFiles/isis3_unit_test_AlphaCube.dir/build -.PHONY : isis3_unit_test_AlphaCube/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_JP2Decoder - -# Build rule for target. -isis3_unit_test_JP2Decoder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_JP2Decoder -.PHONY : isis3_unit_test_JP2Decoder - -# fast build rule for target. -isis3_unit_test_JP2Decoder/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_JP2Decoder.dir/build.make objects/CMakeFiles/isis3_unit_test_JP2Decoder.dir/build -.PHONY : isis3_unit_test_JP2Decoder/fast - -#============================================================================= -# Target rules for targets named Topo - -# Build rule for target. -Topo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Topo -.PHONY : Topo - -# fast build rule for target. -Topo/fast: - $(MAKE) -f objects/CMakeFiles/Topo.dir/build.make objects/CMakeFiles/Topo.dir/build -.PHONY : Topo/fast - -#============================================================================= -# Target rules for targets named Equirectangular - -# Build rule for target. -Equirectangular: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Equirectangular -.PHONY : Equirectangular - -# fast build rule for target. -Equirectangular/fast: - $(MAKE) -f objects/CMakeFiles/Equirectangular.dir/build.make objects/CMakeFiles/Equirectangular.dir/build -.PHONY : Equirectangular/fast - -#============================================================================= -# Target rules for targets named Shade - -# Build rule for target. -Shade: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Shade -.PHONY : Shade - -# fast build rule for target. -Shade/fast: - $(MAKE) -f objects/CMakeFiles/Shade.dir/build.make objects/CMakeFiles/Shade.dir/build -.PHONY : Shade/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_InlineCalculator - -# Build rule for target. -isis3_unit_test_InlineCalculator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InlineCalculator -.PHONY : isis3_unit_test_InlineCalculator - -# fast build rule for target. -isis3_unit_test_InlineCalculator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InlineCalculator.dir/build.make objects/CMakeFiles/isis3_unit_test_InlineCalculator.dir/build -.PHONY : isis3_unit_test_InlineCalculator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Process - -# Build rule for target. -isis3_unit_test_Process: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Process -.PHONY : isis3_unit_test_Process - -# fast build rule for target. -isis3_unit_test_Process/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Process.dir/build.make objects/CMakeFiles/isis3_unit_test_Process.dir/build -.PHONY : isis3_unit_test_Process/fast - -#============================================================================= -# Target rules for targets named viknopepper_app - -# Build rule for target. -viknopepper_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 viknopepper_app -.PHONY : viknopepper_app - -# fast build rule for target. -viknopepper_app/fast: - $(MAKE) -f objects/CMakeFiles/viknopepper_app.dir/build.make objects/CMakeFiles/viknopepper_app.dir/build -.PHONY : viknopepper_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_UserInterface - -# Build rule for target. -isis3_unit_test_UserInterface: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UserInterface -.PHONY : isis3_unit_test_UserInterface - -# fast build rule for target. -isis3_unit_test_UserInterface/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UserInterface.dir/build.make objects/CMakeFiles/isis3_unit_test_UserInterface.dir/build -.PHONY : isis3_unit_test_UserInterface/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ID - -# Build rule for target. -isis3_unit_test_ID: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ID -.PHONY : isis3_unit_test_ID - -# fast build rule for target. -isis3_unit_test_ID/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ID.dir/build.make objects/CMakeFiles/isis3_unit_test_ID.dir/build -.PHONY : isis3_unit_test_ID/fast - -#============================================================================= -# Target rules for targets named GradientOperator - -# Build rule for target. -GradientOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 GradientOperator -.PHONY : GradientOperator - -# fast build rule for target. -GradientOperator/fast: - $(MAKE) -f objects/CMakeFiles/GradientOperator.dir/build.make objects/CMakeFiles/GradientOperator.dir/build -.PHONY : GradientOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PolygonSeeder - -# Build rule for target. -isis3_unit_test_PolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolygonSeeder -.PHONY : isis3_unit_test_PolygonSeeder - -# fast build rule for target. -isis3_unit_test_PolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_PolygonSeeder.dir/build -.PHONY : isis3_unit_test_PolygonSeeder/fast - -#============================================================================= -# Target rules for targets named pds2isis_app - -# Build rule for target. -pds2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pds2isis_app -.PHONY : pds2isis_app - -# fast build rule for target. -pds2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/pds2isis_app.dir/build.make objects/CMakeFiles/pds2isis_app.dir/build -.PHONY : pds2isis_app/fast - -#============================================================================= -# Target rules for targets named IdealCamera - -# Build rule for target. -IdealCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 IdealCamera -.PHONY : IdealCamera - -# fast build rule for target. -IdealCamera/fast: - $(MAKE) -f objects/CMakeFiles/IdealCamera.dir/build.make objects/CMakeFiles/IdealCamera.dir/build -.PHONY : IdealCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LambertConformal - -# Build rule for target. -isis3_unit_test_LambertConformal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LambertConformal -.PHONY : isis3_unit_test_LambertConformal - -# fast build rule for target. -isis3_unit_test_LambertConformal/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LambertConformal.dir/build.make objects/CMakeFiles/isis3_unit_test_LambertConformal.dir/build -.PHONY : isis3_unit_test_LambertConformal/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Shade - -# Build rule for target. -isis3_unit_test_Shade: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Shade -.PHONY : isis3_unit_test_Shade - -# fast build rule for target. -isis3_unit_test_Shade/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Shade.dir/build.make objects/CMakeFiles/isis3_unit_test_Shade.dir/build -.PHONY : isis3_unit_test_Shade/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_EmbreeTargetShape - -# Build rule for target. -isis3_unit_test_EmbreeTargetShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EmbreeTargetShape -.PHONY : isis3_unit_test_EmbreeTargetShape - -# fast build rule for target. -isis3_unit_test_EmbreeTargetShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EmbreeTargetShape.dir/build.make objects/CMakeFiles/isis3_unit_test_EmbreeTargetShape.dir/build -.PHONY : isis3_unit_test_EmbreeTargetShape/fast - -#============================================================================= -# Target rules for targets named voy2isis_app - -# Build rule for target. -voy2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 voy2isis_app -.PHONY : voy2isis_app - -# fast build rule for target. -voy2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/voy2isis_app.dir/build.make objects/CMakeFiles/voy2isis_app.dir/build -.PHONY : voy2isis_app/fast - -#============================================================================= -# Target rules for targets named Mixed - -# Build rule for target. -Mixed: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Mixed -.PHONY : Mixed - -# fast build rule for target. -Mixed/fast: - $(MAKE) -f objects/CMakeFiles/Mixed.dir/build.make objects/CMakeFiles/Mixed.dir/build -.PHONY : Mixed/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraPointInfo - -# Build rule for target. -isis3_unit_test_CameraPointInfo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraPointInfo -.PHONY : isis3_unit_test_CameraPointInfo - -# fast build rule for target. -isis3_unit_test_CameraPointInfo/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraPointInfo.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraPointInfo.dir/build -.PHONY : isis3_unit_test_CameraPointInfo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_StandardDeviationOperator - -# Build rule for target. -isis3_unit_test_StandardDeviationOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StandardDeviationOperator -.PHONY : isis3_unit_test_StandardDeviationOperator - -# fast build rule for target. -isis3_unit_test_StandardDeviationOperator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StandardDeviationOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_StandardDeviationOperator.dir/build -.PHONY : isis3_unit_test_StandardDeviationOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LommelSeeliger - -# Build rule for target. -isis3_unit_test_LommelSeeliger: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LommelSeeliger -.PHONY : isis3_unit_test_LommelSeeliger - -# fast build rule for target. -isis3_unit_test_LommelSeeliger/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LommelSeeliger.dir/build.make objects/CMakeFiles/isis3_unit_test_LommelSeeliger.dir/build -.PHONY : isis3_unit_test_LommelSeeliger/fast - -#============================================================================= -# Target rules for targets named ShadeAtm - -# Build rule for target. -ShadeAtm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ShadeAtm -.PHONY : ShadeAtm - -# fast build rule for target. -ShadeAtm/fast: - $(MAKE) -f objects/CMakeFiles/ShadeAtm.dir/build.make objects/CMakeFiles/ShadeAtm.dir/build -.PHONY : ShadeAtm/fast - -#============================================================================= -# Target rules for targets named thmbasemap1_app - -# Build rule for target. -thmbasemap1_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 thmbasemap1_app -.PHONY : thmbasemap1_app - -# fast build rule for target. -thmbasemap1_app/fast: - $(MAKE) -f objects/CMakeFiles/thmbasemap1_app.dir/build.make objects/CMakeFiles/thmbasemap1_app.dir/build -.PHONY : thmbasemap1_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NaifStatus - -# Build rule for target. -isis3_unit_test_NaifStatus: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifStatus -.PHONY : isis3_unit_test_NaifStatus - -# fast build rule for target. -isis3_unit_test_NaifStatus/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifStatus.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifStatus.dir/build -.PHONY : isis3_unit_test_NaifStatus/fast - -#============================================================================= -# Target rules for targets named handmos_app - -# Build rule for target. -handmos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 handmos_app -.PHONY : handmos_app - -# fast build rule for target. -handmos_app/fast: - $(MAKE) -f objects/CMakeFiles/handmos_app.dir/build.make objects/CMakeFiles/handmos_app.dir/build -.PHONY : handmos_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BundleUtilities - -# Build rule for target. -isis3_unit_test_BundleUtilities: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleUtilities -.PHONY : isis3_unit_test_BundleUtilities - -# fast build rule for target. -isis3_unit_test_BundleUtilities/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleUtilities.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleUtilities.dir/build -.PHONY : isis3_unit_test_BundleUtilities/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_EmbreeTargetManager - -# Build rule for target. -isis3_unit_test_EmbreeTargetManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EmbreeTargetManager -.PHONY : isis3_unit_test_EmbreeTargetManager - -# fast build rule for target. -isis3_unit_test_EmbreeTargetManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EmbreeTargetManager.dir/build.make objects/CMakeFiles/isis3_unit_test_EmbreeTargetManager.dir/build -.PHONY : isis3_unit_test_EmbreeTargetManager/fast - -#============================================================================= -# Target rules for targets named pvldiff_app - -# Build rule for target. -pvldiff_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pvldiff_app -.PHONY : pvldiff_app - -# fast build rule for target. -pvldiff_app/fast: - $(MAKE) -f objects/CMakeFiles/pvldiff_app.dir/build.make objects/CMakeFiles/pvldiff_app.dir/build -.PHONY : pvldiff_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CorrelationMatrix - -# Build rule for target. -isis3_unit_test_CorrelationMatrix: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CorrelationMatrix -.PHONY : isis3_unit_test_CorrelationMatrix - -# fast build rule for target. -isis3_unit_test_CorrelationMatrix/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CorrelationMatrix.dir/build.make objects/CMakeFiles/isis3_unit_test_CorrelationMatrix.dir/build -.PHONY : isis3_unit_test_CorrelationMatrix/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ImagePolygon - -# Build rule for target. -isis3_unit_test_ImagePolygon: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ImagePolygon -.PHONY : isis3_unit_test_ImagePolygon - -# fast build rule for target. -isis3_unit_test_ImagePolygon/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ImagePolygon.dir/build.make objects/CMakeFiles/isis3_unit_test_ImagePolygon.dir/build -.PHONY : isis3_unit_test_ImagePolygon/fast - -#============================================================================= -# Target rules for targets named LunarAzimuthalEqualArea - -# Build rule for target. -LunarAzimuthalEqualArea: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LunarAzimuthalEqualArea -.PHONY : LunarAzimuthalEqualArea - -# fast build rule for target. -LunarAzimuthalEqualArea/fast: - $(MAKE) -f objects/CMakeFiles/LunarAzimuthalEqualArea.dir/build.make objects/CMakeFiles/LunarAzimuthalEqualArea.dir/build -.PHONY : LunarAzimuthalEqualArea/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LinearAlgebra - -# Build rule for target. -isis3_unit_test_LinearAlgebra: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LinearAlgebra -.PHONY : isis3_unit_test_LinearAlgebra - -# fast build rule for target. -isis3_unit_test_LinearAlgebra/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LinearAlgebra.dir/build.make objects/CMakeFiles/isis3_unit_test_LinearAlgebra.dir/build -.PHONY : isis3_unit_test_LinearAlgebra/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraFactory - -# Build rule for target. -isis3_unit_test_CameraFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraFactory -.PHONY : isis3_unit_test_CameraFactory - -# fast build rule for target. -isis3_unit_test_CameraFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraFactory.dir/build -.PHONY : isis3_unit_test_CameraFactory/fast - -#============================================================================= -# Target rules for targets named LunarLambert - -# Build rule for target. -LunarLambert: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LunarLambert -.PHONY : LunarLambert - -# fast build rule for target. -LunarLambert/fast: - $(MAKE) -f objects/CMakeFiles/LunarLambert.dir/build.make objects/CMakeFiles/LunarLambert.dir/build -.PHONY : LunarLambert/fast - -#============================================================================= -# Target rules for targets named hrsc2isis_app - -# Build rule for target. -hrsc2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hrsc2isis_app -.PHONY : hrsc2isis_app - -# fast build rule for target. -hrsc2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/hrsc2isis_app.dir/build.make objects/CMakeFiles/hrsc2isis_app.dir/build -.PHONY : hrsc2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BoxcarManager - -# Build rule for target. -isis3_unit_test_BoxcarManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BoxcarManager -.PHONY : isis3_unit_test_BoxcarManager - -# fast build rule for target. -isis3_unit_test_BoxcarManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BoxcarManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BoxcarManager.dir/build -.PHONY : isis3_unit_test_BoxcarManager/fast - -#============================================================================= -# Target rules for targets named TopoAtm - -# Build rule for target. -TopoAtm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 TopoAtm -.PHONY : TopoAtm - -# fast build rule for target. -TopoAtm/fast: - $(MAKE) -f objects/CMakeFiles/TopoAtm.dir/build.make objects/CMakeFiles/TopoAtm.dir/build -.PHONY : TopoAtm/fast - -#============================================================================= -# Target rules for targets named hsv2rgb_app - -# Build rule for target. -hsv2rgb_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hsv2rgb_app -.PHONY : hsv2rgb_app - -# fast build rule for target. -hsv2rgb_app/fast: - $(MAKE) -f objects/CMakeFiles/hsv2rgb_app.dir/build.make objects/CMakeFiles/hsv2rgb_app.dir/build -.PHONY : hsv2rgb_app/fast - -#============================================================================= -# Target rules for targets named Isotropic1 - -# Build rule for target. -Isotropic1: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Isotropic1 -.PHONY : Isotropic1 - -# fast build rule for target. -Isotropic1/fast: - $(MAKE) -f objects/CMakeFiles/Isotropic1.dir/build.make objects/CMakeFiles/Isotropic1.dir/build -.PHONY : Isotropic1/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PolygonTools - -# Build rule for target. -isis3_unit_test_PolygonTools: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolygonTools -.PHONY : isis3_unit_test_PolygonTools - -# fast build rule for target. -isis3_unit_test_PolygonTools/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolygonTools.dir/build.make objects/CMakeFiles/isis3_unit_test_PolygonTools.dir/build -.PHONY : isis3_unit_test_PolygonTools/fast - -#============================================================================= -# Target rules for targets named mgs_unit_test_MocNarrowAngleSumming - -# Build rule for target. -mgs_unit_test_MocNarrowAngleSumming: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocNarrowAngleSumming -.PHONY : mgs_unit_test_MocNarrowAngleSumming - -# fast build rule for target. -mgs_unit_test_MocNarrowAngleSumming/fast: - $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocNarrowAngleSumming.dir/build.make objects/CMakeFiles/mgs_unit_test_MocNarrowAngleSumming.dir/build -.PHONY : mgs_unit_test_MocNarrowAngleSumming/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraSkyMap - -# Build rule for target. -isis3_unit_test_CameraSkyMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraSkyMap -.PHONY : isis3_unit_test_CameraSkyMap - -# fast build rule for target. -isis3_unit_test_CameraSkyMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraSkyMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraSkyMap.dir/build -.PHONY : isis3_unit_test_CameraSkyMap/fast - -#============================================================================= -# Target rules for targets named moc2isis_app - -# Build rule for target. -moc2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 moc2isis_app -.PHONY : moc2isis_app - -# fast build rule for target. -moc2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/moc2isis_app.dir/build.make objects/CMakeFiles/moc2isis_app.dir/build -.PHONY : moc2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CubeDataThread - -# Build rule for target. -isis3_unit_test_CubeDataThread: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeDataThread -.PHONY : isis3_unit_test_CubeDataThread - -# fast build rule for target. -isis3_unit_test_CubeDataThread/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeDataThread.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeDataThread.dir/build -.PHONY : isis3_unit_test_CubeDataThread/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LineManager - -# Build rule for target. -isis3_unit_test_LineManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineManager -.PHONY : isis3_unit_test_LineManager - -# fast build rule for target. -isis3_unit_test_LineManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineManager.dir/build.make objects/CMakeFiles/isis3_unit_test_LineManager.dir/build -.PHONY : isis3_unit_test_LineManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraFocalPlaneMap - -# Build rule for target. -isis3_unit_test_CameraFocalPlaneMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraFocalPlaneMap -.PHONY : isis3_unit_test_CameraFocalPlaneMap - -# fast build rule for target. -isis3_unit_test_CameraFocalPlaneMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraFocalPlaneMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraFocalPlaneMap.dir/build -.PHONY : isis3_unit_test_CameraFocalPlaneMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_StatCumProbDistDynCalc - -# Build rule for target. -isis3_unit_test_StatCumProbDistDynCalc: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StatCumProbDistDynCalc -.PHONY : isis3_unit_test_StatCumProbDistDynCalc - -# fast build rule for target. -isis3_unit_test_StatCumProbDistDynCalc/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StatCumProbDistDynCalc.dir/build.make objects/CMakeFiles/isis3_unit_test_StatCumProbDistDynCalc.dir/build -.PHONY : isis3_unit_test_StatCumProbDistDynCalc/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadarGroundRangeMap - -# Build rule for target. -isis3_unit_test_RadarGroundRangeMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarGroundRangeMap -.PHONY : isis3_unit_test_RadarGroundRangeMap - -# fast build rule for target. -isis3_unit_test_RadarGroundRangeMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarGroundRangeMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarGroundRangeMap.dir/build -.PHONY : isis3_unit_test_RadarGroundRangeMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraGroundMap - -# Build rule for target. -isis3_unit_test_CameraGroundMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraGroundMap -.PHONY : isis3_unit_test_CameraGroundMap - -# fast build rule for target. -isis3_unit_test_CameraGroundMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraGroundMap.dir/build -.PHONY : isis3_unit_test_CameraGroundMap/fast - -#============================================================================= -# Target rules for targets named voycal_app - -# Build rule for target. -voycal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 voycal_app -.PHONY : voycal_app - -# fast build rule for target. -voycal_app/fast: - $(MAKE) -f objects/CMakeFiles/voycal_app.dir/build.make objects/CMakeFiles/voycal_app.dir/build -.PHONY : voycal_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Affine - -# Build rule for target. -isis3_unit_test_Affine: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Affine -.PHONY : isis3_unit_test_Affine - -# fast build rule for target. -isis3_unit_test_Affine/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Affine.dir/build.make objects/CMakeFiles/isis3_unit_test_Affine.dir/build -.PHONY : isis3_unit_test_Affine/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlCubeGraphNode - -# Build rule for target. -isis3_unit_test_ControlCubeGraphNode: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlCubeGraphNode -.PHONY : isis3_unit_test_ControlCubeGraphNode - -# fast build rule for target. -isis3_unit_test_ControlCubeGraphNode/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlCubeGraphNode.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlCubeGraphNode.dir/build -.PHONY : isis3_unit_test_ControlCubeGraphNode/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Albedo - -# Build rule for target. -isis3_unit_test_Albedo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Albedo -.PHONY : isis3_unit_test_Albedo - -# fast build rule for target. -isis3_unit_test_Albedo/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Albedo.dir/build.make objects/CMakeFiles/isis3_unit_test_Albedo.dir/build -.PHONY : isis3_unit_test_Albedo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CameraStatistics - -# Build rule for target. -isis3_unit_test_CameraStatistics: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CameraStatistics -.PHONY : isis3_unit_test_CameraStatistics - -# fast build rule for target. -isis3_unit_test_CameraStatistics/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CameraStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_CameraStatistics.dir/build -.PHONY : isis3_unit_test_CameraStatistics/fast - -#============================================================================= -# Target rules for targets named pds2hideal_app - -# Build rule for target. -pds2hideal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 pds2hideal_app -.PHONY : pds2hideal_app - -# fast build rule for target. -pds2hideal_app/fast: - $(MAKE) -f objects/CMakeFiles/pds2hideal_app.dir/build.make objects/CMakeFiles/pds2hideal_app.dir/build -.PHONY : pds2hideal_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NaifDskApi - -# Build rule for target. -isis3_unit_test_NaifDskApi: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifDskApi -.PHONY : isis3_unit_test_NaifDskApi - -# fast build rule for target. -isis3_unit_test_NaifDskApi/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifDskApi.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifDskApi.dir/build -.PHONY : isis3_unit_test_NaifDskApi/fast - -#============================================================================= -# Target rules for targets named isis2pds_app - -# Build rule for target. -isis2pds_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis2pds_app -.PHONY : isis2pds_app - -# fast build rule for target. -isis2pds_app/fast: - $(MAKE) -f objects/CMakeFiles/isis2pds_app.dir/build.make objects/CMakeFiles/isis2pds_app.dir/build -.PHONY : isis2pds_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Selection - -# Build rule for target. -isis3_unit_test_Selection: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Selection -.PHONY : isis3_unit_test_Selection - -# fast build rule for target. -isis3_unit_test_Selection/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Selection.dir/build.make objects/CMakeFiles/isis3_unit_test_Selection.dir/build -.PHONY : isis3_unit_test_Selection/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Angle - -# Build rule for target. -isis3_unit_test_Angle: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Angle -.PHONY : isis3_unit_test_Angle - -# fast build rule for target. -isis3_unit_test_Angle/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Angle.dir/build.make objects/CMakeFiles/isis3_unit_test_Angle.dir/build -.PHONY : isis3_unit_test_Angle/fast - -#============================================================================= -# Target rules for targets named Mariner10Camera - -# Build rule for target. -Mariner10Camera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Mariner10Camera -.PHONY : Mariner10Camera - -# fast build rule for target. -Mariner10Camera/fast: - $(MAKE) -f objects/CMakeFiles/Mariner10Camera.dir/build.make objects/CMakeFiles/Mariner10Camera.dir/build -.PHONY : Mariner10Camera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GaussianDistribution - -# Build rule for target. -isis3_unit_test_GaussianDistribution: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GaussianDistribution -.PHONY : isis3_unit_test_GaussianDistribution - -# fast build rule for target. -isis3_unit_test_GaussianDistribution/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GaussianDistribution.dir/build.make objects/CMakeFiles/isis3_unit_test_GaussianDistribution.dir/build -.PHONY : isis3_unit_test_GaussianDistribution/fast - -#============================================================================= -# Target rules for targets named MinimumDifference - -# Build rule for target. -MinimumDifference: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MinimumDifference -.PHONY : MinimumDifference - -# fast build rule for target. -MinimumDifference/fast: - $(MAKE) -f objects/CMakeFiles/MinimumDifference.dir/build.make objects/CMakeFiles/MinimumDifference.dir/build -.PHONY : MinimumDifference/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Anisotropic2 - -# Build rule for target. -isis3_unit_test_Anisotropic2: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Anisotropic2 -.PHONY : isis3_unit_test_Anisotropic2 - -# fast build rule for target. -isis3_unit_test_Anisotropic2/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Anisotropic2.dir/build.make objects/CMakeFiles/isis3_unit_test_Anisotropic2.dir/build -.PHONY : isis3_unit_test_Anisotropic2/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Area3D - -# Build rule for target. -isis3_unit_test_Area3D: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Area3D -.PHONY : isis3_unit_test_Area3D - -# fast build rule for target. -isis3_unit_test_Area3D/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Area3D.dir/build.make objects/CMakeFiles/isis3_unit_test_Area3D.dir/build -.PHONY : isis3_unit_test_Area3D/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GradientOperator - -# Build rule for target. -isis3_unit_test_GradientOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GradientOperator -.PHONY : isis3_unit_test_GradientOperator - -# fast build rule for target. -isis3_unit_test_GradientOperator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GradientOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_GradientOperator.dir/build -.PHONY : isis3_unit_test_GradientOperator/fast - -#============================================================================= -# Target rules for targets named cnetcheck_app - -# Build rule for target. -cnetcheck_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetcheck_app -.PHONY : cnetcheck_app - -# fast build rule for target. -cnetcheck_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetcheck_app.dir/build.make objects/CMakeFiles/cnetcheck_app.dir/build -.PHONY : cnetcheck_app/fast - -#============================================================================= -# Target rules for targets named percent_app - -# Build rule for target. -percent_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 percent_app -.PHONY : percent_app - -# fast build rule for target. -percent_app/fast: - $(MAKE) -f objects/CMakeFiles/percent_app.dir/build.make objects/CMakeFiles/percent_app.dir/build -.PHONY : percent_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AlbedoAtm - -# Build rule for target. -isis3_unit_test_AlbedoAtm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AlbedoAtm -.PHONY : isis3_unit_test_AlbedoAtm - -# fast build rule for target. -isis3_unit_test_AlbedoAtm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AlbedoAtm.dir/build.make objects/CMakeFiles/isis3_unit_test_AlbedoAtm.dir/build -.PHONY : isis3_unit_test_AlbedoAtm/fast - -#============================================================================= -# Target rules for targets named isis3 - -# Build rule for target. -isis3: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3 -.PHONY : isis3 - -# fast build rule for target. -isis3/fast: - $(MAKE) -f objects/CMakeFiles/isis3.dir/build.make objects/CMakeFiles/isis3.dir/build -.PHONY : isis3/fast - -#============================================================================= -# Target rules for targets named NewHorizonsLeisaCamera - -# Build rule for target. -NewHorizonsLeisaCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsLeisaCamera -.PHONY : NewHorizonsLeisaCamera - -# fast build rule for target. -NewHorizonsLeisaCamera/fast: - $(MAKE) -f objects/CMakeFiles/NewHorizonsLeisaCamera.dir/build.make objects/CMakeFiles/NewHorizonsLeisaCamera.dir/build -.PHONY : NewHorizonsLeisaCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PushFrameCameraGroundMap - -# Build rule for target. -isis3_unit_test_PushFrameCameraGroundMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCameraGroundMap -.PHONY : isis3_unit_test_PushFrameCameraGroundMap - -# fast build rule for target. -isis3_unit_test_PushFrameCameraGroundMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCameraGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCameraGroundMap.dir/build -.PHONY : isis3_unit_test_PushFrameCameraGroundMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BufferManager - -# Build rule for target. -isis3_unit_test_BufferManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BufferManager -.PHONY : isis3_unit_test_BufferManager - -# fast build rule for target. -isis3_unit_test_BufferManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BufferManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BufferManager.dir/build -.PHONY : isis3_unit_test_BufferManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CubeAttribute - -# Build rule for target. -isis3_unit_test_CubeAttribute: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeAttribute -.PHONY : isis3_unit_test_CubeAttribute - -# fast build rule for target. -isis3_unit_test_CubeAttribute/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeAttribute.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeAttribute.dir/build -.PHONY : isis3_unit_test_CubeAttribute/fast - -#============================================================================= -# Target rules for targets named gaussstretch_app - -# Build rule for target. -gaussstretch_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 gaussstretch_app -.PHONY : gaussstretch_app - -# fast build rule for target. -gaussstretch_app/fast: - $(MAKE) -f objects/CMakeFiles/gaussstretch_app.dir/build.make objects/CMakeFiles/gaussstretch_app.dir/build -.PHONY : gaussstretch_app/fast - -#============================================================================= -# Target rules for targets named MinnaertEmpirical - -# Build rule for target. -MinnaertEmpirical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 MinnaertEmpirical -.PHONY : MinnaertEmpirical - -# fast build rule for target. -MinnaertEmpirical/fast: - $(MAKE) -f objects/CMakeFiles/MinnaertEmpirical.dir/build.make objects/CMakeFiles/MinnaertEmpirical.dir/build -.PHONY : MinnaertEmpirical/fast - -#============================================================================= -# Target rules for targets named hicubeit_app - -# Build rule for target. -hicubeit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hicubeit_app -.PHONY : hicubeit_app - -# fast build rule for target. -hicubeit_app/fast: - $(MAKE) -f objects/CMakeFiles/hicubeit_app.dir/build.make objects/CMakeFiles/hicubeit_app.dir/build -.PHONY : hicubeit_app/fast - -#============================================================================= -# Target rules for targets named lopdsgen_app - -# Build rule for target. -lopdsgen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 lopdsgen_app -.PHONY : lopdsgen_app - -# fast build rule for target. -lopdsgen_app/fast: - $(MAKE) -f objects/CMakeFiles/lopdsgen_app.dir/build.make objects/CMakeFiles/lopdsgen_app.dir/build -.PHONY : lopdsgen_app/fast - -#============================================================================= -# Target rules for targets named cnetedit_app - -# Build rule for target. -cnetedit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetedit_app -.PHONY : cnetedit_app - -# fast build rule for target. -cnetedit_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetedit_app.dir/build.make objects/CMakeFiles/cnetedit_app.dir/build -.PHONY : cnetedit_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Kernel - -# Build rule for target. -isis3_unit_test_Kernel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Kernel -.PHONY : isis3_unit_test_Kernel - -# fast build rule for target. -isis3_unit_test_Kernel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Kernel.dir/build.make objects/CMakeFiles/isis3_unit_test_Kernel.dir/build -.PHONY : isis3_unit_test_Kernel/fast - -#============================================================================= -# Target rules for targets named fillgap_app - -# Build rule for target. -fillgap_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 fillgap_app -.PHONY : fillgap_app - -# fast build rule for target. -fillgap_app/fast: - $(MAKE) -f objects/CMakeFiles/fillgap_app.dir/build.make objects/CMakeFiles/fillgap_app.dir/build -.PHONY : fillgap_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Basis1VariableFunction - -# Build rule for target. -isis3_unit_test_Basis1VariableFunction: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Basis1VariableFunction -.PHONY : isis3_unit_test_Basis1VariableFunction - -# fast build rule for target. -isis3_unit_test_Basis1VariableFunction/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Basis1VariableFunction.dir/build.make objects/CMakeFiles/isis3_unit_test_Basis1VariableFunction.dir/build -.PHONY : isis3_unit_test_Basis1VariableFunction/fast - -#============================================================================= -# Target rules for targets named cassini_unit_test_IssNACamera - -# Build rule for target. -cassini_unit_test_IssNACamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cassini_unit_test_IssNACamera -.PHONY : cassini_unit_test_IssNACamera - -# fast build rule for target. -cassini_unit_test_IssNACamera/fast: - $(MAKE) -f objects/CMakeFiles/cassini_unit_test_IssNACamera.dir/build.make objects/CMakeFiles/cassini_unit_test_IssNACamera.dir/build -.PHONY : cassini_unit_test_IssNACamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Blobber - -# Build rule for target. -isis3_unit_test_Blobber: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Blobber -.PHONY : isis3_unit_test_Blobber - -# fast build rule for target. -isis3_unit_test_Blobber/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Blobber.dir/build.make objects/CMakeFiles/isis3_unit_test_Blobber.dir/build -.PHONY : isis3_unit_test_Blobber/fast - -#============================================================================= -# Target rules for targets named VimsCamera - -# Build rule for target. -VimsCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 VimsCamera -.PHONY : VimsCamera - -# fast build rule for target. -VimsCamera/fast: - $(MAKE) -f objects/CMakeFiles/VimsCamera.dir/build.make objects/CMakeFiles/VimsCamera.dir/build -.PHONY : VimsCamera/fast - -#============================================================================= -# Target rules for targets named cnetref_app - -# Build rule for target. -cnetref_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetref_app -.PHONY : cnetref_app - -# fast build rule for target. -cnetref_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetref_app.dir/build.make objects/CMakeFiles/cnetref_app.dir/build -.PHONY : cnetref_app/fast - -#============================================================================= -# Target rules for targets named specpix_app - -# Build rule for target. -specpix_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 specpix_app -.PHONY : specpix_app - -# fast build rule for target. -specpix_app/fast: - $(MAKE) -f objects/CMakeFiles/specpix_app.dir/build.make objects/CMakeFiles/specpix_app.dir/build -.PHONY : specpix_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BoxcarCachingAlgorithm - -# Build rule for target. -isis3_unit_test_BoxcarCachingAlgorithm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BoxcarCachingAlgorithm -.PHONY : isis3_unit_test_BoxcarCachingAlgorithm - -# fast build rule for target. -isis3_unit_test_BoxcarCachingAlgorithm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BoxcarCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_BoxcarCachingAlgorithm.dir/build -.PHONY : isis3_unit_test_BoxcarCachingAlgorithm/fast - -#============================================================================= -# Target rules for targets named ctxevenodd_app - -# Build rule for target. -ctxevenodd_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ctxevenodd_app -.PHONY : ctxevenodd_app - -# fast build rule for target. -ctxevenodd_app/fast: - $(MAKE) -f objects/CMakeFiles/ctxevenodd_app.dir/build.make objects/CMakeFiles/ctxevenodd_app.dir/build -.PHONY : ctxevenodd_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Calculator - -# Build rule for target. -isis3_unit_test_Calculator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Calculator -.PHONY : isis3_unit_test_Calculator - -# fast build rule for target. -isis3_unit_test_Calculator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Calculator.dir/build.make objects/CMakeFiles/isis3_unit_test_Calculator.dir/build -.PHONY : isis3_unit_test_Calculator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_EquatorialCylindricalShape - -# Build rule for target. -isis3_unit_test_EquatorialCylindricalShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EquatorialCylindricalShape -.PHONY : isis3_unit_test_EquatorialCylindricalShape - -# fast build rule for target. -isis3_unit_test_EquatorialCylindricalShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EquatorialCylindricalShape.dir/build.make objects/CMakeFiles/isis3_unit_test_EquatorialCylindricalShape.dir/build -.PHONY : isis3_unit_test_EquatorialCylindricalShape/fast - -#============================================================================= -# Target rules for targets named spiceinit_app - -# Build rule for target. -spiceinit_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 spiceinit_app -.PHONY : spiceinit_app - -# fast build rule for target. -spiceinit_app/fast: - $(MAKE) -f objects/CMakeFiles/spiceinit_app.dir/build.make objects/CMakeFiles/spiceinit_app.dir/build -.PHONY : spiceinit_app/fast - -#============================================================================= -# Target rules for targets named photrim_app - -# Build rule for target. -photrim_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 photrim_app -.PHONY : photrim_app - -# fast build rule for target. -photrim_app/fast: - $(MAKE) -f objects/CMakeFiles/photrim_app.dir/build.make objects/CMakeFiles/photrim_app.dir/build -.PHONY : photrim_app/fast - -#============================================================================= -# Target rules for targets named Robinson - -# Build rule for target. -Robinson: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Robinson -.PHONY : Robinson - -# fast build rule for target. -Robinson/fast: - $(MAKE) -f objects/CMakeFiles/Robinson.dir/build.make objects/CMakeFiles/Robinson.dir/build -.PHONY : Robinson/fast - -#============================================================================= -# Target rules for targets named deriv_app - -# Build rule for target. -deriv_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 deriv_app -.PHONY : deriv_app - -# fast build rule for target. -deriv_app/fast: - $(MAKE) -f objects/CMakeFiles/deriv_app.dir/build.make objects/CMakeFiles/deriv_app.dir/build -.PHONY : deriv_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Brick - -# Build rule for target. -isis3_unit_test_Brick: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Brick -.PHONY : isis3_unit_test_Brick - -# fast build rule for target. -isis3_unit_test_Brick/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Brick.dir/build.make objects/CMakeFiles/isis3_unit_test_Brick.dir/build -.PHONY : isis3_unit_test_Brick/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Buffer - -# Build rule for target. -isis3_unit_test_Buffer: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Buffer -.PHONY : isis3_unit_test_Buffer - -# fast build rule for target. -isis3_unit_test_Buffer/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Buffer.dir/build.make objects/CMakeFiles/isis3_unit_test_Buffer.dir/build -.PHONY : isis3_unit_test_Buffer/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlNetVersioner - -# Build rule for target. -isis3_unit_test_ControlNetVersioner: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetVersioner -.PHONY : isis3_unit_test_ControlNetVersioner - -# fast build rule for target. -isis3_unit_test_ControlNetVersioner/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetVersioner.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetVersioner.dir/build -.PHONY : isis3_unit_test_ControlNetVersioner/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Anisotropic1 - -# Build rule for target. -isis3_unit_test_Anisotropic1: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Anisotropic1 -.PHONY : isis3_unit_test_Anisotropic1 - -# fast build rule for target. -isis3_unit_test_Anisotropic1/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Anisotropic1.dir/build.make objects/CMakeFiles/isis3_unit_test_Anisotropic1.dir/build -.PHONY : isis3_unit_test_Anisotropic1/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LineScanCameraDetectorMap - -# Build rule for target. -isis3_unit_test_LineScanCameraDetectorMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCameraDetectorMap -.PHONY : isis3_unit_test_LineScanCameraDetectorMap - -# fast build rule for target. -isis3_unit_test_LineScanCameraDetectorMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCameraDetectorMap.dir/build -.PHONY : isis3_unit_test_LineScanCameraDetectorMap/fast - -#============================================================================= -# Target rules for targets named shadowtau_app - -# Build rule for target. -shadowtau_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 shadowtau_app -.PHONY : shadowtau_app - -# fast build rule for target. -shadowtau_app/fast: - $(MAKE) -f objects/CMakeFiles/shadowtau_app.dir/build.make objects/CMakeFiles/shadowtau_app.dir/build -.PHONY : shadowtau_app/fast - -#============================================================================= -# Target rules for targets named Anisotropic1 - -# Build rule for target. -Anisotropic1: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Anisotropic1 -.PHONY : Anisotropic1 - -# fast build rule for target. -Anisotropic1/fast: - $(MAKE) -f objects/CMakeFiles/Anisotropic1.dir/build.make objects/CMakeFiles/Anisotropic1.dir/build -.PHONY : Anisotropic1/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AtmosModelFactory - -# Build rule for target. -isis3_unit_test_AtmosModelFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AtmosModelFactory -.PHONY : isis3_unit_test_AtmosModelFactory - -# fast build rule for target. -isis3_unit_test_AtmosModelFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AtmosModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_AtmosModelFactory.dir/build -.PHONY : isis3_unit_test_AtmosModelFactory/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Blob - -# Build rule for target. -isis3_unit_test_Blob: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Blob -.PHONY : isis3_unit_test_Blob - -# fast build rule for target. -isis3_unit_test_Blob/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Blob.dir/build.make objects/CMakeFiles/isis3_unit_test_Blob.dir/build -.PHONY : isis3_unit_test_Blob/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpicePosition - -# Build rule for target. -isis3_unit_test_SpicePosition: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpicePosition -.PHONY : isis3_unit_test_SpicePosition - -# fast build rule for target. -isis3_unit_test_SpicePosition/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpicePosition.dir/build.make objects/CMakeFiles/isis3_unit_test_SpicePosition.dir/build -.PHONY : isis3_unit_test_SpicePosition/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BundleSolutionInfo - -# Build rule for target. -isis3_unit_test_BundleSolutionInfo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleSolutionInfo -.PHONY : isis3_unit_test_BundleSolutionInfo - -# fast build rule for target. -isis3_unit_test_BundleSolutionInfo/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleSolutionInfo.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleSolutionInfo.dir/build -.PHONY : isis3_unit_test_BundleSolutionInfo/fast - -#============================================================================= -# Target rules for targets named gauss_app - -# Build rule for target. -gauss_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 gauss_app -.PHONY : gauss_app - -# fast build rule for target. -gauss_app/fast: - $(MAKE) -f objects/CMakeFiles/gauss_app.dir/build.make objects/CMakeFiles/gauss_app.dir/build -.PHONY : gauss_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BulletDskShape - -# Build rule for target. -isis3_unit_test_BulletDskShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletDskShape -.PHONY : isis3_unit_test_BulletDskShape - -# fast build rule for target. -isis3_unit_test_BulletDskShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletDskShape.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletDskShape.dir/build -.PHONY : isis3_unit_test_BulletDskShape/fast - -#============================================================================= -# Target rules for targets named cubediff_app - -# Build rule for target. -cubediff_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cubediff_app -.PHONY : cubediff_app - -# fast build rule for target. -cubediff_app/fast: - $(MAKE) -f objects/CMakeFiles/cubediff_app.dir/build.make objects/CMakeFiles/cubediff_app.dir/build -.PHONY : cubediff_app/fast - -#============================================================================= -# Target rules for targets named Minnaert - -# Build rule for target. -Minnaert: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Minnaert -.PHONY : Minnaert - -# fast build rule for target. -Minnaert/fast: - $(MAKE) -f objects/CMakeFiles/Minnaert.dir/build.make objects/CMakeFiles/Minnaert.dir/build -.PHONY : Minnaert/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BulletShapeModel - -# Build rule for target. -isis3_unit_test_BulletShapeModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletShapeModel -.PHONY : isis3_unit_test_BulletShapeModel - -# fast build rule for target. -isis3_unit_test_BulletShapeModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletShapeModel.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletShapeModel.dir/build -.PHONY : isis3_unit_test_BulletShapeModel/fast - -#============================================================================= -# Target rules for targets named std2isis_app - -# Build rule for target. -std2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 std2isis_app -.PHONY : std2isis_app - -# fast build rule for target. -std2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/std2isis_app.dir/build.make objects/CMakeFiles/std2isis_app.dir/build -.PHONY : std2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TileManager - -# Build rule for target. -isis3_unit_test_TileManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TileManager -.PHONY : isis3_unit_test_TileManager - -# fast build rule for target. -isis3_unit_test_TileManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TileManager.dir/build.make objects/CMakeFiles/isis3_unit_test_TileManager.dir/build -.PHONY : isis3_unit_test_TileManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BulletTargetShape - -# Build rule for target. -isis3_unit_test_BulletTargetShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletTargetShape -.PHONY : isis3_unit_test_BulletTargetShape - -# fast build rule for target. -isis3_unit_test_BulletTargetShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletTargetShape.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletTargetShape.dir/build -.PHONY : isis3_unit_test_BulletTargetShape/fast - -#============================================================================= -# Target rules for targets named caminfo_app - -# Build rule for target. -caminfo_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 caminfo_app -.PHONY : caminfo_app - -# fast build rule for target. -caminfo_app/fast: - $(MAKE) -f objects/CMakeFiles/caminfo_app.dir/build.make objects/CMakeFiles/caminfo_app.dir/build -.PHONY : caminfo_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Camera - -# Build rule for target. -isis3_unit_test_Camera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Camera -.PHONY : isis3_unit_test_Camera - -# fast build rule for target. -isis3_unit_test_Camera/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Camera.dir/build.make objects/CMakeFiles/isis3_unit_test_Camera.dir/build -.PHONY : isis3_unit_test_Camera/fast - -#============================================================================= -# Target rules for targets named Mollweide - -# Build rule for target. -Mollweide: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Mollweide -.PHONY : Mollweide - -# fast build rule for target. -Mollweide/fast: - $(MAKE) -f objects/CMakeFiles/Mollweide.dir/build.make objects/CMakeFiles/Mollweide.dir/build -.PHONY : Mollweide/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Centroid - -# Build rule for target. -isis3_unit_test_Centroid: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Centroid -.PHONY : isis3_unit_test_Centroid - -# fast build rule for target. -isis3_unit_test_Centroid/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Centroid.dir/build.make objects/CMakeFiles/isis3_unit_test_Centroid.dir/build -.PHONY : isis3_unit_test_Centroid/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PixelFOV - -# Build rule for target. -isis3_unit_test_PixelFOV: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PixelFOV -.PHONY : isis3_unit_test_PixelFOV - -# fast build rule for target. -isis3_unit_test_PixelFOV/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PixelFOV.dir/build.make objects/CMakeFiles/isis3_unit_test_PixelFOV.dir/build -.PHONY : isis3_unit_test_PixelFOV/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Mollweide - -# Build rule for target. -isis3_unit_test_Mollweide: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Mollweide -.PHONY : isis3_unit_test_Mollweide - -# fast build rule for target. -isis3_unit_test_Mollweide/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Mollweide.dir/build.make objects/CMakeFiles/isis3_unit_test_Mollweide.dir/build -.PHONY : isis3_unit_test_Mollweide/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MoonAlbedo - -# Build rule for target. -isis3_unit_test_MoonAlbedo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MoonAlbedo -.PHONY : isis3_unit_test_MoonAlbedo - -# fast build rule for target. -isis3_unit_test_MoonAlbedo/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MoonAlbedo.dir/build.make objects/CMakeFiles/isis3_unit_test_MoonAlbedo.dir/build -.PHONY : isis3_unit_test_MoonAlbedo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_FourierTransform - -# Build rule for target. -isis3_unit_test_FourierTransform: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_FourierTransform -.PHONY : isis3_unit_test_FourierTransform - -# fast build rule for target. -isis3_unit_test_FourierTransform/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_FourierTransform.dir/build.make objects/CMakeFiles/isis3_unit_test_FourierTransform.dir/build -.PHONY : isis3_unit_test_FourierTransform/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NaifDskShape - -# Build rule for target. -isis3_unit_test_NaifDskShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifDskShape -.PHONY : isis3_unit_test_NaifDskShape - -# fast build rule for target. -isis3_unit_test_NaifDskShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifDskShape.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifDskShape.dir/build -.PHONY : isis3_unit_test_NaifDskShape/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpectralDefinition2D - -# Build rule for target. -isis3_unit_test_SpectralDefinition2D: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinition2D -.PHONY : isis3_unit_test_SpectralDefinition2D - -# fast build rule for target. -isis3_unit_test_SpectralDefinition2D/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinition2D.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinition2D.dir/build -.PHONY : isis3_unit_test_SpectralDefinition2D/fast - -#============================================================================= -# Target rules for targets named dawnvir2isis_app - -# Build rule for target. -dawnvir2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 dawnvir2isis_app -.PHONY : dawnvir2isis_app - -# fast build rule for target. -dawnvir2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/dawnvir2isis_app.dir/build.make objects/CMakeFiles/dawnvir2isis_app.dir/build -.PHONY : dawnvir2isis_app/fast - -#============================================================================= -# Target rules for targets named Chandrayaan1M3Camera - -# Build rule for target. -Chandrayaan1M3Camera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Chandrayaan1M3Camera -.PHONY : Chandrayaan1M3Camera - -# fast build rule for target. -Chandrayaan1M3Camera/fast: - $(MAKE) -f objects/CMakeFiles/Chandrayaan1M3Camera.dir/build.make objects/CMakeFiles/Chandrayaan1M3Camera.dir/build -.PHONY : Chandrayaan1M3Camera/fast - -#============================================================================= -# Target rules for targets named ratio_app - -# Build rule for target. -ratio_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ratio_app -.PHONY : ratio_app - -# fast build rule for target. -ratio_app/fast: - $(MAKE) -f objects/CMakeFiles/ratio_app.dir/build.make objects/CMakeFiles/ratio_app.dir/build -.PHONY : ratio_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NoNormalization - -# Build rule for target. -isis3_unit_test_NoNormalization: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NoNormalization -.PHONY : isis3_unit_test_NoNormalization - -# fast build rule for target. -isis3_unit_test_NoNormalization/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NoNormalization.dir/build.make objects/CMakeFiles/isis3_unit_test_NoNormalization.dir/build -.PHONY : isis3_unit_test_NoNormalization/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NoOperator - -# Build rule for target. -isis3_unit_test_NoOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NoOperator -.PHONY : isis3_unit_test_NoOperator - -# fast build rule for target. -isis3_unit_test_NoOperator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NoOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_NoOperator.dir/build -.PHONY : isis3_unit_test_NoOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TProjection - -# Build rule for target. -isis3_unit_test_TProjection: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TProjection -.PHONY : isis3_unit_test_TProjection - -# fast build rule for target. -isis3_unit_test_TProjection/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TProjection.dir/build.make objects/CMakeFiles/isis3_unit_test_TProjection.dir/build -.PHONY : isis3_unit_test_TProjection/fast - -#============================================================================= -# Target rules for targets named apollo_unit_test_ApolloPanoramicCamera - -# Build rule for target. -apollo_unit_test_ApolloPanoramicCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollo_unit_test_ApolloPanoramicCamera -.PHONY : apollo_unit_test_ApolloPanoramicCamera - -# fast build rule for target. -apollo_unit_test_ApolloPanoramicCamera/fast: - $(MAKE) -f objects/CMakeFiles/apollo_unit_test_ApolloPanoramicCamera.dir/build.make objects/CMakeFiles/apollo_unit_test_ApolloPanoramicCamera.dir/build -.PHONY : apollo_unit_test_ApolloPanoramicCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NormModel - -# Build rule for target. -isis3_unit_test_NormModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NormModel -.PHONY : isis3_unit_test_NormModel - -# fast build rule for target. -isis3_unit_test_NormModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NormModel.dir/build.make objects/CMakeFiles/isis3_unit_test_NormModel.dir/build -.PHONY : isis3_unit_test_NormModel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NormModelFactory - -# Build rule for target. -isis3_unit_test_NormModelFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NormModelFactory -.PHONY : isis3_unit_test_NormModelFactory - -# fast build rule for target. -isis3_unit_test_NormModelFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NormModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_NormModelFactory.dir/build -.PHONY : isis3_unit_test_NormModelFactory/fast - -#============================================================================= -# Target rules for targets named stats_app - -# Build rule for target. -stats_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 stats_app -.PHONY : stats_app - -# fast build rule for target. -stats_app/fast: - $(MAKE) -f objects/CMakeFiles/stats_app.dir/build.make objects/CMakeFiles/stats_app.dir/build -.PHONY : stats_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LeastSquares - -# Build rule for target. -isis3_unit_test_LeastSquares: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LeastSquares -.PHONY : isis3_unit_test_LeastSquares - -# fast build rule for target. -isis3_unit_test_LeastSquares/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LeastSquares.dir/build.make objects/CMakeFiles/isis3_unit_test_LeastSquares.dir/build -.PHONY : isis3_unit_test_LeastSquares/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Sensor - -# Build rule for target. -isis3_unit_test_Sensor: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Sensor -.PHONY : isis3_unit_test_Sensor - -# fast build rule for target. -isis3_unit_test_Sensor/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Sensor.dir/build.make objects/CMakeFiles/isis3_unit_test_Sensor.dir/build -.PHONY : isis3_unit_test_Sensor/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NumericalApproximation - -# Build rule for target. -isis3_unit_test_NumericalApproximation: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NumericalApproximation -.PHONY : isis3_unit_test_NumericalApproximation - -# fast build rule for target. -isis3_unit_test_NumericalApproximation/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NumericalApproximation.dir/build.make objects/CMakeFiles/isis3_unit_test_NumericalApproximation.dir/build -.PHONY : isis3_unit_test_NumericalApproximation/fast - -#============================================================================= -# Target rules for targets named hicubenorm_app - -# Build rule for target. -hicubenorm_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hicubenorm_app -.PHONY : hicubenorm_app - -# fast build rule for target. -hicubenorm_app/fast: - $(MAKE) -f objects/CMakeFiles/hicubenorm_app.dir/build.make objects/CMakeFiles/hicubenorm_app.dir/build -.PHONY : hicubenorm_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Lambert - -# Build rule for target. -isis3_unit_test_Lambert: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Lambert -.PHONY : isis3_unit_test_Lambert - -# fast build rule for target. -isis3_unit_test_Lambert/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Lambert.dir/build.make objects/CMakeFiles/isis3_unit_test_Lambert.dir/build -.PHONY : isis3_unit_test_Lambert/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PixelType - -# Build rule for target. -isis3_unit_test_PixelType: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PixelType -.PHONY : isis3_unit_test_PixelType - -# fast build rule for target. -isis3_unit_test_PixelType/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PixelType.dir/build.make objects/CMakeFiles/isis3_unit_test_PixelType.dir/build -.PHONY : isis3_unit_test_PixelType/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TableRecord - -# Build rule for target. -isis3_unit_test_TableRecord: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TableRecord -.PHONY : isis3_unit_test_TableRecord - -# fast build rule for target. -isis3_unit_test_TableRecord/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TableRecord.dir/build.make objects/CMakeFiles/isis3_unit_test_TableRecord.dir/build -.PHONY : isis3_unit_test_TableRecord/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SubArea - -# Build rule for target. -isis3_unit_test_SubArea: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SubArea -.PHONY : isis3_unit_test_SubArea - -# fast build rule for target. -isis3_unit_test_SubArea/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SubArea.dir/build.make objects/CMakeFiles/isis3_unit_test_SubArea.dir/build -.PHONY : isis3_unit_test_SubArea/fast - -#============================================================================= -# Target rules for targets named socetlinescankeywords_app - -# Build rule for target. -socetlinescankeywords_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 socetlinescankeywords_app -.PHONY : socetlinescankeywords_app - -# fast build rule for target. -socetlinescankeywords_app/fast: - $(MAKE) -f objects/CMakeFiles/socetlinescankeywords_app.dir/build.make objects/CMakeFiles/socetlinescankeywords_app.dir/build -.PHONY : socetlinescankeywords_app/fast - -#============================================================================= -# Target rules for targets named blobdump_app - -# Build rule for target. -blobdump_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 blobdump_app -.PHONY : blobdump_app - -# fast build rule for target. -blobdump_app/fast: - $(MAKE) -f objects/CMakeFiles/blobdump_app.dir/build.make objects/CMakeFiles/blobdump_app.dir/build -.PHONY : blobdump_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ObservationNumber - -# Build rule for target. -isis3_unit_test_ObservationNumber: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ObservationNumber -.PHONY : isis3_unit_test_ObservationNumber - -# fast build rule for target. -isis3_unit_test_ObservationNumber/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ObservationNumber.dir/build.make objects/CMakeFiles/isis3_unit_test_ObservationNumber.dir/build -.PHONY : isis3_unit_test_ObservationNumber/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ObservationNumberList - -# Build rule for target. -isis3_unit_test_ObservationNumberList: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ObservationNumberList -.PHONY : isis3_unit_test_ObservationNumberList - -# fast build rule for target. -isis3_unit_test_ObservationNumberList/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ObservationNumberList.dir/build.make objects/CMakeFiles/isis3_unit_test_ObservationNumberList.dir/build -.PHONY : isis3_unit_test_ObservationNumberList/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Orthographic - -# Build rule for target. -isis3_unit_test_Orthographic: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Orthographic -.PHONY : isis3_unit_test_Orthographic - -# fast build rule for target. -isis3_unit_test_Orthographic/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Orthographic.dir/build.make objects/CMakeFiles/isis3_unit_test_Orthographic.dir/build -.PHONY : isis3_unit_test_Orthographic/fast - -#============================================================================= -# Target rules for targets named NewHorizonsLorriCamera - -# Build rule for target. -NewHorizonsLorriCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NewHorizonsLorriCamera -.PHONY : NewHorizonsLorriCamera - -# fast build rule for target. -NewHorizonsLorriCamera/fast: - $(MAKE) -f objects/CMakeFiles/NewHorizonsLorriCamera.dir/build.make objects/CMakeFiles/NewHorizonsLorriCamera.dir/build -.PHONY : NewHorizonsLorriCamera/fast - -#============================================================================= -# Target rules for targets named mdiscal_app - -# Build rule for target. -mdiscal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mdiscal_app -.PHONY : mdiscal_app - -# fast build rule for target. -mdiscal_app/fast: - $(MAKE) -f objects/CMakeFiles/mdiscal_app.dir/build.make objects/CMakeFiles/mdiscal_app.dir/build -.PHONY : mdiscal_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_OverlapStatistics - -# Build rule for target. -isis3_unit_test_OverlapStatistics: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OverlapStatistics -.PHONY : isis3_unit_test_OverlapStatistics - -# fast build rule for target. -isis3_unit_test_OverlapStatistics/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OverlapStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_OverlapStatistics.dir/build -.PHONY : isis3_unit_test_OverlapStatistics/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Parabola - -# Build rule for target. -isis3_unit_test_Parabola: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Parabola -.PHONY : isis3_unit_test_Parabola - -# fast build rule for target. -isis3_unit_test_Parabola/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Parabola.dir/build.make objects/CMakeFiles/isis3_unit_test_Parabola.dir/build -.PHONY : isis3_unit_test_Parabola/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PhotoModel - -# Build rule for target. -isis3_unit_test_PhotoModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PhotoModel -.PHONY : isis3_unit_test_PhotoModel - -# fast build rule for target. -isis3_unit_test_PhotoModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PhotoModel.dir/build.make objects/CMakeFiles/isis3_unit_test_PhotoModel.dir/build -.PHONY : isis3_unit_test_PhotoModel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadialDistortionMap - -# Build rule for target. -isis3_unit_test_RadialDistortionMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadialDistortionMap -.PHONY : isis3_unit_test_RadialDistortionMap - -# fast build rule for target. -isis3_unit_test_RadialDistortionMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadialDistortionMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadialDistortionMap.dir/build -.PHONY : isis3_unit_test_RadialDistortionMap/fast - -#============================================================================= -# Target rules for targets named viknosalt_app - -# Build rule for target. -viknosalt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 viknosalt_app -.PHONY : viknosalt_app - -# fast build rule for target. -viknosalt_app/fast: - $(MAKE) -f objects/CMakeFiles/viknosalt_app.dir/build.make objects/CMakeFiles/viknosalt_app.dir/build -.PHONY : viknosalt_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PhotoModelFactory - -# Build rule for target. -isis3_unit_test_PhotoModelFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PhotoModelFactory -.PHONY : isis3_unit_test_PhotoModelFactory - -# fast build rule for target. -isis3_unit_test_PhotoModelFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PhotoModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_PhotoModelFactory.dir/build -.PHONY : isis3_unit_test_PhotoModelFactory/fast - -#============================================================================= -# Target rules for targets named cnetextract_app - -# Build rule for target. -cnetextract_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cnetextract_app -.PHONY : cnetextract_app - -# fast build rule for target. -cnetextract_app/fast: - $(MAKE) -f objects/CMakeFiles/cnetextract_app.dir/build.make objects/CMakeFiles/cnetextract_app.dir/build -.PHONY : cnetextract_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessByQuickFilter - -# Build rule for target. -isis3_unit_test_ProcessByQuickFilter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByQuickFilter -.PHONY : isis3_unit_test_ProcessByQuickFilter - -# fast build rule for target. -isis3_unit_test_ProcessByQuickFilter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByQuickFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByQuickFilter.dir/build -.PHONY : isis3_unit_test_ProcessByQuickFilter/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SqlRecord - -# Build rule for target. -isis3_unit_test_SqlRecord: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SqlRecord -.PHONY : isis3_unit_test_SqlRecord - -# fast build rule for target. -isis3_unit_test_SqlRecord/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SqlRecord.dir/build.make objects/CMakeFiles/isis3_unit_test_SqlRecord.dir/build -.PHONY : isis3_unit_test_SqlRecord/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Photometry - -# Build rule for target. -isis3_unit_test_Photometry: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Photometry -.PHONY : isis3_unit_test_Photometry - -# fast build rule for target. -isis3_unit_test_Photometry/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Photometry.dir/build.make objects/CMakeFiles/isis3_unit_test_Photometry.dir/build -.PHONY : isis3_unit_test_Photometry/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Pixel - -# Build rule for target. -isis3_unit_test_Pixel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Pixel -.PHONY : isis3_unit_test_Pixel - -# fast build rule for target. -isis3_unit_test_Pixel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Pixel.dir/build.make objects/CMakeFiles/isis3_unit_test_Pixel.dir/build -.PHONY : isis3_unit_test_Pixel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PlaneShape - -# Build rule for target. -isis3_unit_test_PlaneShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PlaneShape -.PHONY : isis3_unit_test_PlaneShape - -# fast build rule for target. -isis3_unit_test_PlaneShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PlaneShape.dir/build.make objects/CMakeFiles/isis3_unit_test_PlaneShape.dir/build -.PHONY : isis3_unit_test_PlaneShape/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Plugin - -# Build rule for target. -isis3_unit_test_Plugin: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Plugin -.PHONY : isis3_unit_test_Plugin - -# fast build rule for target. -isis3_unit_test_Plugin/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Plugin.dir/build.make objects/CMakeFiles/isis3_unit_test_Plugin.dir/build -.PHONY : isis3_unit_test_Plugin/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PointPerspective - -# Build rule for target. -isis3_unit_test_PointPerspective: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PointPerspective -.PHONY : isis3_unit_test_PointPerspective - -# fast build rule for target. -isis3_unit_test_PointPerspective/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PointPerspective.dir/build.make objects/CMakeFiles/isis3_unit_test_PointPerspective.dir/build -.PHONY : isis3_unit_test_PointPerspective/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlNetStatistics - -# Build rule for target. -isis3_unit_test_ControlNetStatistics: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetStatistics -.PHONY : isis3_unit_test_ControlNetStatistics - -# fast build rule for target. -isis3_unit_test_ControlNetStatistics/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetStatistics.dir/build -.PHONY : isis3_unit_test_ControlNetStatistics/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ShapeModel - -# Build rule for target. -isis3_unit_test_ShapeModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ShapeModel -.PHONY : isis3_unit_test_ShapeModel - -# fast build rule for target. -isis3_unit_test_ShapeModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ShapeModel.dir/build.make objects/CMakeFiles/isis3_unit_test_ShapeModel.dir/build -.PHONY : isis3_unit_test_ShapeModel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_CubeCachingAlgorithm - -# Build rule for target. -isis3_unit_test_CubeCachingAlgorithm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_CubeCachingAlgorithm -.PHONY : isis3_unit_test_CubeCachingAlgorithm - -# fast build rule for target. -isis3_unit_test_CubeCachingAlgorithm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_CubeCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_CubeCachingAlgorithm.dir/build -.PHONY : isis3_unit_test_CubeCachingAlgorithm/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessRubberSheet - -# Build rule for target. -isis3_unit_test_ProcessRubberSheet: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessRubberSheet -.PHONY : isis3_unit_test_ProcessRubberSheet - -# fast build rule for target. -isis3_unit_test_ProcessRubberSheet/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessRubberSheet.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessRubberSheet.dir/build -.PHONY : isis3_unit_test_ProcessRubberSheet/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_EndianSwapper - -# Build rule for target. -isis3_unit_test_EndianSwapper: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_EndianSwapper -.PHONY : isis3_unit_test_EndianSwapper - -# fast build rule for target. -isis3_unit_test_EndianSwapper/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_EndianSwapper.dir/build.make objects/CMakeFiles/isis3_unit_test_EndianSwapper.dir/build -.PHONY : isis3_unit_test_EndianSwapper/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PolynomialBivariate - -# Build rule for target. -isis3_unit_test_PolynomialBivariate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolynomialBivariate -.PHONY : isis3_unit_test_PolynomialBivariate - -# fast build rule for target. -isis3_unit_test_PolynomialBivariate/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolynomialBivariate.dir/build.make objects/CMakeFiles/isis3_unit_test_PolynomialBivariate.dir/build -.PHONY : isis3_unit_test_PolynomialBivariate/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Robinson - -# Build rule for target. -isis3_unit_test_Robinson: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Robinson -.PHONY : isis3_unit_test_Robinson - -# fast build rule for target. -isis3_unit_test_Robinson/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Robinson.dir/build.make objects/CMakeFiles/isis3_unit_test_Robinson.dir/build -.PHONY : isis3_unit_test_Robinson/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PolynomialUnivariate - -# Build rule for target. -isis3_unit_test_PolynomialUnivariate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolynomialUnivariate -.PHONY : isis3_unit_test_PolynomialUnivariate - -# fast build rule for target. -isis3_unit_test_PolynomialUnivariate/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolynomialUnivariate.dir/build.make objects/CMakeFiles/isis3_unit_test_PolynomialUnivariate.dir/build -.PHONY : isis3_unit_test_PolynomialUnivariate/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Target - -# Build rule for target. -isis3_unit_test_Target: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Target -.PHONY : isis3_unit_test_Target - -# fast build rule for target. -isis3_unit_test_Target/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Target.dir/build.make objects/CMakeFiles/isis3_unit_test_Target.dir/build -.PHONY : isis3_unit_test_Target/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BundleSettings - -# Build rule for target. -isis3_unit_test_BundleSettings: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleSettings -.PHONY : isis3_unit_test_BundleSettings - -# fast build rule for target. -isis3_unit_test_BundleSettings/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleSettings.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleSettings.dir/build -.PHONY : isis3_unit_test_BundleSettings/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RingCylindrical - -# Build rule for target. -isis3_unit_test_RingCylindrical: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RingCylindrical -.PHONY : isis3_unit_test_RingCylindrical - -# fast build rule for target. -isis3_unit_test_RingCylindrical/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RingCylindrical.dir/build.make objects/CMakeFiles/isis3_unit_test_RingCylindrical.dir/build -.PHONY : isis3_unit_test_RingCylindrical/fast - -#============================================================================= -# Target rules for targets named Anisotropic2 - -# Build rule for target. -Anisotropic2: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Anisotropic2 -.PHONY : Anisotropic2 - -# fast build rule for target. -Anisotropic2/fast: - $(MAKE) -f objects/CMakeFiles/Anisotropic2.dir/build.make objects/CMakeFiles/Anisotropic2.dir/build -.PHONY : Anisotropic2/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Portal - -# Build rule for target. -isis3_unit_test_Portal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Portal -.PHONY : isis3_unit_test_Portal - -# fast build rule for target. -isis3_unit_test_Portal/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Portal.dir/build.make objects/CMakeFiles/isis3_unit_test_Portal.dir/build -.PHONY : isis3_unit_test_Portal/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Preference - -# Build rule for target. -isis3_unit_test_Preference: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Preference -.PHONY : isis3_unit_test_Preference - -# fast build rule for target. -isis3_unit_test_Preference/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Preference.dir/build.make objects/CMakeFiles/isis3_unit_test_Preference.dir/build -.PHONY : isis3_unit_test_Preference/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessByBoxcar - -# Build rule for target. -isis3_unit_test_ProcessByBoxcar: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByBoxcar -.PHONY : isis3_unit_test_ProcessByBoxcar - -# fast build rule for target. -isis3_unit_test_ProcessByBoxcar/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByBoxcar.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByBoxcar.dir/build -.PHONY : isis3_unit_test_ProcessByBoxcar/fast - -#============================================================================= -# Target rules for targets named histeq_app - -# Build rule for target. -histeq_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 histeq_app -.PHONY : histeq_app - -# fast build rule for target. -histeq_app/fast: - $(MAKE) -f objects/CMakeFiles/histeq_app.dir/build.make objects/CMakeFiles/histeq_app.dir/build -.PHONY : histeq_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessByBrick - -# Build rule for target. -isis3_unit_test_ProcessByBrick: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByBrick -.PHONY : isis3_unit_test_ProcessByBrick - -# fast build rule for target. -isis3_unit_test_ProcessByBrick/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByBrick.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByBrick.dir/build -.PHONY : isis3_unit_test_ProcessByBrick/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessBySample - -# Build rule for target. -isis3_unit_test_ProcessBySample: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessBySample -.PHONY : isis3_unit_test_ProcessBySample - -# fast build rule for target. -isis3_unit_test_ProcessBySample/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessBySample.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessBySample.dir/build -.PHONY : isis3_unit_test_ProcessBySample/fast - -#============================================================================= -# Target rules for targets named isis2gml_app - -# Build rule for target. -isis2gml_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis2gml_app -.PHONY : isis2gml_app - -# fast build rule for target. -isis2gml_app/fast: - $(MAKE) -f objects/CMakeFiles/isis2gml_app.dir/build.make objects/CMakeFiles/isis2gml_app.dir/build -.PHONY : isis2gml_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessBySpectra - -# Build rule for target. -isis3_unit_test_ProcessBySpectra: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessBySpectra -.PHONY : isis3_unit_test_ProcessBySpectra - -# fast build rule for target. -isis3_unit_test_ProcessBySpectra/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessBySpectra.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessBySpectra.dir/build -.PHONY : isis3_unit_test_ProcessBySpectra/fast - -#============================================================================= -# Target rules for targets named blend_app - -# Build rule for target. -blend_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 blend_app -.PHONY : blend_app - -# fast build rule for target. -blend_app/fast: - $(MAKE) -f objects/CMakeFiles/blend_app.dir/build.make objects/CMakeFiles/blend_app.dir/build -.PHONY : blend_app/fast - -#============================================================================= -# Target rules for targets named findrx_app - -# Build rule for target. -findrx_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 findrx_app -.PHONY : findrx_app - -# fast build rule for target. -findrx_app/fast: - $(MAKE) -f objects/CMakeFiles/findrx_app.dir/build.make objects/CMakeFiles/findrx_app.dir/build -.PHONY : findrx_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessExport - -# Build rule for target. -isis3_unit_test_ProcessExport: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessExport -.PHONY : isis3_unit_test_ProcessExport - -# fast build rule for target. -isis3_unit_test_ProcessExport/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessExport.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessExport.dir/build -.PHONY : isis3_unit_test_ProcessExport/fast - -#============================================================================= -# Target rules for targets named cam2map_app - -# Build rule for target. -cam2map_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cam2map_app -.PHONY : cam2map_app - -# fast build rule for target. -cam2map_app/fast: - $(MAKE) -f objects/CMakeFiles/cam2map_app.dir/build.make objects/CMakeFiles/cam2map_app.dir/build -.PHONY : cam2map_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Hapke - -# Build rule for target. -isis3_unit_test_Hapke: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Hapke -.PHONY : isis3_unit_test_Hapke - -# fast build rule for target. -isis3_unit_test_Hapke/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Hapke.dir/build.make objects/CMakeFiles/isis3_unit_test_Hapke.dir/build -.PHONY : isis3_unit_test_Hapke/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessExportPds4 - -# Build rule for target. -isis3_unit_test_ProcessExportPds4: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessExportPds4 -.PHONY : isis3_unit_test_ProcessExportPds4 - -# fast build rule for target. -isis3_unit_test_ProcessExportPds4/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessExportPds4.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessExportPds4.dir/build -.PHONY : isis3_unit_test_ProcessExportPds4/fast - -#============================================================================= -# Target rules for targets named kuwahara_app - -# Build rule for target. -kuwahara_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kuwahara_app -.PHONY : kuwahara_app - -# fast build rule for target. -kuwahara_app/fast: - $(MAKE) -f objects/CMakeFiles/kuwahara_app.dir/build.make objects/CMakeFiles/kuwahara_app.dir/build -.PHONY : kuwahara_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessGroundPolygons - -# Build rule for target. -isis3_unit_test_ProcessGroundPolygons: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessGroundPolygons -.PHONY : isis3_unit_test_ProcessGroundPolygons - -# fast build rule for target. -isis3_unit_test_ProcessGroundPolygons/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessGroundPolygons.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessGroundPolygons.dir/build -.PHONY : isis3_unit_test_ProcessGroundPolygons/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessImportFits - -# Build rule for target. -isis3_unit_test_ProcessImportFits: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImportFits -.PHONY : isis3_unit_test_ProcessImportFits - -# fast build rule for target. -isis3_unit_test_ProcessImportFits/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImportFits.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImportFits.dir/build -.PHONY : isis3_unit_test_ProcessImportFits/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_OriginalLabel - -# Build rule for target. -isis3_unit_test_OriginalLabel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OriginalLabel -.PHONY : isis3_unit_test_OriginalLabel - -# fast build rule for target. -isis3_unit_test_OriginalLabel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OriginalLabel.dir/build.make objects/CMakeFiles/isis3_unit_test_OriginalLabel.dir/build -.PHONY : isis3_unit_test_OriginalLabel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PolarStereographic - -# Build rule for target. -isis3_unit_test_PolarStereographic: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PolarStereographic -.PHONY : isis3_unit_test_PolarStereographic - -# fast build rule for target. -isis3_unit_test_PolarStereographic/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PolarStereographic.dir/build.make objects/CMakeFiles/isis3_unit_test_PolarStereographic.dir/build -.PHONY : isis3_unit_test_PolarStereographic/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessImportPds - -# Build rule for target. -isis3_unit_test_ProcessImportPds: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImportPds -.PHONY : isis3_unit_test_ProcessImportPds - -# fast build rule for target. -isis3_unit_test_ProcessImportPds/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImportPds.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImportPds.dir/build -.PHONY : isis3_unit_test_ProcessImportPds/fast - -#============================================================================= -# Target rules for targets named specdivfilter_app - -# Build rule for target. -specdivfilter_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 specdivfilter_app -.PHONY : specdivfilter_app - -# fast build rule for target. -specdivfilter_app/fast: - $(MAKE) -f objects/CMakeFiles/specdivfilter_app.dir/build.make objects/CMakeFiles/specdivfilter_app.dir/build -.PHONY : specdivfilter_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_WorldMapper - -# Build rule for target. -isis3_unit_test_WorldMapper: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_WorldMapper -.PHONY : isis3_unit_test_WorldMapper - -# fast build rule for target. -isis3_unit_test_WorldMapper/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_WorldMapper.dir/build.make objects/CMakeFiles/isis3_unit_test_WorldMapper.dir/build -.PHONY : isis3_unit_test_WorldMapper/fast - -#============================================================================= -# Target rules for targets named clemhirescal_app - -# Build rule for target. -clemhirescal_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 clemhirescal_app -.PHONY : clemhirescal_app - -# fast build rule for target. -clemhirescal_app/fast: - $(MAKE) -f objects/CMakeFiles/clemhirescal_app.dir/build.make objects/CMakeFiles/clemhirescal_app.dir/build -.PHONY : clemhirescal_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessImportVicar - -# Build rule for target. -isis3_unit_test_ProcessImportVicar: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessImportVicar -.PHONY : isis3_unit_test_ProcessImportVicar - -# fast build rule for target. -isis3_unit_test_ProcessImportVicar/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessImportVicar.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessImportVicar.dir/build -.PHONY : isis3_unit_test_ProcessImportVicar/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_DbAccess - -# Build rule for target. -isis3_unit_test_DbAccess: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DbAccess -.PHONY : isis3_unit_test_DbAccess - -# fast build rule for target. -isis3_unit_test_DbAccess/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DbAccess.dir/build.make objects/CMakeFiles/isis3_unit_test_DbAccess.dir/build -.PHONY : isis3_unit_test_DbAccess/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessMapMosaic - -# Build rule for target. -isis3_unit_test_ProcessMapMosaic: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessMapMosaic -.PHONY : isis3_unit_test_ProcessMapMosaic - -# fast build rule for target. -isis3_unit_test_ProcessMapMosaic/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessMapMosaic.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessMapMosaic.dir/build -.PHONY : isis3_unit_test_ProcessMapMosaic/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessMosaic - -# Build rule for target. -isis3_unit_test_ProcessMosaic: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessMosaic -.PHONY : isis3_unit_test_ProcessMosaic - -# fast build rule for target. -isis3_unit_test_ProcessMosaic/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessMosaic.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessMosaic.dir/build -.PHONY : isis3_unit_test_ProcessMosaic/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessPolygons - -# Build rule for target. -isis3_unit_test_ProcessPolygons: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessPolygons -.PHONY : isis3_unit_test_ProcessPolygons - -# fast build rule for target. -isis3_unit_test_ProcessPolygons/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessPolygons.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessPolygons.dir/build -.PHONY : isis3_unit_test_ProcessPolygons/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProgramLauncher - -# Build rule for target. -isis3_unit_test_ProgramLauncher: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProgramLauncher -.PHONY : isis3_unit_test_ProgramLauncher - -# fast build rule for target. -isis3_unit_test_ProgramLauncher/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProgramLauncher.dir/build.make objects/CMakeFiles/isis3_unit_test_ProgramLauncher.dir/build -.PHONY : isis3_unit_test_ProgramLauncher/fast - -#============================================================================= -# Target rules for targets named kaguyasp2ascii_app - -# Build rule for target. -kaguyasp2ascii_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 kaguyasp2ascii_app -.PHONY : kaguyasp2ascii_app - -# fast build rule for target. -kaguyasp2ascii_app/fast: - $(MAKE) -f objects/CMakeFiles/kaguyasp2ascii_app.dir/build.make objects/CMakeFiles/kaguyasp2ascii_app.dir/build -.PHONY : kaguyasp2ascii_app/fast - -#============================================================================= -# Target rules for targets named mvstats_app - -# Build rule for target. -mvstats_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mvstats_app -.PHONY : mvstats_app - -# fast build rule for target. -mvstats_app/fast: - $(MAKE) -f objects/CMakeFiles/mvstats_app.dir/build.make objects/CMakeFiles/mvstats_app.dir/build -.PHONY : mvstats_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PushFrameCamera - -# Build rule for target. -isis3_unit_test_PushFrameCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCamera -.PHONY : isis3_unit_test_PushFrameCamera - -# fast build rule for target. -isis3_unit_test_PushFrameCamera/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCamera.dir/build -.PHONY : isis3_unit_test_PushFrameCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TriangularPlate - -# Build rule for target. -isis3_unit_test_TriangularPlate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TriangularPlate -.PHONY : isis3_unit_test_TriangularPlate - -# fast build rule for target. -isis3_unit_test_TriangularPlate/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TriangularPlate.dir/build.make objects/CMakeFiles/isis3_unit_test_TriangularPlate.dir/build -.PHONY : isis3_unit_test_TriangularPlate/fast - -#============================================================================= -# Target rules for targets named hidestripe_app - -# Build rule for target. -hidestripe_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hidestripe_app -.PHONY : hidestripe_app - -# fast build rule for target. -hidestripe_app/fast: - $(MAKE) -f objects/CMakeFiles/hidestripe_app.dir/build.make objects/CMakeFiles/hidestripe_app.dir/build -.PHONY : hidestripe_app/fast - -#============================================================================= -# Target rules for targets named center_app - -# Build rule for target. -center_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 center_app -.PHONY : center_app - -# fast build rule for target. -center_app/fast: - $(MAKE) -f objects/CMakeFiles/center_app.dir/build.make objects/CMakeFiles/center_app.dir/build -.PHONY : center_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AutoRegFactory - -# Build rule for target. -isis3_unit_test_AutoRegFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AutoRegFactory -.PHONY : isis3_unit_test_AutoRegFactory - -# fast build rule for target. -isis3_unit_test_AutoRegFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AutoRegFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_AutoRegFactory.dir/build -.PHONY : isis3_unit_test_AutoRegFactory/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MoravecOperator - -# Build rule for target. -isis3_unit_test_MoravecOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MoravecOperator -.PHONY : isis3_unit_test_MoravecOperator - -# fast build rule for target. -isis3_unit_test_MoravecOperator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MoravecOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_MoravecOperator.dir/build -.PHONY : isis3_unit_test_MoravecOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PushFrameCameraDetectorMap - -# Build rule for target. -isis3_unit_test_PushFrameCameraDetectorMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCameraDetectorMap -.PHONY : isis3_unit_test_PushFrameCameraDetectorMap - -# fast build rule for target. -isis3_unit_test_PushFrameCameraDetectorMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCameraDetectorMap.dir/build -.PHONY : isis3_unit_test_PushFrameCameraDetectorMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Pvl - -# Build rule for target. -isis3_unit_test_Pvl: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Pvl -.PHONY : isis3_unit_test_Pvl - -# fast build rule for target. -isis3_unit_test_Pvl/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Pvl.dir/build.make objects/CMakeFiles/isis3_unit_test_Pvl.dir/build -.PHONY : isis3_unit_test_Pvl/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlContainer - -# Build rule for target. -isis3_unit_test_PvlContainer: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlContainer -.PHONY : isis3_unit_test_PvlContainer - -# fast build rule for target. -isis3_unit_test_PvlContainer/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlContainer.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlContainer.dir/build -.PHONY : isis3_unit_test_PvlContainer/fast - -#============================================================================= -# Target rules for targets named fft_app - -# Build rule for target. -fft_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 fft_app -.PHONY : fft_app - -# fast build rule for target. -fft_app/fast: - $(MAKE) -f objects/CMakeFiles/fft_app.dir/build.make objects/CMakeFiles/fft_app.dir/build -.PHONY : fft_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlEditDialog - -# Build rule for target. -isis3_unit_test_PvlEditDialog: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlEditDialog -.PHONY : isis3_unit_test_PvlEditDialog - -# fast build rule for target. -isis3_unit_test_PvlEditDialog/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlEditDialog.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlEditDialog.dir/build -.PHONY : isis3_unit_test_PvlEditDialog/fast - -#============================================================================= -# Target rules for targets named LimitPolygonSeeder - -# Build rule for target. -LimitPolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 LimitPolygonSeeder -.PHONY : LimitPolygonSeeder - -# fast build rule for target. -LimitPolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/LimitPolygonSeeder.dir/build.make objects/CMakeFiles/LimitPolygonSeeder.dir/build -.PHONY : LimitPolygonSeeder/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlFlatMap - -# Build rule for target. -isis3_unit_test_PvlFlatMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlFlatMap -.PHONY : isis3_unit_test_PvlFlatMap - -# fast build rule for target. -isis3_unit_test_PvlFlatMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlFlatMap.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlFlatMap.dir/build -.PHONY : isis3_unit_test_PvlFlatMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlFormat - -# Build rule for target. -isis3_unit_test_PvlFormat: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlFormat -.PHONY : isis3_unit_test_PvlFormat - -# fast build rule for target. -isis3_unit_test_PvlFormat/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlFormat.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlFormat.dir/build -.PHONY : isis3_unit_test_PvlFormat/fast - -#============================================================================= -# Target rules for targets named vikfixtrx_app - -# Build rule for target. -vikfixtrx_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 vikfixtrx_app -.PHONY : vikfixtrx_app - -# fast build rule for target. -vikfixtrx_app/fast: - $(MAKE) -f objects/CMakeFiles/vikfixtrx_app.dir/build.make objects/CMakeFiles/vikfixtrx_app.dir/build -.PHONY : vikfixtrx_app/fast - -#============================================================================= -# Target rules for targets named NoNormalization - -# Build rule for target. -NoNormalization: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 NoNormalization -.PHONY : NoNormalization - -# fast build rule for target. -NoNormalization/fast: - $(MAKE) -f objects/CMakeFiles/NoNormalization.dir/build.make objects/CMakeFiles/NoNormalization.dir/build -.PHONY : NoNormalization/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RingPlaneProjection - -# Build rule for target. -isis3_unit_test_RingPlaneProjection: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RingPlaneProjection -.PHONY : isis3_unit_test_RingPlaneProjection - -# fast build rule for target. -isis3_unit_test_RingPlaneProjection/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RingPlaneProjection.dir/build.make objects/CMakeFiles/isis3_unit_test_RingPlaneProjection.dir/build -.PHONY : isis3_unit_test_RingPlaneProjection/fast - -#============================================================================= -# Target rules for targets named nocam2map_app - -# Build rule for target. -nocam2map_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 nocam2map_app -.PHONY : nocam2map_app - -# fast build rule for target. -nocam2map_app/fast: - $(MAKE) -f objects/CMakeFiles/nocam2map_app.dir/build.make objects/CMakeFiles/nocam2map_app.dir/build -.PHONY : nocam2map_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlGroup - -# Build rule for target. -isis3_unit_test_PvlGroup: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlGroup -.PHONY : isis3_unit_test_PvlGroup - -# fast build rule for target. -isis3_unit_test_PvlGroup/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlGroup.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlGroup.dir/build -.PHONY : isis3_unit_test_PvlGroup/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AbstractPlate - -# Build rule for target. -isis3_unit_test_AbstractPlate: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AbstractPlate -.PHONY : isis3_unit_test_AbstractPlate - -# fast build rule for target. -isis3_unit_test_AbstractPlate/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AbstractPlate.dir/build.make objects/CMakeFiles/isis3_unit_test_AbstractPlate.dir/build -.PHONY : isis3_unit_test_AbstractPlate/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlKeyword - -# Build rule for target. -isis3_unit_test_PvlKeyword: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlKeyword -.PHONY : isis3_unit_test_PvlKeyword - -# fast build rule for target. -isis3_unit_test_PvlKeyword/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlKeyword.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlKeyword.dir/build -.PHONY : isis3_unit_test_PvlKeyword/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlObject - -# Build rule for target. -isis3_unit_test_PvlObject: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlObject -.PHONY : isis3_unit_test_PvlObject - -# fast build rule for target. -isis3_unit_test_PvlObject/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlObject.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlObject.dir/build -.PHONY : isis3_unit_test_PvlObject/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlToPvlTranslationManager - -# Build rule for target. -isis3_unit_test_PvlToPvlTranslationManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlToPvlTranslationManager -.PHONY : isis3_unit_test_PvlToPvlTranslationManager - -# fast build rule for target. -isis3_unit_test_PvlToPvlTranslationManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlToPvlTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlToPvlTranslationManager.dir/build -.PHONY : isis3_unit_test_PvlToPvlTranslationManager/fast - -#============================================================================= -# Target rules for targets named sharpen_app - -# Build rule for target. -sharpen_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 sharpen_app -.PHONY : sharpen_app - -# fast build rule for target. -sharpen_app/fast: - $(MAKE) -f objects/CMakeFiles/sharpen_app.dir/build.make objects/CMakeFiles/sharpen_app.dir/build -.PHONY : sharpen_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlToXmlTranslationManager - -# Build rule for target. -isis3_unit_test_PvlToXmlTranslationManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlToXmlTranslationManager -.PHONY : isis3_unit_test_PvlToXmlTranslationManager - -# fast build rule for target. -isis3_unit_test_PvlToXmlTranslationManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlToXmlTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlToXmlTranslationManager.dir/build -.PHONY : isis3_unit_test_PvlToXmlTranslationManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LunarAzimuthalEqualArea - -# Build rule for target. -isis3_unit_test_LunarAzimuthalEqualArea: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LunarAzimuthalEqualArea -.PHONY : isis3_unit_test_LunarAzimuthalEqualArea - -# fast build rule for target. -isis3_unit_test_LunarAzimuthalEqualArea/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LunarAzimuthalEqualArea.dir/build.make objects/CMakeFiles/isis3_unit_test_LunarAzimuthalEqualArea.dir/build -.PHONY : isis3_unit_test_LunarAzimuthalEqualArea/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlToken - -# Build rule for target. -isis3_unit_test_PvlToken: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlToken -.PHONY : isis3_unit_test_PvlToken - -# fast build rule for target. -isis3_unit_test_PvlToken/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlToken.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlToken.dir/build -.PHONY : isis3_unit_test_PvlToken/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BulletWorldManager - -# Build rule for target. -isis3_unit_test_BulletWorldManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BulletWorldManager -.PHONY : isis3_unit_test_BulletWorldManager - -# fast build rule for target. -isis3_unit_test_BulletWorldManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BulletWorldManager.dir/build.make objects/CMakeFiles/isis3_unit_test_BulletWorldManager.dir/build -.PHONY : isis3_unit_test_BulletWorldManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PvlTranslationTable - -# Build rule for target. -isis3_unit_test_PvlTranslationTable: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PvlTranslationTable -.PHONY : isis3_unit_test_PvlTranslationTable - -# fast build rule for target. -isis3_unit_test_PvlTranslationTable/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PvlTranslationTable.dir/build.make objects/CMakeFiles/isis3_unit_test_PvlTranslationTable.dir/build -.PHONY : isis3_unit_test_PvlTranslationTable/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SurfaceModel - -# Build rule for target. -isis3_unit_test_SurfaceModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SurfaceModel -.PHONY : isis3_unit_test_SurfaceModel - -# fast build rule for target. -isis3_unit_test_SurfaceModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SurfaceModel.dir/build.make objects/CMakeFiles/isis3_unit_test_SurfaceModel.dir/build -.PHONY : isis3_unit_test_SurfaceModel/fast - -#============================================================================= -# Target rules for targets named Albedo - -# Build rule for target. -Albedo: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Albedo -.PHONY : Albedo - -# fast build rule for target. -Albedo/fast: - $(MAKE) -f objects/CMakeFiles/Albedo.dir/build.make objects/CMakeFiles/Albedo.dir/build -.PHONY : Albedo/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_InterestOperator - -# Build rule for target. -isis3_unit_test_InterestOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InterestOperator -.PHONY : isis3_unit_test_InterestOperator - -# fast build rule for target. -isis3_unit_test_InterestOperator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InterestOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_InterestOperator.dir/build -.PHONY : isis3_unit_test_InterestOperator/fast - -#============================================================================= -# Target rules for targets named desmile_app - -# Build rule for target. -desmile_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 desmile_app -.PHONY : desmile_app - -# fast build rule for target. -desmile_app/fast: - $(MAKE) -f objects/CMakeFiles/desmile_app.dir/build.make objects/CMakeFiles/desmile_app.dir/build -.PHONY : desmile_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_QtImporter - -# Build rule for target. -isis3_unit_test_QtImporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_QtImporter -.PHONY : isis3_unit_test_QtImporter - -# fast build rule for target. -isis3_unit_test_QtImporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_QtImporter.dir/build.make objects/CMakeFiles/isis3_unit_test_QtImporter.dir/build -.PHONY : isis3_unit_test_QtImporter/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_QuickFilter - -# Build rule for target. -isis3_unit_test_QuickFilter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_QuickFilter -.PHONY : isis3_unit_test_QuickFilter - -# fast build rule for target. -isis3_unit_test_QuickFilter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_QuickFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_QuickFilter.dir/build -.PHONY : isis3_unit_test_QuickFilter/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadarPulseMap - -# Build rule for target. -isis3_unit_test_RadarPulseMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarPulseMap -.PHONY : isis3_unit_test_RadarPulseMap - -# fast build rule for target. -isis3_unit_test_RadarPulseMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarPulseMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarPulseMap.dir/build -.PHONY : isis3_unit_test_RadarPulseMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Reduce - -# Build rule for target. -isis3_unit_test_Reduce: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Reduce -.PHONY : isis3_unit_test_Reduce - -# fast build rule for target. -isis3_unit_test_Reduce/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Reduce.dir/build.make objects/CMakeFiles/isis3_unit_test_Reduce.dir/build -.PHONY : isis3_unit_test_Reduce/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlNetFilter - -# Build rule for target. -isis3_unit_test_ControlNetFilter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetFilter -.PHONY : isis3_unit_test_ControlNetFilter - -# fast build rule for target. -isis3_unit_test_ControlNetFilter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetFilter.dir/build -.PHONY : isis3_unit_test_ControlNetFilter/fast - -#============================================================================= -# Target rules for targets named cubefunc_app - -# Build rule for target. -cubefunc_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cubefunc_app -.PHONY : cubefunc_app - -# fast build rule for target. -cubefunc_app/fast: - $(MAKE) -f objects/CMakeFiles/cubefunc_app.dir/build.make objects/CMakeFiles/cubefunc_app.dir/build -.PHONY : cubefunc_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadarSkyMap - -# Build rule for target. -isis3_unit_test_RadarSkyMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarSkyMap -.PHONY : isis3_unit_test_RadarSkyMap - -# fast build rule for target. -isis3_unit_test_RadarSkyMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarSkyMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarSkyMap.dir/build -.PHONY : isis3_unit_test_RadarSkyMap/fast - -#============================================================================= -# Target rules for targets named barscale_app - -# Build rule for target. -barscale_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 barscale_app -.PHONY : barscale_app - -# fast build rule for target. -barscale_app/fast: - $(MAKE) -f objects/CMakeFiles/barscale_app.dir/build.make objects/CMakeFiles/barscale_app.dir/build -.PHONY : barscale_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_OriginalXmlLabel - -# Build rule for target. -isis3_unit_test_OriginalXmlLabel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_OriginalXmlLabel -.PHONY : isis3_unit_test_OriginalXmlLabel - -# fast build rule for target. -isis3_unit_test_OriginalXmlLabel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_OriginalXmlLabel.dir/build.make objects/CMakeFiles/isis3_unit_test_OriginalXmlLabel.dir/build -.PHONY : isis3_unit_test_OriginalXmlLabel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadarSlantRangeMap - -# Build rule for target. -isis3_unit_test_RadarSlantRangeMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarSlantRangeMap -.PHONY : isis3_unit_test_RadarSlantRangeMap - -# fast build rule for target. -isis3_unit_test_RadarSlantRangeMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarSlantRangeMap.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarSlantRangeMap.dir/build -.PHONY : isis3_unit_test_RadarSlantRangeMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ReseauDistortionMap - -# Build rule for target. -isis3_unit_test_ReseauDistortionMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ReseauDistortionMap -.PHONY : isis3_unit_test_ReseauDistortionMap - -# fast build rule for target. -isis3_unit_test_ReseauDistortionMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ReseauDistortionMap.dir/build.make objects/CMakeFiles/isis3_unit_test_ReseauDistortionMap.dir/build -.PHONY : isis3_unit_test_ReseauDistortionMap/fast - -#============================================================================= -# Target rules for targets named rgb2hsv_app - -# Build rule for target. -rgb2hsv_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 rgb2hsv_app -.PHONY : rgb2hsv_app - -# fast build rule for target. -rgb2hsv_app/fast: - $(MAKE) -f objects/CMakeFiles/rgb2hsv_app.dir/build.make objects/CMakeFiles/rgb2hsv_app.dir/build -.PHONY : rgb2hsv_app/fast - -#============================================================================= -# Target rules for targets named enlarge_app - -# Build rule for target. -enlarge_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 enlarge_app -.PHONY : enlarge_app - -# fast build rule for target. -enlarge_app/fast: - $(MAKE) -f objects/CMakeFiles/enlarge_app.dir/build.make objects/CMakeFiles/enlarge_app.dir/build -.PHONY : enlarge_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_AbstractShape - -# Build rule for target. -isis3_unit_test_AbstractShape: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_AbstractShape -.PHONY : isis3_unit_test_AbstractShape - -# fast build rule for target. -isis3_unit_test_AbstractShape/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_AbstractShape.dir/build.make objects/CMakeFiles/isis3_unit_test_AbstractShape.dir/build -.PHONY : isis3_unit_test_AbstractShape/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SerialNumber - -# Build rule for target. -isis3_unit_test_SerialNumber: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SerialNumber -.PHONY : isis3_unit_test_SerialNumber - -# fast build rule for target. -isis3_unit_test_SerialNumber/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SerialNumber.dir/build.make objects/CMakeFiles/isis3_unit_test_SerialNumber.dir/build -.PHONY : isis3_unit_test_SerialNumber/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ShadeAtm - -# Build rule for target. -isis3_unit_test_ShadeAtm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ShadeAtm -.PHONY : isis3_unit_test_ShadeAtm - -# fast build rule for target. -isis3_unit_test_ShadeAtm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ShadeAtm.dir/build.make objects/CMakeFiles/isis3_unit_test_ShadeAtm.dir/build -.PHONY : isis3_unit_test_ShadeAtm/fast - -#============================================================================= -# Target rules for targets named reduce_app - -# Build rule for target. -reduce_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 reduce_app -.PHONY : reduce_app - -# fast build rule for target. -reduce_app/fast: - $(MAKE) -f objects/CMakeFiles/reduce_app.dir/build.make objects/CMakeFiles/reduce_app.dir/build -.PHONY : reduce_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ShapeModelFactory - -# Build rule for target. -isis3_unit_test_ShapeModelFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ShapeModelFactory -.PHONY : isis3_unit_test_ShapeModelFactory - -# fast build rule for target. -isis3_unit_test_ShapeModelFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ShapeModelFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_ShapeModelFactory.dir/build -.PHONY : isis3_unit_test_ShapeModelFactory/fast - -#============================================================================= -# Target rules for targets named isis2raw_app - -# Build rule for target. -isis2raw_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis2raw_app -.PHONY : isis2raw_app - -# fast build rule for target. -isis2raw_app/fast: - $(MAKE) -f objects/CMakeFiles/isis2raw_app.dir/build.make objects/CMakeFiles/isis2raw_app.dir/build -.PHONY : isis2raw_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProcessByLine - -# Build rule for target. -isis3_unit_test_ProcessByLine: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProcessByLine -.PHONY : isis3_unit_test_ProcessByLine - -# fast build rule for target. -isis3_unit_test_ProcessByLine/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProcessByLine.dir/build.make objects/CMakeFiles/isis3_unit_test_ProcessByLine.dir/build -.PHONY : isis3_unit_test_ProcessByLine/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Sinusoidal - -# Build rule for target. -isis3_unit_test_Sinusoidal: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Sinusoidal -.PHONY : isis3_unit_test_Sinusoidal - -# fast build rule for target. -isis3_unit_test_Sinusoidal/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Sinusoidal.dir/build.make objects/CMakeFiles/isis3_unit_test_Sinusoidal.dir/build -.PHONY : isis3_unit_test_Sinusoidal/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SmtkMatcher - -# Build rule for target. -isis3_unit_test_SmtkMatcher: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SmtkMatcher -.PHONY : isis3_unit_test_SmtkMatcher - -# fast build rule for target. -isis3_unit_test_SmtkMatcher/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SmtkMatcher.dir/build.make objects/CMakeFiles/isis3_unit_test_SmtkMatcher.dir/build -.PHONY : isis3_unit_test_SmtkMatcher/fast - -#============================================================================= -# Target rules for targets named translate_app - -# Build rule for target. -translate_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 translate_app -.PHONY : translate_app - -# fast build rule for target. -translate_app/fast: - $(MAKE) -f objects/CMakeFiles/translate_app.dir/build.make objects/CMakeFiles/translate_app.dir/build -.PHONY : translate_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SparseBlockMatrix - -# Build rule for target. -isis3_unit_test_SparseBlockMatrix: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SparseBlockMatrix -.PHONY : isis3_unit_test_SparseBlockMatrix - -# fast build rule for target. -isis3_unit_test_SparseBlockMatrix/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SparseBlockMatrix.dir/build.make objects/CMakeFiles/isis3_unit_test_SparseBlockMatrix.dir/build -.PHONY : isis3_unit_test_SparseBlockMatrix/fast - -#============================================================================= -# Target rules for targets named spiceserver_app - -# Build rule for target. -spiceserver_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 spiceserver_app -.PHONY : spiceserver_app - -# fast build rule for target. -spiceserver_app/fast: - $(MAKE) -f objects/CMakeFiles/spiceserver_app.dir/build.make objects/CMakeFiles/spiceserver_app.dir/build -.PHONY : spiceserver_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Color - -# Build rule for target. -isis3_unit_test_Color: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Color -.PHONY : isis3_unit_test_Color - -# fast build rule for target. -isis3_unit_test_Color/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Color.dir/build.make objects/CMakeFiles/isis3_unit_test_Color.dir/build -.PHONY : isis3_unit_test_Color/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpecialPixel - -# Build rule for target. -isis3_unit_test_SpecialPixel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpecialPixel -.PHONY : isis3_unit_test_SpecialPixel - -# fast build rule for target. -isis3_unit_test_SpecialPixel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpecialPixel.dir/build.make objects/CMakeFiles/isis3_unit_test_SpecialPixel.dir/build -.PHONY : isis3_unit_test_SpecialPixel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Statistics - -# Build rule for target. -isis3_unit_test_Statistics: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Statistics -.PHONY : isis3_unit_test_Statistics - -# fast build rule for target. -isis3_unit_test_Statistics/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Statistics.dir/build.make objects/CMakeFiles/isis3_unit_test_Statistics.dir/build -.PHONY : isis3_unit_test_Statistics/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SampleManager - -# Build rule for target. -isis3_unit_test_SampleManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SampleManager -.PHONY : isis3_unit_test_SampleManager - -# fast build rule for target. -isis3_unit_test_SampleManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SampleManager.dir/build.make objects/CMakeFiles/isis3_unit_test_SampleManager.dir/build -.PHONY : isis3_unit_test_SampleManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Strategy - -# Build rule for target. -isis3_unit_test_Strategy: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Strategy -.PHONY : isis3_unit_test_Strategy - -# fast build rule for target. -isis3_unit_test_Strategy/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Strategy.dir/build.make objects/CMakeFiles/isis3_unit_test_Strategy.dir/build -.PHONY : isis3_unit_test_Strategy/fast - -#============================================================================= -# Target rules for targets named mar10nonoise_app - -# Build rule for target. -mar10nonoise_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mar10nonoise_app -.PHONY : mar10nonoise_app - -# fast build rule for target. -mar10nonoise_app/fast: - $(MAKE) -f objects/CMakeFiles/mar10nonoise_app.dir/build.make objects/CMakeFiles/mar10nonoise_app.dir/build -.PHONY : mar10nonoise_app/fast - -#============================================================================= -# Target rules for targets named Isotropic2 - -# Build rule for target. -Isotropic2: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 Isotropic2 -.PHONY : Isotropic2 - -# fast build rule for target. -Isotropic2/fast: - $(MAKE) -f objects/CMakeFiles/Isotropic2.dir/build.make objects/CMakeFiles/Isotropic2.dir/build -.PHONY : Isotropic2/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_StreamExporter - -# Build rule for target. -isis3_unit_test_StreamExporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StreamExporter -.PHONY : isis3_unit_test_StreamExporter - -# fast build rule for target. -isis3_unit_test_StreamExporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StreamExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_StreamExporter.dir/build -.PHONY : isis3_unit_test_StreamExporter/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SurfacePoint - -# Build rule for target. -isis3_unit_test_SurfacePoint: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SurfacePoint -.PHONY : isis3_unit_test_SurfacePoint - -# fast build rule for target. -isis3_unit_test_SurfacePoint/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SurfacePoint.dir/build.make objects/CMakeFiles/isis3_unit_test_SurfacePoint.dir/build -.PHONY : isis3_unit_test_SurfacePoint/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Table - -# Build rule for target. -isis3_unit_test_Table: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Table -.PHONY : isis3_unit_test_Table - -# fast build rule for target. -isis3_unit_test_Table/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Table.dir/build.make objects/CMakeFiles/isis3_unit_test_Table.dir/build -.PHONY : isis3_unit_test_Table/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpiceRotation - -# Build rule for target. -isis3_unit_test_SpiceRotation: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpiceRotation -.PHONY : isis3_unit_test_SpiceRotation - -# fast build rule for target. -isis3_unit_test_SpiceRotation/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpiceRotation.dir/build.make objects/CMakeFiles/isis3_unit_test_SpiceRotation.dir/build -.PHONY : isis3_unit_test_SpiceRotation/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TableField - -# Build rule for target. -isis3_unit_test_TableField: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TableField -.PHONY : isis3_unit_test_TableField - -# fast build rule for target. -isis3_unit_test_TableField/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TableField.dir/build.make objects/CMakeFiles/isis3_unit_test_TableField.dir/build -.PHONY : isis3_unit_test_TableField/fast - -#============================================================================= -# Target rules for targets named seedgrid_app - -# Build rule for target. -seedgrid_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 seedgrid_app -.PHONY : seedgrid_app - -# fast build rule for target. -seedgrid_app/fast: - $(MAKE) -f objects/CMakeFiles/seedgrid_app.dir/build.make objects/CMakeFiles/seedgrid_app.dir/build -.PHONY : seedgrid_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ProjectionFactory - -# Build rule for target. -isis3_unit_test_ProjectionFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ProjectionFactory -.PHONY : isis3_unit_test_ProjectionFactory - -# fast build rule for target. -isis3_unit_test_ProjectionFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ProjectionFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_ProjectionFactory.dir/build -.PHONY : isis3_unit_test_ProjectionFactory/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TextFile - -# Build rule for target. -isis3_unit_test_TextFile: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TextFile -.PHONY : isis3_unit_test_TextFile - -# fast build rule for target. -isis3_unit_test_TextFile/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TextFile.dir/build.make objects/CMakeFiles/isis3_unit_test_TextFile.dir/build -.PHONY : isis3_unit_test_TextFile/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_TiffExporter - -# Build rule for target. -isis3_unit_test_TiffExporter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_TiffExporter -.PHONY : isis3_unit_test_TiffExporter - -# fast build rule for target. -isis3_unit_test_TiffExporter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_TiffExporter.dir/build.make objects/CMakeFiles/isis3_unit_test_TiffExporter.dir/build -.PHONY : isis3_unit_test_TiffExporter/fast - -#============================================================================= -# Target rules for targets named mro_unit_test_HiEqualization - -# Build rule for target. -mro_unit_test_HiEqualization: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mro_unit_test_HiEqualization -.PHONY : mro_unit_test_HiEqualization - -# fast build rule for target. -mro_unit_test_HiEqualization/fast: - $(MAKE) -f objects/CMakeFiles/mro_unit_test_HiEqualization.dir/build.make objects/CMakeFiles/mro_unit_test_HiEqualization.dir/build -.PHONY : mro_unit_test_HiEqualization/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_InterestOperatorFactory - -# Build rule for target. -isis3_unit_test_InterestOperatorFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_InterestOperatorFactory -.PHONY : isis3_unit_test_InterestOperatorFactory - -# fast build rule for target. -isis3_unit_test_InterestOperatorFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_InterestOperatorFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_InterestOperatorFactory.dir/build -.PHONY : isis3_unit_test_InterestOperatorFactory/fast - -#============================================================================= -# Target rules for targets named gllssi2isis_app - -# Build rule for target. -gllssi2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 gllssi2isis_app -.PHONY : gllssi2isis_app - -# fast build rule for target. -gllssi2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/gllssi2isis_app.dir/build.make objects/CMakeFiles/gllssi2isis_app.dir/build -.PHONY : gllssi2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LineScanCameraGroundMap - -# Build rule for target. -isis3_unit_test_LineScanCameraGroundMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LineScanCameraGroundMap -.PHONY : isis3_unit_test_LineScanCameraGroundMap - -# fast build rule for target. -isis3_unit_test_LineScanCameraGroundMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LineScanCameraGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_LineScanCameraGroundMap.dir/build -.PHONY : isis3_unit_test_LineScanCameraGroundMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_IsisAml - -# Build rule for target. -isis3_unit_test_IsisAml: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_IsisAml -.PHONY : isis3_unit_test_IsisAml - -# fast build rule for target. -isis3_unit_test_IsisAml/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_IsisAml.dir/build.make objects/CMakeFiles/isis3_unit_test_IsisAml.dir/build -.PHONY : isis3_unit_test_IsisAml/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Transform - -# Build rule for target. -isis3_unit_test_Transform: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Transform -.PHONY : isis3_unit_test_Transform - -# fast build rule for target. -isis3_unit_test_Transform/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Transform.dir/build.make objects/CMakeFiles/isis3_unit_test_Transform.dir/build -.PHONY : isis3_unit_test_Transform/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_UniqueIOCachingAlgorithm - -# Build rule for target. -isis3_unit_test_UniqueIOCachingAlgorithm: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UniqueIOCachingAlgorithm -.PHONY : isis3_unit_test_UniqueIOCachingAlgorithm - -# fast build rule for target. -isis3_unit_test_UniqueIOCachingAlgorithm/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UniqueIOCachingAlgorithm.dir/build.make objects/CMakeFiles/isis3_unit_test_UniqueIOCachingAlgorithm.dir/build -.PHONY : isis3_unit_test_UniqueIOCachingAlgorithm/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_UniversalGroundMap - -# Build rule for target. -isis3_unit_test_UniversalGroundMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_UniversalGroundMap -.PHONY : isis3_unit_test_UniversalGroundMap - -# fast build rule for target. -isis3_unit_test_UniversalGroundMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_UniversalGroundMap.dir/build.make objects/CMakeFiles/isis3_unit_test_UniversalGroundMap.dir/build -.PHONY : isis3_unit_test_UniversalGroundMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_VariableLineScanCameraDetectorMap - -# Build rule for target. -isis3_unit_test_VariableLineScanCameraDetectorMap: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_VariableLineScanCameraDetectorMap -.PHONY : isis3_unit_test_VariableLineScanCameraDetectorMap - -# fast build rule for target. -isis3_unit_test_VariableLineScanCameraDetectorMap/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_VariableLineScanCameraDetectorMap.dir/build.make objects/CMakeFiles/isis3_unit_test_VariableLineScanCameraDetectorMap.dir/build -.PHONY : isis3_unit_test_VariableLineScanCameraDetectorMap/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_VecFilter - -# Build rule for target. -isis3_unit_test_VecFilter: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_VecFilter -.PHONY : isis3_unit_test_VecFilter - -# fast build rule for target. -isis3_unit_test_VecFilter/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_VecFilter.dir/build.make objects/CMakeFiles/isis3_unit_test_VecFilter.dir/build -.PHONY : isis3_unit_test_VecFilter/fast - -#============================================================================= -# Target rules for targets named fakecube_app - -# Build rule for target. -fakecube_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 fakecube_app -.PHONY : fakecube_app - -# fast build rule for target. -fakecube_app/fast: - $(MAKE) -f objects/CMakeFiles/fakecube_app.dir/build.make objects/CMakeFiles/fakecube_app.dir/build -.PHONY : fakecube_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_XmlStackedHandler - -# Build rule for target. -isis3_unit_test_XmlStackedHandler: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_XmlStackedHandler -.PHONY : isis3_unit_test_XmlStackedHandler - -# fast build rule for target. -isis3_unit_test_XmlStackedHandler/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_XmlStackedHandler.dir/build.make objects/CMakeFiles/isis3_unit_test_XmlStackedHandler.dir/build -.PHONY : isis3_unit_test_XmlStackedHandler/fast - -#============================================================================= -# Target rules for targets named isis2ascii_app - -# Build rule for target. -isis2ascii_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis2ascii_app -.PHONY : isis2ascii_app - -# fast build rule for target. -isis2ascii_app/fast: - $(MAKE) -f objects/CMakeFiles/isis2ascii_app.dir/build.make objects/CMakeFiles/isis2ascii_app.dir/build -.PHONY : isis2ascii_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_XmlStackedHandlerReader - -# Build rule for target. -isis3_unit_test_XmlStackedHandlerReader: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_XmlStackedHandlerReader -.PHONY : isis3_unit_test_XmlStackedHandlerReader - -# fast build rule for target. -isis3_unit_test_XmlStackedHandlerReader/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_XmlStackedHandlerReader.dir/build.make objects/CMakeFiles/isis3_unit_test_XmlStackedHandlerReader.dir/build -.PHONY : isis3_unit_test_XmlStackedHandlerReader/fast - -#============================================================================= -# Target rules for targets named mapgrid_app - -# Build rule for target. -mapgrid_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mapgrid_app -.PHONY : mapgrid_app - -# fast build rule for target. -mapgrid_app/fast: - $(MAKE) -f objects/CMakeFiles/mapgrid_app.dir/build.make objects/CMakeFiles/mapgrid_app.dir/build -.PHONY : mapgrid_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_StripPolygonSeeder - -# Build rule for target. -isis3_unit_test_StripPolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_StripPolygonSeeder -.PHONY : isis3_unit_test_StripPolygonSeeder - -# fast build rule for target. -isis3_unit_test_StripPolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_StripPolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_StripPolygonSeeder.dir/build -.PHONY : isis3_unit_test_StripPolygonSeeder/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_XmlToPvlTranslationManager - -# Build rule for target. -isis3_unit_test_XmlToPvlTranslationManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_XmlToPvlTranslationManager -.PHONY : isis3_unit_test_XmlToPvlTranslationManager - -# fast build rule for target. -isis3_unit_test_XmlToPvlTranslationManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_XmlToPvlTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_XmlToPvlTranslationManager.dir/build -.PHONY : isis3_unit_test_XmlToPvlTranslationManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Progress - -# Build rule for target. -isis3_unit_test_Progress: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Progress -.PHONY : isis3_unit_test_Progress - -# fast build rule for target. -isis3_unit_test_Progress/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Progress.dir/build.make objects/CMakeFiles/isis3_unit_test_Progress.dir/build -.PHONY : isis3_unit_test_Progress/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_iTime - -# Build rule for target. -isis3_unit_test_iTime: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_iTime -.PHONY : isis3_unit_test_iTime - -# fast build rule for target. -isis3_unit_test_iTime/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_iTime.dir/build.make objects/CMakeFiles/isis3_unit_test_iTime.dir/build -.PHONY : isis3_unit_test_iTime/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_KernelDb - -# Build rule for target. -isis3_unit_test_KernelDb: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_KernelDb -.PHONY : isis3_unit_test_KernelDb - -# fast build rule for target. -isis3_unit_test_KernelDb/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_KernelDb.dir/build.make objects/CMakeFiles/isis3_unit_test_KernelDb.dir/build -.PHONY : isis3_unit_test_KernelDb/fast - -#============================================================================= -# Target rules for targets named gllnims2isis_app - -# Build rule for target. -gllnims2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 gllnims2isis_app -.PHONY : gllnims2isis_app - -# fast build rule for target. -gllnims2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/gllnims2isis_app.dir/build.make objects/CMakeFiles/gllnims2isis_app.dir/build -.PHONY : gllnims2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Database - -# Build rule for target. -isis3_unit_test_Database: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Database -.PHONY : isis3_unit_test_Database - -# fast build rule for target. -isis3_unit_test_Database/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Database.dir/build.make objects/CMakeFiles/isis3_unit_test_Database.dir/build -.PHONY : isis3_unit_test_Database/fast - -#============================================================================= -# Target rules for targets named mdisddr_app - -# Build rule for target. -mdisddr_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mdisddr_app -.PHONY : mdisddr_app - -# fast build rule for target. -mdisddr_app/fast: - $(MAKE) -f objects/CMakeFiles/mdisddr_app.dir/build.make objects/CMakeFiles/mdisddr_app.dir/build -.PHONY : mdisddr_app/fast - -#============================================================================= -# Target rules for targets named HapkeAtm2 - -# Build rule for target. -HapkeAtm2: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 HapkeAtm2 -.PHONY : HapkeAtm2 - -# fast build rule for target. -HapkeAtm2/fast: - $(MAKE) -f objects/CMakeFiles/HapkeAtm2.dir/build.make objects/CMakeFiles/HapkeAtm2.dir/build -.PHONY : HapkeAtm2/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_DbProfile - -# Build rule for target. -isis3_unit_test_DbProfile: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_DbProfile -.PHONY : isis3_unit_test_DbProfile - -# fast build rule for target. -isis3_unit_test_DbProfile/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_DbProfile.dir/build.make objects/CMakeFiles/isis3_unit_test_DbProfile.dir/build -.PHONY : isis3_unit_test_DbProfile/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SpectralDefinitionFactory - -# Build rule for target. -isis3_unit_test_SpectralDefinitionFactory: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SpectralDefinitionFactory -.PHONY : isis3_unit_test_SpectralDefinitionFactory - -# fast build rule for target. -isis3_unit_test_SpectralDefinitionFactory/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SpectralDefinitionFactory.dir/build.make objects/CMakeFiles/isis3_unit_test_SpectralDefinitionFactory.dir/build -.PHONY : isis3_unit_test_SpectralDefinitionFactory/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_SqlQuery - -# Build rule for target. -isis3_unit_test_SqlQuery: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_SqlQuery -.PHONY : isis3_unit_test_SqlQuery - -# fast build rule for target. -isis3_unit_test_SqlQuery/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_SqlQuery.dir/build.make objects/CMakeFiles/isis3_unit_test_SqlQuery.dir/build -.PHONY : isis3_unit_test_SqlQuery/fast - -#============================================================================= -# Target rules for targets named mgs - -# Build rule for target. -mgs: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mgs -.PHONY : mgs - -# fast build rule for target. -mgs/fast: - $(MAKE) -f objects/CMakeFiles/mgs.dir/build.make objects/CMakeFiles/mgs.dir/build -.PHONY : mgs/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_RadarCamera - -# Build rule for target. -isis3_unit_test_RadarCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_RadarCamera -.PHONY : isis3_unit_test_RadarCamera - -# fast build rule for target. -isis3_unit_test_RadarCamera/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_RadarCamera.dir/build.make objects/CMakeFiles/isis3_unit_test_RadarCamera.dir/build -.PHONY : isis3_unit_test_RadarCamera/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BundleAdjust - -# Build rule for target. -isis3_unit_test_BundleAdjust: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleAdjust -.PHONY : isis3_unit_test_BundleAdjust - -# fast build rule for target. -isis3_unit_test_BundleAdjust/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleAdjust.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleAdjust.dir/build -.PHONY : isis3_unit_test_BundleAdjust/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ForstnerOperator - -# Build rule for target. -isis3_unit_test_ForstnerOperator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ForstnerOperator -.PHONY : isis3_unit_test_ForstnerOperator - -# fast build rule for target. -isis3_unit_test_ForstnerOperator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ForstnerOperator.dir/build.make objects/CMakeFiles/isis3_unit_test_ForstnerOperator.dir/build -.PHONY : isis3_unit_test_ForstnerOperator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_BundleResults - -# Build rule for target. -isis3_unit_test_BundleResults: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_BundleResults -.PHONY : isis3_unit_test_BundleResults - -# fast build rule for target. -isis3_unit_test_BundleResults/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_BundleResults.dir/build.make objects/CMakeFiles/isis3_unit_test_BundleResults.dir/build -.PHONY : isis3_unit_test_BundleResults/fast - -#============================================================================= -# Target rules for targets named mgs_unit_test_MocNarrowAngleCamera - -# Build rule for target. -mgs_unit_test_MocNarrowAngleCamera: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mgs_unit_test_MocNarrowAngleCamera -.PHONY : mgs_unit_test_MocNarrowAngleCamera - -# fast build rule for target. -mgs_unit_test_MocNarrowAngleCamera/fast: - $(MAKE) -f objects/CMakeFiles/mgs_unit_test_MocNarrowAngleCamera.dir/build.make objects/CMakeFiles/mgs_unit_test_MocNarrowAngleCamera.dir/build -.PHONY : mgs_unit_test_MocNarrowAngleCamera/fast - -#============================================================================= -# Target rules for targets named apollopanstitcher_app - -# Build rule for target. -apollopanstitcher_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 apollopanstitcher_app -.PHONY : apollopanstitcher_app - -# fast build rule for target. -apollopanstitcher_app/fast: - $(MAKE) -f objects/CMakeFiles/apollopanstitcher_app.dir/build.make objects/CMakeFiles/apollopanstitcher_app.dir/build -.PHONY : apollopanstitcher_app/fast - -#============================================================================= -# Target rules for targets named bandnorm_app - -# Build rule for target. -bandnorm_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 bandnorm_app -.PHONY : bandnorm_app - -# fast build rule for target. -bandnorm_app/fast: - $(MAKE) -f objects/CMakeFiles/bandnorm_app.dir/build.make objects/CMakeFiles/bandnorm_app.dir/build -.PHONY : bandnorm_app/fast - -#============================================================================= -# Target rules for targets named mdis2isis_app - -# Build rule for target. -mdis2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mdis2isis_app -.PHONY : mdis2isis_app - -# fast build rule for target. -mdis2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/mdis2isis_app.dir/build.make objects/CMakeFiles/mdis2isis_app.dir/build -.PHONY : mdis2isis_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_MultivariateStatistics - -# Build rule for target. -isis3_unit_test_MultivariateStatistics: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_MultivariateStatistics -.PHONY : isis3_unit_test_MultivariateStatistics - -# fast build rule for target. -isis3_unit_test_MultivariateStatistics/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_MultivariateStatistics.dir/build.make objects/CMakeFiles/isis3_unit_test_MultivariateStatistics.dir/build -.PHONY : isis3_unit_test_MultivariateStatistics/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlMeasure - -# Build rule for target. -isis3_unit_test_ControlMeasure: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlMeasure -.PHONY : isis3_unit_test_ControlMeasure - -# fast build rule for target. -isis3_unit_test_ControlMeasure/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlMeasure.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlMeasure.dir/build -.PHONY : isis3_unit_test_ControlMeasure/fast - -#============================================================================= -# Target rules for targets named marciflip_app - -# Build rule for target. -marciflip_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 marciflip_app -.PHONY : marciflip_app - -# fast build rule for target. -marciflip_app/fast: - $(MAKE) -f objects/CMakeFiles/marciflip_app.dir/build.make objects/CMakeFiles/marciflip_app.dir/build -.PHONY : marciflip_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlMeasureLogData - -# Build rule for target. -isis3_unit_test_ControlMeasureLogData: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlMeasureLogData -.PHONY : isis3_unit_test_ControlMeasureLogData - -# fast build rule for target. -isis3_unit_test_ControlMeasureLogData/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlMeasureLogData.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlMeasureLogData.dir/build -.PHONY : isis3_unit_test_ControlMeasureLogData/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlNet - -# Build rule for target. -isis3_unit_test_ControlNet: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNet -.PHONY : isis3_unit_test_ControlNet - -# fast build rule for target. -isis3_unit_test_ControlNet/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNet.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNet.dir/build -.PHONY : isis3_unit_test_ControlNet/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_Mercator - -# Build rule for target. -isis3_unit_test_Mercator: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_Mercator -.PHONY : isis3_unit_test_Mercator - -# fast build rule for target. -isis3_unit_test_Mercator/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_Mercator.dir/build.make objects/CMakeFiles/isis3_unit_test_Mercator.dir/build -.PHONY : isis3_unit_test_Mercator/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_NaifDskPlateModel - -# Build rule for target. -isis3_unit_test_NaifDskPlateModel: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_NaifDskPlateModel -.PHONY : isis3_unit_test_NaifDskPlateModel - -# fast build rule for target. -isis3_unit_test_NaifDskPlateModel/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_NaifDskPlateModel.dir/build.make objects/CMakeFiles/isis3_unit_test_NaifDskPlateModel.dir/build -.PHONY : isis3_unit_test_NaifDskPlateModel/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlNetDiff - -# Build rule for target. -isis3_unit_test_ControlNetDiff: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetDiff -.PHONY : isis3_unit_test_ControlNetDiff - -# fast build rule for target. -isis3_unit_test_ControlNetDiff/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetDiff.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetDiff.dir/build -.PHONY : isis3_unit_test_ControlNetDiff/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_LabelTranslationManager - -# Build rule for target. -isis3_unit_test_LabelTranslationManager: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_LabelTranslationManager -.PHONY : isis3_unit_test_LabelTranslationManager - -# fast build rule for target. -isis3_unit_test_LabelTranslationManager/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_LabelTranslationManager.dir/build.make objects/CMakeFiles/isis3_unit_test_LabelTranslationManager.dir/build -.PHONY : isis3_unit_test_LabelTranslationManager/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlNetValidMeasure - -# Build rule for target. -isis3_unit_test_ControlNetValidMeasure: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlNetValidMeasure -.PHONY : isis3_unit_test_ControlNetValidMeasure - -# fast build rule for target. -isis3_unit_test_ControlNetValidMeasure/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlNetValidMeasure.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlNetValidMeasure.dir/build -.PHONY : isis3_unit_test_ControlNetValidMeasure/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_GridPolygonSeeder - -# Build rule for target. -isis3_unit_test_GridPolygonSeeder: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_GridPolygonSeeder -.PHONY : isis3_unit_test_GridPolygonSeeder - -# fast build rule for target. -isis3_unit_test_GridPolygonSeeder/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_GridPolygonSeeder.dir/build.make objects/CMakeFiles/isis3_unit_test_GridPolygonSeeder.dir/build -.PHONY : isis3_unit_test_GridPolygonSeeder/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_ControlPoint - -# Build rule for target. -isis3_unit_test_ControlPoint: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_ControlPoint -.PHONY : isis3_unit_test_ControlPoint - -# fast build rule for target. -isis3_unit_test_ControlPoint/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_ControlPoint.dir/build.make objects/CMakeFiles/isis3_unit_test_ControlPoint.dir/build -.PHONY : isis3_unit_test_ControlPoint/fast - -#============================================================================= -# Target rules for targets named ascii2isis_app - -# Build rule for target. -ascii2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 ascii2isis_app -.PHONY : ascii2isis_app - -# fast build rule for target. -ascii2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/ascii2isis_app.dir/build.make objects/CMakeFiles/ascii2isis_app.dir/build -.PHONY : ascii2isis_app/fast - -#============================================================================= -# Target rules for targets named hist_app - -# Build rule for target. -hist_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 hist_app -.PHONY : hist_app - -# fast build rule for target. -hist_app/fast: - $(MAKE) -f objects/CMakeFiles/hist_app.dir/build.make objects/CMakeFiles/hist_app.dir/build -.PHONY : hist_app/fast - -#============================================================================= -# Target rules for targets named isis3_unit_test_PushFrameCameraCcdLayout - -# Build rule for target. -isis3_unit_test_PushFrameCameraCcdLayout: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 isis3_unit_test_PushFrameCameraCcdLayout -.PHONY : isis3_unit_test_PushFrameCameraCcdLayout - -# fast build rule for target. -isis3_unit_test_PushFrameCameraCcdLayout/fast: - $(MAKE) -f objects/CMakeFiles/isis3_unit_test_PushFrameCameraCcdLayout.dir/build.make objects/CMakeFiles/isis3_unit_test_PushFrameCameraCcdLayout.dir/build -.PHONY : isis3_unit_test_PushFrameCameraCcdLayout/fast - -#============================================================================= -# Target rules for targets named automos_app - -# Build rule for target. -automos_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 automos_app -.PHONY : automos_app - -# fast build rule for target. -automos_app/fast: - $(MAKE) -f objects/CMakeFiles/automos_app.dir/build.make objects/CMakeFiles/automos_app.dir/build -.PHONY : automos_app/fast - -#============================================================================= -# Target rules for targets named autoregtemplate_app - -# Build rule for target. -autoregtemplate_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 autoregtemplate_app -.PHONY : autoregtemplate_app - -# fast build rule for target. -autoregtemplate_app/fast: - $(MAKE) -f objects/CMakeFiles/autoregtemplate_app.dir/build.make objects/CMakeFiles/autoregtemplate_app.dir/build -.PHONY : autoregtemplate_app/fast - -#============================================================================= -# Target rules for targets named bandtrim_app - -# Build rule for target. -bandtrim_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 bandtrim_app -.PHONY : bandtrim_app - -# fast build rule for target. -bandtrim_app/fast: - $(MAKE) -f objects/CMakeFiles/bandtrim_app.dir/build.make objects/CMakeFiles/bandtrim_app.dir/build -.PHONY : bandtrim_app/fast - -#============================================================================= -# Target rules for targets named msi2isis_app - -# Build rule for target. -msi2isis_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 msi2isis_app -.PHONY : msi2isis_app - -# fast build rule for target. -msi2isis_app/fast: - $(MAKE) -f objects/CMakeFiles/msi2isis_app.dir/build.make objects/CMakeFiles/msi2isis_app.dir/build -.PHONY : msi2isis_app/fast - -#============================================================================= -# Target rules for targets named butterworth_app - -# Build rule for target. -butterworth_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 butterworth_app -.PHONY : butterworth_app - -# fast build rule for target. -butterworth_app/fast: - $(MAKE) -f objects/CMakeFiles/butterworth_app.dir/build.make objects/CMakeFiles/butterworth_app.dir/build -.PHONY : butterworth_app/fast - -#============================================================================= -# Target rules for targets named mapsize_app - -# Build rule for target. -mapsize_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 mapsize_app -.PHONY : mapsize_app - -# fast build rule for target. -mapsize_app/fast: - $(MAKE) -f objects/CMakeFiles/mapsize_app.dir/build.make objects/CMakeFiles/mapsize_app.dir/build -.PHONY : mapsize_app/fast - -#============================================================================= -# Target rules for targets named cam2cam_app - -# Build rule for target. -cam2cam_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 cam2cam_app -.PHONY : cam2cam_app - -# fast build rule for target. -cam2cam_app/fast: - $(MAKE) -f objects/CMakeFiles/cam2cam_app.dir/build.make objects/CMakeFiles/cam2cam_app.dir/build -.PHONY : cam2cam_app/fast - -#============================================================================= -# Target rules for targets named campt_app - -# Build rule for target. -campt_app: cmake_check_build_system - $(MAKE) -f CMakeFiles/Makefile2 campt_app -.PHONY : campt_app - -# fast build rule for target. -campt_app/fast: - $(MAKE) -f objects/CMakeFiles/campt_app.dir/build.make objects/CMakeFiles/campt_app.dir/build -.PHONY : campt_app/fast - -# Help Target -help: - @echo "The following are some of the valid targets for this Makefile:" - @echo "... all (the default if no target is provided)" - @echo "... clean" - @echo "... depend" - @echo "... install/strip" - @echo "... install" - @echo "... list_install_components" - @echo "... rebuild_cache" - @echo "... edit_cache" - @echo "... docs" - @echo "... ContinuousSubmit" - @echo "... ContinuousCoverage" - @echo "... ContinuousTest" - @echo "... ContinuousBuild" - @echo "... ContinuousMemCheck" - @echo "... Nightly" - @echo "... NightlyTest" - @echo "... NightlyUpdate" - @echo "... install/local" - @echo "... Continuous" - @echo "... NightlyBuild" - @echo "... NightlyStart" - @echo "... NightlyMemoryCheck" - @echo "... NightlyMemCheck" - @echo "... clean_source" - @echo "... ExperimentalStart" - @echo "... ContinuousConfigure" - @echo "... NightlyCoverage" - @echo "... ExperimentalUpdate" - @echo "... test" - @echo "... ExperimentalConfigure" - @echo "... ExperimentalCoverage" - @echo "... ExperimentalBuild" - @echo "... NightlyConfigure" - @echo "... ExperimentalTest" - @echo "... ExperimentalMemCheck" - @echo "... Experimental" - @echo "... NightlySubmit" - @echo "... ExperimentalSubmit" - @echo "... ContinuousStart" - @echo "... ContinuousUpdate" - @echo "... VoyagerCamera" - @echo "... viknonoodle_app" - @echo "... vikcal_app" - @echo "... vik2isis_app" - @echo "... rososiris2isis_app" - @echo "... RosettaVirtisCamera" - @echo "... thmvisflat_app" - @echo "... ThemisVisCamera" - @echo "... mroctx2isis_app" - @echo "... marcical_app" - @echo "... marci2isis_app" - @echo "... histitch_app" - @echo "... histat_app" - @echo "... hirdrgen_app" - @echo "... hinoise_app" - @echo "... hisharpen_app" - @echo "... hijitter_app" - @echo "... hifringe_app" - @echo "... hidtmgen_app" - @echo "... hicrop_app" - @echo "... hiccdstitch_app" - @echo "... hicalproc_app" - @echo "... hical_app" - @echo "... ctxcal_app" - @echo "... crism2isis_app" - @echo "... mro_unit_test_MarciCamera" - @echo "... mro_unit_test_HiriseCamera" - @echo "... mro_unit_test_CTXCamera" - @echo "... mro" - @echo "... HiriseCamera" - @echo "... CrismCamera" - @echo "... mocuncompress_app" - @echo "... mocproc_app" - @echo "... mocnoise50_app" - @echo "... mocgap_app" - @echo "... moccal_app" - @echo "... mgs_unit_test_MocWideAngleCamera" - @echo "... mgs_unit_test_MocLabels" - @echo "... mdisedrinfo_app" - @echo "... mdis2pds_app" - @echo "... mer2isis_app" - @echo "... mar10restore_app" - @echo "... mar10cal_app" - @echo "... lrowacpho_app" - @echo "... lrowaccal_app" - @echo "... lronacpho_app" - @echo "... lronac2pds_app" - @echo "... lromakeflat_app" - @echo "... hicalbeta_app" - @echo "... MiniRF" - @echo "... LroWideAngleCamera" - @echo "... lo_unit_test_LoMediumCamera" - @echo "... lo_unit_test_LoHighCamera" - @echo "... lo_unit_test_LoCameraFiducialMap" - @echo "... lo" - @echo "... kaguyatc2isis_app" - @echo "... kaguyasp2isis_app" - @echo "... nirs2isis_app" - @echo "... HayabusaNirsCamera" - @echo "... voyramp_app" - @echo "... gllssical_app" - @echo "... dawnfc2isis_app" - @echo "... clemnircal_app" - @echo "... clem2isis_app" - @echo "... LwirCamera" - @echo "... vimscal_app" - @echo "... vims2isis_app" - @echo "... cisscal_app" - @echo "... cassini_unit_test_IssWACamera" - @echo "... vikclean_app" - @echo "... cassini" - @echo "... IssNACamera" - @echo "... apollowarp_app" - @echo "... lorri2isis_app" - @echo "... apolloremrx_app" - @echo "... apollopaninit_app" - @echo "... apollofindrx_app" - @echo "... apollo2isis_app" - @echo "... apollo_unit_test_CentroidApolloPan" - @echo "... ApolloPanoramicCamera" - @echo "... ApolloMetricCamera" - @echo "... kerneldbgen_app" - @echo "... isiscomplete_app" - @echo "... dempack_app" - @echo "... hi2isis_app" - @echo "... csspckgen_app" - @echo "... qtie_app" - @echo "... qnet_app" - @echo "... qmos_app" - @echo "... warp_app" - @echo "... sumspice_app" - @echo "... slither_app" - @echo "... prtloganalyzer_app" - @echo "... jigsaw_app" - @echo "... fplanemap_app" - @echo "... findfeatures_app" - @echo "... coreg_app" - @echo "... cnetwinnow_app" - @echo "... cnetthinner_app" - @echo "... cnetpvl2bin_app" - @echo "... MsiCamera" - @echo "... cnetmerge_app" - @echo "... cnetnewradii_app" - @echo "... cnethist_app" - @echo "... cnetcombinept_app" - @echo "... cnetbin2pvl_app" - @echo "... cnet2mat_app" - @echo "... cnet2dem_app" - @echo "... vicar2isis_app" - @echo "... NewHorizonsMvicFrameCamera" - @echo "... uncrop_app" - @echo "... trim_app" - @echo "... tonematch_app" - @echo "... tabledump_app" - @echo "... cassini_unit_test_VimsCamera" - @echo "... table2cube_app" - @echo "... hideal2pds_app" - @echo "... stretch_app" - @echo "... lrowac2isis_app" - @echo "... apollo" - @echo "... spicefit_app" - @echo "... speclowpass_app" - @echo "... chan1m32isis_app" - @echo "... spechighpass_app" - @echo "... specadd_app" - @echo "... smtk_app" - @echo "... slpmap_app" - @echo "... skypt_app" - @echo "... skymap_app" - @echo "... clemuvviscal_app" - @echo "... sigmastretch_app" - @echo "... shadow_app" - @echo "... shade_app" - @echo "... mar102isis_app" - @echo "... segment_app" - @echo "... pointreg_app" - @echo "... rotate_app" - @echo "... ringspt_app" - @echo "... ringscam2map_app" - @echo "... cnetstats_app" - @echo "... ringsautomos_app" - @echo "... raw2isis_app" - @echo "... autoseed_app" - @echo "... pixel2map_app" - @echo "... thmproc_app" - @echo "... photomet_app" - @echo "... clemnirclean_app" - @echo "... photemplate_app" - @echo "... phohillier_app" - @echo "... thm2isis_app" - @echo "... phoempglobal_app" - @echo "... viknobutter_app" - @echo "... phocube_app" - @echo "... pca_app" - @echo "... pad_app" - @echo "... outline_app" - @echo "... cneteditor_app" - @echo "... noseam_app" - @echo "... mocevenodd_app" - @echo "... mosrange_app" - @echo "... mode_app" - @echo "... minmax_app" - @echo "... median_app" - @echo "... maptrim_app" - @echo "... mappt_app" - @echo "... mapmos_app" - @echo "... socetframesettings_app" - @echo "... apollo_unit_test_ApolloMetricCamera" - @echo "... maplab_app" - @echo "... amicacal_app" - @echo "... map2map_app" - @echo "... hiequal_app" - @echo "... map2cam_app" - @echo "... lowpass_app" - @echo "... lineeq_app" - @echo "... kernfilter_app" - @echo "... isisui_app" - @echo "... isisminer_app" - @echo "... interestcube_app" - @echo "... CTXCamera" - @echo "... ifft_app" - @echo "... hifurrows_app" - @echo "... histmatch_app" - @echo "... highpass_app" - @echo "... mro_unit_test_HiLab" - @echo "... grid_app" - @echo "... greyscale_app" - @echo "... IssWACamera" - @echo "... isis2std_app" - @echo "... gradient_app" - @echo "... getsn_app" - @echo "... getkey_app" - @echo "... footprintmerge_app" - @echo "... thmdriftcor_app" - @echo "... lronaccal_app" - @echo "... footprintinit_app" - @echo "... HiresCamera" - @echo "... fits2isis_app" - @echo "... findimageoverlaps_app" - @echo "... findgaps_app" - @echo "... errors_app" - @echo "... higlob_app" - @echo "... skyrange_app" - @echo "... equalizer_app" - @echo "... edrget_app" - @echo "... VikingCamera" - @echo "... phoemplocal_app" - @echo "... editlab_app" - @echo "... poly_app" - @echo "... dstripe_app" - @echo "... dsk2isis_app" - @echo "... divfilter_app" - @echo "... MdisCamera" - @echo "... desmear_app" - @echo "... demprep_app" - @echo "... ddd2isis_app" - @echo "... cubeit_app" - @echo "... cubeavg_app" - @echo "... messckgen_app" - @echo "... cropspecial_app" - @echo "... KaguyaMiCamera" - @echo "... svfilter_app" - @echo "... crop_app" - @echo "... copylabel_app" - @echo "... circle_app" - @echo "... catlab_app" - @echo "... camtrim_app" - @echo "... isis3_unit_test_MaximumCorrelation" - @echo "... isis3_unit_test_Gruen" - @echo "... isis3_unit_test_LunarLambertMcEwen" - @echo "... isis3_unit_test_Mixed" - @echo "... isis3_unit_test_LunarLambertEmpirical" - @echo "... isis3_unit_test_PolygonSeederFactory" - @echo "... HayabusaAmicaCamera" - @echo "... deltack_app" - @echo "... isis3_unit_test_Longitude" - @echo "... isis3_unit_test_Matrix" - @echo "... isis3_unit_test_CubeInfixToPostfix" - @echo "... qview_app" - @echo "... isis3_unit_test_LineEquation" - @echo "... cosi_app" - @echo "... isis3_unit_test_LambertAzimuthalEqualArea" - @echo "... isis3_unit_test_LineScanCameraSkyMap" - @echo "... isis3_unit_test_JP2Importer" - @echo "... isis3_unit_test_ControlPointList" - @echo "... mimap2isis_app" - @echo "... kaguyami2isis_app" - @echo "... remrx_app" - @echo "... isis3_unit_test_JP2Exporter" - @echo "... cnettable_app" - @echo "... isis3_unit_test_JP2Error" - @echo "... leisa2isis_app" - @echo "... isis3_unit_test_Isis" - @echo "... spkwriter_app" - @echo "... isis3_unit_test_MinnaertEmpirical" - @echo "... isis3_unit_test_Intercept" - @echo "... ringsmappt_app" - @echo "... isis3_unit_test_BandManager" - @echo "... isis3_unit_test_InfixToPostfix" - @echo "... isis3_unit_test_Planar" - @echo "... isis3_unit_test_ImportPdsTable" - @echo "... mro_unit_test_CrismCamera" - @echo "... isis3_unit_test_Resource" - @echo "... UvvisCamera" - @echo "... cnetdiff_app" - @echo "... cubeatt_app" - @echo "... isis3_unit_test_ImageImporter" - @echo "... makecube_app" - @echo "... isis2fits_app" - @echo "... Mercator" - @echo "... UpturnedEllipsoidTransverseAzimuthal" - @echo "... isis3_unit_test_SerialNumberList" - @echo "... isis3_unit_test_ImageExporter" - @echo "... DawnFcCamera" - @echo "... apollocal_app" - @echo "... isis3_unit_test_ImageOverlapSet" - @echo "... isis3_unit_test_UpturnedEllipsoidTransverseAzimuthal" - @echo "... hirdr2isis_app" - @echo "... isis3_unit_test_IdealCamera" - @echo "... isis3_unit_test_ProcessExportPds" - @echo "... isis3_unit_test_IException" - @echo "... isis3_unit_test_HapkeAtm1" - @echo "... mar10clean_app" - @echo "... isis3_unit_test_Gui" - @echo "... thmnoseam_app" - @echo "... fx_app" - @echo "... isis3_unit_test_Ransac" - @echo "... RosettaOsirisCamera" - @echo "... isis3_unit_test_Histogram" - @echo "... isis3_unit_test_GroupedStatistics" - @echo "... apollo_unit_test_Apollo" - @echo "... isis3_unit_test_GaussianStretch" - @echo "... isis3_unit_test_GroundGrid" - @echo "... isis3_unit_test_GSLUtility" - @echo "... isis3_unit_test_FramingCamera" - @echo "... isis3_unit_test_Stretch" - @echo "... isis3_unit_test_FileName" - @echo "... SsiCamera" - @echo "... isis3_unit_test_Isotropic2" - @echo "... NewHorizonsMvicTdiCamera" - @echo "... mrf2pds_app" - @echo "... isis3_unit_test_Pipeline" - @echo "... mask_app" - @echo "... isis3_unit_test_FileList" - @echo "... isis3_unit_test_HapkeAtm2" - @echo "... algebra_app" - @echo "... isis3_unit_test_Isotropic1" - @echo "... isis3_unit_test_InlineInfixToPostfix" - @echo "... bit2bit_app" - @echo "... isis3_unit_test_ExportPdsTable" - @echo "... isis3_unit_test_PrincipalComponentAnalysis" - @echo "... isis3_unit_test_Equirectangular" - @echo "... isis3_unit_test_TopoAtm" - @echo "... isis3_unit_test_Environment" - @echo "... isis3_unit_test_Enlarge" - @echo "... isis3_unit_test_OverlapNormalization" - @echo "... himos_app" - @echo "... StandardDeviationOperator" - @echo "... isis3_unit_test_SessionLog" - @echo "... makeflat_app" - @echo "... isis3_unit_test_LunarLambert" - @echo "... isis3_unit_test_Distance" - @echo "... isis3_unit_test_Displacement" - @echo "... isis3_unit_test_JP2Encoder" - @echo "... cassini_unit_test_CisscalFile" - @echo "... isis3_unit_test_ImageOverlap" - @echo "... isis3_unit_test_DemShape" - @echo "... trimfilter_app" - @echo "... MoonAlbedo" - @echo "... isis3_unit_test_GisBlob" - @echo "... noisefilter_app" - @echo "... isis3_unit_test_CubeManager" - @echo "... lo2isis_app" - @echo "... isis3_unit_test_AutoReg" - @echo "... isis3_unit_test_Stereo" - @echo "... LunarLambertEmpirical" - @echo "... isis3_unit_test_Latitude" - @echo "... isis3_unit_test_MaximumLikelihoodWFunctions" - @echo "... LoMediumCamera" - @echo "... isis3_unit_test_Constants" - @echo "... isis3_unit_test_EmbreeShapeModel" - @echo "... NoOperator" - @echo "... isis3_unit_test_IString" - @echo "... ThemisIrCamera" - @echo "... isis3_unit_test_Column" - @echo "... MarciCamera" - @echo "... cnetadd_app" - @echo "... isis3_unit_test_CollectorMap" - @echo "... HrscCamera" - @echo "... MoravecOperator" - @echo "... hicolormos_app" - @echo "... isis3_unit_test_CSVReader" - @echo "... isis3_unit_test_Interpolator" - @echo "... isis3_unit_test_SpectralDefinition" - @echo "... StripPolygonSeeder" - @echo "... isis3_unit_test_MosaicSceneWidget" - @echo "... explode_app" - @echo "... ObliqueCylindrical" - @echo "... LunarLambertMcEwen" - @echo "... PolarStereographic" - @echo "... MocNarrowAngleCamera" - @echo "... PointPerspective" - @echo "... mical_app" - @echo "... isis3_unit_test_TransverseMercator" - @echo "... LoHighCamera" - @echo "... AdaptiveGruen" - @echo "... isis3_unit_test_Spice" - @echo "... LambertAzimuthalEqualArea" - @echo "... mirror_app" - @echo "... isis3_unit_test_History" - @echo "... rosvirtis2isis_app" - @echo "... isis3_unit_test_MinimumDifference" - @echo "... isis3_unit_test_ProcessByTile" - @echo "... isis3_unit_test_PvlTokenizer" - @echo "... thmvistrim_app" - @echo "... MocWideAngleCamera" - @echo "... mdisproc_app" - @echo "... Planar" - @echo "... hijitreg_app" - @echo "... MaximumCorrelation" - @echo "... Hapke" - @echo "... isis3_unit_test_PvlFormatPds" - @echo "... cnetsplit_app" - @echo "... TransverseMercator" - @echo "... ciss2isis_app" - @echo "... isis3_unit_test_Cube" - @echo "... isis3_unit_test_AdaptiveGruen" - @echo "... cubenorm_app" - @echo "... isis3_unit_test_Chip" - @echo "... isis3_unit_test_ExportDescription" - @echo "... appjit_app" - @echo "... ckwriter_app" - @echo "... ForstnerOperator" - @echo "... Lambert" - @echo "... mrf2isis_app" - @echo "... isis3_unit_test_Spectel" - @echo "... isis3_unit_test_Topo" - @echo "... isis3_unit_test_Equalization" - @echo "... isis3_unit_test_Hillshade" - @echo "... DawnVirCamera" - @echo "... Sinusoidal" - @echo "... isis3_unit_test_Projection" - @echo "... isis3_unit_test_RadarGroundMap" - @echo "... cathist_app" - @echo "... LommelSeeliger" - @echo "... isis3_unit_test_SimpleCylindrical" - @echo "... isis3_unit_test_GisTopology" - @echo "... HapkeAtm1" - @echo "... isis3_unit_test_Message" - @echo "... isis3_unit_test_DatabaseFactory" - @echo "... rolo2isis_app" - @echo "... LroNarrowAngleCamera" - @echo "... isis3_unit_test_FunctionTools" - @echo "... noproj_app" - @echo "... isis3_unit_test_Minnaert" - @echo "... mat2cnet_app" - @echo "... camrange_app" - @echo "... Orthographic" - @echo "... camstats_app" - @echo "... isis3_unit_test_ObliqueCylindrical" - @echo "... NirCamera" - @echo "... RingCylindrical" - @echo "... isis3_unit_test_LimitPolygonSeeder" - @echo "... clemnirnoise_app" - @echo "... isis3_unit_test_CameraDistortionMap" - @echo "... isis3_unit_test_SpectralDefinition1D" - @echo "... lronacecho_app" - @echo "... overlapstats_app" - @echo "... isis3_unit_test_ControlGraph" - @echo "... vdcomp_app" - @echo "... isis3_unit_test_ProcessImport" - @echo "... messspkgen_app" - @echo "... isis3_unit_test_Endian" - @echo "... isis3_unit_test_Application" - @echo "... isis3_unit_test_QtExporter" - @echo "... isis3_unit_test_Kernels" - @echo "... isis3_unit_test_TiffImporter" - @echo "... isis3_unit_test_CubeCalculator" - @echo "... isis3_unit_test_CameraDetectorMap" - @echo "... flip_app" - @echo "... LambertConformal" - @echo "... lrowac2pds_app" - @echo "... isis3_unit_test_GisGeometry" - @echo "... amica2isis_app" - @echo "... isis3_unit_test_PvlSequence" - @echo "... isis3_unit_test_Quaternion" - @echo "... isis3_unit_test_EllipsoidShape" - @echo "... GridPolygonSeeder" - @echo "... maptemplate_app" - @echo "... decorstretch_app" - @echo "... isis3_unit_test_LineScanCamera" - @echo "... cassini_unit_test_CissLabels" - @echo "... isis3_unit_test_FilterCachingAlgorithm" - @echo "... SimpleCylindrical" - @echo "... isis3_unit_test_AtmosModel" - @echo "... mvic2isis_app" - @echo "... lronac2isis_app" - @echo "... isis3_unit_test_BasisFunction" - @echo "... AlbedoAtm" - @echo "... catoriglab_app" - @echo "... isis3_unit_test_AlphaCube" - @echo "... isis3_unit_test_JP2Decoder" - @echo "... Topo" - @echo "... Equirectangular" - @echo "... Shade" - @echo "... isis3_unit_test_InlineCalculator" - @echo "... isis3_unit_test_Process" - @echo "... viknopepper_app" - @echo "... isis3_unit_test_UserInterface" - @echo "... isis3_unit_test_ID" - @echo "... GradientOperator" - @echo "... isis3_unit_test_PolygonSeeder" - @echo "... pds2isis_app" - @echo "... IdealCamera" - @echo "... isis3_unit_test_LambertConformal" - @echo "... isis3_unit_test_Shade" - @echo "... isis3_unit_test_EmbreeTargetShape" - @echo "... voy2isis_app" - @echo "... Mixed" - @echo "... isis3_unit_test_CameraPointInfo" - @echo "... isis3_unit_test_StandardDeviationOperator" - @echo "... isis3_unit_test_LommelSeeliger" - @echo "... ShadeAtm" - @echo "... thmbasemap1_app" - @echo "... isis3_unit_test_NaifStatus" - @echo "... handmos_app" - @echo "... isis3_unit_test_BundleUtilities" - @echo "... isis3_unit_test_EmbreeTargetManager" - @echo "... pvldiff_app" - @echo "... isis3_unit_test_CorrelationMatrix" - @echo "... isis3_unit_test_ImagePolygon" - @echo "... LunarAzimuthalEqualArea" - @echo "... isis3_unit_test_LinearAlgebra" - @echo "... isis3_unit_test_CameraFactory" - @echo "... LunarLambert" - @echo "... hrsc2isis_app" - @echo "... isis3_unit_test_BoxcarManager" - @echo "... TopoAtm" - @echo "... hsv2rgb_app" - @echo "... Isotropic1" - @echo "... isis3_unit_test_PolygonTools" - @echo "... mgs_unit_test_MocNarrowAngleSumming" - @echo "... isis3_unit_test_CameraSkyMap" - @echo "... moc2isis_app" - @echo "... isis3_unit_test_CubeDataThread" - @echo "... isis3_unit_test_LineManager" - @echo "... isis3_unit_test_CameraFocalPlaneMap" - @echo "... isis3_unit_test_StatCumProbDistDynCalc" - @echo "... isis3_unit_test_RadarGroundRangeMap" - @echo "... isis3_unit_test_CameraGroundMap" - @echo "... voycal_app" - @echo "... isis3_unit_test_Affine" - @echo "... isis3_unit_test_ControlCubeGraphNode" - @echo "... isis3_unit_test_Albedo" - @echo "... isis3_unit_test_CameraStatistics" - @echo "... pds2hideal_app" - @echo "... isis3_unit_test_NaifDskApi" - @echo "... isis2pds_app" - @echo "... isis3_unit_test_Selection" - @echo "... isis3_unit_test_Angle" - @echo "... Mariner10Camera" - @echo "... isis3_unit_test_GaussianDistribution" - @echo "... MinimumDifference" - @echo "... isis3_unit_test_Anisotropic2" - @echo "... isis3_unit_test_Area3D" - @echo "... isis3_unit_test_GradientOperator" - @echo "... cnetcheck_app" - @echo "... percent_app" - @echo "... isis3_unit_test_AlbedoAtm" - @echo "... isis3" - @echo "... NewHorizonsLeisaCamera" - @echo "... isis3_unit_test_PushFrameCameraGroundMap" - @echo "... isis3_unit_test_BufferManager" - @echo "... isis3_unit_test_CubeAttribute" - @echo "... gaussstretch_app" - @echo "... MinnaertEmpirical" - @echo "... hicubeit_app" - @echo "... lopdsgen_app" - @echo "... cnetedit_app" - @echo "... isis3_unit_test_Kernel" - @echo "... fillgap_app" - @echo "... isis3_unit_test_Basis1VariableFunction" - @echo "... cassini_unit_test_IssNACamera" - @echo "... isis3_unit_test_Blobber" - @echo "... VimsCamera" - @echo "... cnetref_app" - @echo "... specpix_app" - @echo "... isis3_unit_test_BoxcarCachingAlgorithm" - @echo "... ctxevenodd_app" - @echo "... isis3_unit_test_Calculator" - @echo "... isis3_unit_test_EquatorialCylindricalShape" - @echo "... spiceinit_app" - @echo "... photrim_app" - @echo "... Robinson" - @echo "... deriv_app" - @echo "... isis3_unit_test_Brick" - @echo "... isis3_unit_test_Buffer" - @echo "... isis3_unit_test_ControlNetVersioner" - @echo "... isis3_unit_test_Anisotropic1" - @echo "... isis3_unit_test_LineScanCameraDetectorMap" - @echo "... shadowtau_app" - @echo "... Anisotropic1" - @echo "... isis3_unit_test_AtmosModelFactory" - @echo "... isis3_unit_test_Blob" - @echo "... isis3_unit_test_SpicePosition" - @echo "... isis3_unit_test_BundleSolutionInfo" - @echo "... gauss_app" - @echo "... isis3_unit_test_BulletDskShape" - @echo "... cubediff_app" - @echo "... Minnaert" - @echo "... isis3_unit_test_BulletShapeModel" - @echo "... std2isis_app" - @echo "... isis3_unit_test_TileManager" - @echo "... isis3_unit_test_BulletTargetShape" - @echo "... caminfo_app" - @echo "... isis3_unit_test_Camera" - @echo "... Mollweide" - @echo "... isis3_unit_test_Centroid" - @echo "... isis3_unit_test_PixelFOV" - @echo "... isis3_unit_test_Mollweide" - @echo "... isis3_unit_test_MoonAlbedo" - @echo "... isis3_unit_test_FourierTransform" - @echo "... isis3_unit_test_NaifDskShape" - @echo "... isis3_unit_test_SpectralDefinition2D" - @echo "... dawnvir2isis_app" - @echo "... Chandrayaan1M3Camera" - @echo "... ratio_app" - @echo "... isis3_unit_test_NoNormalization" - @echo "... isis3_unit_test_NoOperator" - @echo "... isis3_unit_test_TProjection" - @echo "... apollo_unit_test_ApolloPanoramicCamera" - @echo "... isis3_unit_test_NormModel" - @echo "... isis3_unit_test_NormModelFactory" - @echo "... stats_app" - @echo "... isis3_unit_test_LeastSquares" - @echo "... isis3_unit_test_Sensor" - @echo "... isis3_unit_test_NumericalApproximation" - @echo "... hicubenorm_app" - @echo "... isis3_unit_test_Lambert" - @echo "... isis3_unit_test_PixelType" - @echo "... isis3_unit_test_TableRecord" - @echo "... isis3_unit_test_SubArea" - @echo "... socetlinescankeywords_app" - @echo "... blobdump_app" - @echo "... isis3_unit_test_ObservationNumber" - @echo "... isis3_unit_test_ObservationNumberList" - @echo "... isis3_unit_test_Orthographic" - @echo "... NewHorizonsLorriCamera" - @echo "... mdiscal_app" - @echo "... isis3_unit_test_OverlapStatistics" - @echo "... isis3_unit_test_Parabola" - @echo "... isis3_unit_test_PhotoModel" - @echo "... isis3_unit_test_RadialDistortionMap" - @echo "... viknosalt_app" - @echo "... isis3_unit_test_PhotoModelFactory" - @echo "... cnetextract_app" - @echo "... isis3_unit_test_ProcessByQuickFilter" - @echo "... isis3_unit_test_SqlRecord" - @echo "... isis3_unit_test_Photometry" - @echo "... isis3_unit_test_Pixel" - @echo "... isis3_unit_test_PlaneShape" - @echo "... isis3_unit_test_Plugin" - @echo "... isis3_unit_test_PointPerspective" - @echo "... isis3_unit_test_ControlNetStatistics" - @echo "... isis3_unit_test_ShapeModel" - @echo "... isis3_unit_test_CubeCachingAlgorithm" - @echo "... isis3_unit_test_ProcessRubberSheet" - @echo "... isis3_unit_test_EndianSwapper" - @echo "... isis3_unit_test_PolynomialBivariate" - @echo "... isis3_unit_test_Robinson" - @echo "... isis3_unit_test_PolynomialUnivariate" - @echo "... isis3_unit_test_Target" - @echo "... isis3_unit_test_BundleSettings" - @echo "... isis3_unit_test_RingCylindrical" - @echo "... Anisotropic2" - @echo "... isis3_unit_test_Portal" - @echo "... isis3_unit_test_Preference" - @echo "... isis3_unit_test_ProcessByBoxcar" - @echo "... histeq_app" - @echo "... isis3_unit_test_ProcessByBrick" - @echo "... isis3_unit_test_ProcessBySample" - @echo "... isis2gml_app" - @echo "... isis3_unit_test_ProcessBySpectra" - @echo "... blend_app" - @echo "... findrx_app" - @echo "... isis3_unit_test_ProcessExport" - @echo "... cam2map_app" - @echo "... isis3_unit_test_Hapke" - @echo "... isis3_unit_test_ProcessExportPds4" - @echo "... kuwahara_app" - @echo "... isis3_unit_test_ProcessGroundPolygons" - @echo "... isis3_unit_test_ProcessImportFits" - @echo "... isis3_unit_test_OriginalLabel" - @echo "... isis3_unit_test_PolarStereographic" - @echo "... isis3_unit_test_ProcessImportPds" - @echo "... specdivfilter_app" - @echo "... isis3_unit_test_WorldMapper" - @echo "... clemhirescal_app" - @echo "... isis3_unit_test_ProcessImportVicar" - @echo "... isis3_unit_test_DbAccess" - @echo "... isis3_unit_test_ProcessMapMosaic" - @echo "... isis3_unit_test_ProcessMosaic" - @echo "... isis3_unit_test_ProcessPolygons" - @echo "... isis3_unit_test_ProgramLauncher" - @echo "... kaguyasp2ascii_app" - @echo "... mvstats_app" - @echo "... isis3_unit_test_PushFrameCamera" - @echo "... isis3_unit_test_TriangularPlate" - @echo "... hidestripe_app" - @echo "... center_app" - @echo "... isis3_unit_test_AutoRegFactory" - @echo "... isis3_unit_test_MoravecOperator" - @echo "... isis3_unit_test_PushFrameCameraDetectorMap" - @echo "... isis3_unit_test_Pvl" - @echo "... isis3_unit_test_PvlContainer" - @echo "... fft_app" - @echo "... isis3_unit_test_PvlEditDialog" - @echo "... LimitPolygonSeeder" - @echo "... isis3_unit_test_PvlFlatMap" - @echo "... isis3_unit_test_PvlFormat" - @echo "... vikfixtrx_app" - @echo "... NoNormalization" - @echo "... isis3_unit_test_RingPlaneProjection" - @echo "... nocam2map_app" - @echo "... isis3_unit_test_PvlGroup" - @echo "... isis3_unit_test_AbstractPlate" - @echo "... isis3_unit_test_PvlKeyword" - @echo "... isis3_unit_test_PvlObject" - @echo "... isis3_unit_test_PvlToPvlTranslationManager" - @echo "... sharpen_app" - @echo "... isis3_unit_test_PvlToXmlTranslationManager" - @echo "... isis3_unit_test_LunarAzimuthalEqualArea" - @echo "... isis3_unit_test_PvlToken" - @echo "... isis3_unit_test_BulletWorldManager" - @echo "... isis3_unit_test_PvlTranslationTable" - @echo "... isis3_unit_test_SurfaceModel" - @echo "... Albedo" - @echo "... isis3_unit_test_InterestOperator" - @echo "... desmile_app" - @echo "... isis3_unit_test_QtImporter" - @echo "... isis3_unit_test_QuickFilter" - @echo "... isis3_unit_test_RadarPulseMap" - @echo "... isis3_unit_test_Reduce" - @echo "... isis3_unit_test_ControlNetFilter" - @echo "... cubefunc_app" - @echo "... isis3_unit_test_RadarSkyMap" - @echo "... barscale_app" - @echo "... isis3_unit_test_OriginalXmlLabel" - @echo "... isis3_unit_test_RadarSlantRangeMap" - @echo "... isis3_unit_test_ReseauDistortionMap" - @echo "... rgb2hsv_app" - @echo "... enlarge_app" - @echo "... isis3_unit_test_AbstractShape" - @echo "... isis3_unit_test_SerialNumber" - @echo "... isis3_unit_test_ShadeAtm" - @echo "... reduce_app" - @echo "... isis3_unit_test_ShapeModelFactory" - @echo "... isis2raw_app" - @echo "... isis3_unit_test_ProcessByLine" - @echo "... isis3_unit_test_Sinusoidal" - @echo "... isis3_unit_test_SmtkMatcher" - @echo "... translate_app" - @echo "... isis3_unit_test_SparseBlockMatrix" - @echo "... spiceserver_app" - @echo "... isis3_unit_test_Color" - @echo "... isis3_unit_test_SpecialPixel" - @echo "... isis3_unit_test_Statistics" - @echo "... isis3_unit_test_SampleManager" - @echo "... isis3_unit_test_Strategy" - @echo "... mar10nonoise_app" - @echo "... Isotropic2" - @echo "... isis3_unit_test_StreamExporter" - @echo "... isis3_unit_test_SurfacePoint" - @echo "... isis3_unit_test_Table" - @echo "... isis3_unit_test_SpiceRotation" - @echo "... isis3_unit_test_TableField" - @echo "... seedgrid_app" - @echo "... isis3_unit_test_ProjectionFactory" - @echo "... isis3_unit_test_TextFile" - @echo "... isis3_unit_test_TiffExporter" - @echo "... mro_unit_test_HiEqualization" - @echo "... isis3_unit_test_InterestOperatorFactory" - @echo "... gllssi2isis_app" - @echo "... isis3_unit_test_LineScanCameraGroundMap" - @echo "... isis3_unit_test_IsisAml" - @echo "... isis3_unit_test_Transform" - @echo "... isis3_unit_test_UniqueIOCachingAlgorithm" - @echo "... isis3_unit_test_UniversalGroundMap" - @echo "... isis3_unit_test_VariableLineScanCameraDetectorMap" - @echo "... isis3_unit_test_VecFilter" - @echo "... fakecube_app" - @echo "... isis3_unit_test_XmlStackedHandler" - @echo "... isis2ascii_app" - @echo "... isis3_unit_test_XmlStackedHandlerReader" - @echo "... mapgrid_app" - @echo "... isis3_unit_test_StripPolygonSeeder" - @echo "... isis3_unit_test_XmlToPvlTranslationManager" - @echo "... isis3_unit_test_Progress" - @echo "... isis3_unit_test_iTime" - @echo "... isis3_unit_test_KernelDb" - @echo "... gllnims2isis_app" - @echo "... isis3_unit_test_Database" - @echo "... mdisddr_app" - @echo "... HapkeAtm2" - @echo "... isis3_unit_test_DbProfile" - @echo "... isis3_unit_test_SpectralDefinitionFactory" - @echo "... isis3_unit_test_SqlQuery" - @echo "... mgs" - @echo "... isis3_unit_test_RadarCamera" - @echo "... isis3_unit_test_BundleAdjust" - @echo "... isis3_unit_test_ForstnerOperator" - @echo "... isis3_unit_test_BundleResults" - @echo "... mgs_unit_test_MocNarrowAngleCamera" - @echo "... apollopanstitcher_app" - @echo "... bandnorm_app" - @echo "... mdis2isis_app" - @echo "... isis3_unit_test_MultivariateStatistics" - @echo "... isis3_unit_test_ControlMeasure" - @echo "... marciflip_app" - @echo "... isis3_unit_test_ControlMeasureLogData" - @echo "... isis3_unit_test_ControlNet" - @echo "... isis3_unit_test_Mercator" - @echo "... isis3_unit_test_NaifDskPlateModel" - @echo "... isis3_unit_test_ControlNetDiff" - @echo "... isis3_unit_test_LabelTranslationManager" - @echo "... isis3_unit_test_ControlNetValidMeasure" - @echo "... isis3_unit_test_GridPolygonSeeder" - @echo "... isis3_unit_test_ControlPoint" - @echo "... ascii2isis_app" - @echo "... hist_app" - @echo "... isis3_unit_test_PushFrameCameraCcdLayout" - @echo "... automos_app" - @echo "... autoregtemplate_app" - @echo "... bandtrim_app" - @echo "... msi2isis_app" - @echo "... butterworth_app" - @echo "... mapsize_app" - @echo "... cam2cam_app" - @echo "... campt_app" -.PHONY : help - - - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - + echo $(CURTIMESTAMP) "Cleaning Isis"; \ + $(MAKE) cleansrc; \ + rm -rf inc; \ + rm -rf doc; \ + rm -rf bin; \ + rm -rf lib; \ + rm -rf scripts/tabcomplete.csh; \ + rm -rf scopecoverage scopecoverage.html linecoverage linecoverage.html \ + functioncoverage functioncoverage.html *.csmes *.csexe; \ + $(MAKE) --directory=3rdParty clean; \ + echo $(CURTIMESTAMP) "Finished cleaning Isis"; + +cleansrc: + $(MAKE) --directory=src clean + +tabcomplete: + if [ ! -d bin ]; then \ + echo $(CURTIMESTAMP) "You must build the applications first"; \ + elif [ ! -f bin/isiscomplete ]; then \ + echo $(CURTIMESTAMP) "Isis application 'isiscomplete' is missing"; \ + else \ + echo "#!/bin/csh" > $$ISISROOT/scripts/tabcomplete.csh; \ + isiscomplete `ls $$ISISROOT/bin | grep -v xml` | sed 's/; /;~/g' | \ + tr '~' '\n' > $$ISISROOT/scripts/tabcomplete.csh; \ + fi; + +#---------------------------------------------------------------------------- +# Target = unitTest appTest appTest2 catTest +# Dependencies = none +# +# This target traverses both the objs and apps directories. In the object +# directories it will build the unitTest executable, run it, and difference +# the results with the unitTest truth data. In the application directories +# it will run the appTest script to ensure the program generates the proper +# output data (whether it be a cube, text file, postscript file, etc) +#---------------------------------------------------------------------------- +unitTest: + echo $(CURTIMESTAMP) "Testing Isis API" + $(MAKE) --directory=src unitTest + echo $(CURTIMESTAMP) "Finished testing Isis API" + +appTest: + echo $(CURTIMESTAMP) "Testing Isis Applications version 2" + $(MAKE) --directory=src appTest + echo $(CURTIMESTAMP) "Finished testing Isis Applications version 2" + +catTest: + echo $(CURTIMESTAMP) "Testing Isis Category" + $(MAKE) --directory=src catTest + echo $(CURTIMESTAMP) "Finished testing Isis Category" + +#---------------------------------------------------------------------------- +# Target = thirdParty +# Dependencies = none +# +# This target is used only for external distributions that do not have +# the need to program. As a convenience we provide the shared libraries +# for 3rdParty packages used in ISIS so that external customers do +# not have to download and install RPMs. +#---------------------------------------------------------------------------- +HOST_ARCH ?= $(shell uname -s) +HOST_MACH ?= $(shell uname -m) + +thirdParty: + echo $(CURTIMESTAMP) "Installing 3rdParty libraries" + rm -f $(ISISROOT)/3rdParty/lib/lib* + $(MAKE) -C $(ISISROOT)/3rdParty install + echo $(CURTIMESTAMP) "Finished installing 3rdParty libraries" + echo $(CURTIMESTAMP) " " + + +#---------------------------------------------------------------------------- +# Use to see values of variables +# Example: make print-HOST_OS +# Will print the make variable HOST_OS +#---------------------------------------------------------------------------- +#print-% : +# @echo '$* = $($*)' + +#---------------------------------------------------------------------------- +# Standard make FORCE target. Do not remove unless you know what you are doing +#---------------------------------------------------------------------------- + +FORCE: + +#---------------------------------------------------------------------------- +# Include the make file debugging targets +#---------------------------------------------------------------------------- +include $(ISISROOT)/make/isismake.print diff --git a/isis/src/Makefile b/isis/src/Makefile index 150207051b..1652458951 100644 --- a/isis/src/Makefile +++ b/isis/src/Makefile @@ -7,7 +7,7 @@ else .NOTPARALLEL: endif -PACKAGES = $(filter-out Makefile docsys CVS IsisObjectConvert.xsl, $(wildcard *)) +PACKAGES = $(filter-out Makefile CMakeLists.txt docsys CVS IsisObjectConvert.xsl, $(wildcard *)) PACKAGESCLEAN := $(PACKAGES:%=%-clean) PACKAGESQUICKCLEAN := $(PACKAGES:%=%-quickclean) @@ -21,7 +21,7 @@ PACKAGESCATTEST := $(filter-out qisis-catTest, $(PACKAGES:%=%-catTest)) # Allow parallel builds of applications applications: $(PACKAGESAPPS) - + %-apps: PACKAGE=`$(ECHO) $@ | $(SED) 's/-apps//'`; \ echo $(CURTIMESTAMP) " Working on Package [$$PACKAGE]"; \ -- GitLab From 08140e3e14b266f32a3a85c9b9f2ffed2fa5a1db Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Wed, 21 Mar 2018 10:28:20 -0700 Subject: [PATCH 129/620] Copied TestPreferences to ISIS source root --- isis/TestPreferences | 216 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 isis/TestPreferences diff --git a/isis/TestPreferences b/isis/TestPreferences new file mode 100644 index 0000000000..47a0bf8cad --- /dev/null +++ b/isis/TestPreferences @@ -0,0 +1,216 @@ +####################################################### +# This file allows the user to customize their Isis +# configuration. See the Isis Preference Dictionary +# on our website isis.astrogeology.usgs.gov for a +# full description of each group. +######################################################## + +######################################################## +# Customize elements of the user interface +# +# ProgressBarPercent = 1 | 2 | 5 | 10 +# ProgressBar = On | Off +# GuiStyle = windows | motif | cde | motifplus | +# platinum | sgi | kde | aqua +# GuiHelpBrowser = { your preferred browser, may need path } +# GuiFontName = helvetica | times | charter | any legal font +# GuiFontSize = 10 | 12 | 14 | any font point size +# HistoryPath = { your preferred loaction for the application +# .par files } +# HistoryRecording = On | Off +# HistoryLength = (your preferred count of history entries +# to remember) +######################################################## + +Group=UserInterface + ProgressBarPercent = 10 + ProgressBar = Off + GuiHelpBrowser = firefox + GuiFontName = helvetica + GuiFontSize = 10 + GuiWidth = 460 + GuiHeight = 600 + HistoryPath = $HOME/.Isis/history + HistoryRecording = On + HistoryLength = 10 +EndGroup + +######################################################## +# Customize how errors are reported +# +# FileLine = On | Off +# Format = Standard | Pvl +# StackTrace = On | Off +######################################################## + +Group = ErrorFacility + FileLine = Off + Format = Standard + StackTrace = Off +EndGroup + +######################################################## +# Specify which ray-tracing engine to use for shape +# models. +# +# Leave the ShapeModel Group commented-out to continue +# using the ISIS3 default. +# +# RayTraceEngine = Bullet | Embree +# OnError = Continue | Fail +# Tolerance = { numerical value that will be set as the +# tolerance for the Bullet or Embree shape +# model } +# +######################################################## + +#Group = ShapeModel +# RayTraceEngine = Embree +# OnError = Continue +# CubeSupported = False +# Tolerance = DBL_MAX +#EndGroup + +######################################################## +# Customize how session logging is handled +# +# TerminalOutput = On | Off +# On - in command-line mode - user input parameters, +# results, and accounting are +# reported to the terminal. +# Errors are reported in Pvl +# also to the terminal. +# - in interactive mode - same as command-line +# mode, but output is directed +# to the gui. In the case of +# an error, nothing is reported +# to the gui except a pop-up +# window displaying the error. +# Off - in command-line mode - only the results are +# reported to the terminal, or +# in the case of an error, +# the error is reported in Pvl +# to the terminal. +# - in interactive mode - same as command-line mode, +# but the error is reported in +# a pop-up window in the gui. +# FileOutput = On | Off +# FileName = print.prt | /mydirectory/myfile.prt +# FileAccess = Append | Overwrite +######################################################## + +Group = SessionLog + TerminalOutput = Off + FileOutput = On + FileName = print.prt + FileAccess = Append +EndGroup + +######################################################## +# Customize how cubes are created +# +# Overwrite = Error | Allow +# Format = Attached | Detached +# History = On | Off +# MaximumSize = max # of gigabytes +######################################################## + +Group = CubeCustomization + Overwrite = Allow + Format = Attached + History = On + MaximumSize = 12 +EndGroup + +######################################################## +# Customize how other files are created +# +# Overwrite = Error | Allow +# +# If Error, then overwrites of any non-cube +# file will be disallowed and an error will be thrown +######################################################## + +Group = FileCustomization + Overwrite = Allow +EndGroup + +######################################################## +# Customize how Isis uses your computer's resources. +# +# CubeWriteThread = Always | Optimized | Never +# Always - Override Isis program defaults and always +# use a separate thread for writing out cubes. This +# will probably improve performance for some +# programs, will probably negatively impact programs +# that read/write the same file. This option should +# be used with caution. +# Optimized - Let the Isis program decide based on +# it's own internal knowledge. +# Never - Revert to the original method of writing +# cubes always. +# +# GlobalThreads = Optimized | N +# Optimized - The number of global (active processing) +# threads used will match the current system's number +# of CPU cores. +# N - +# Global (processing threads) encapsulate most of Isis' +# CPU-intensive operations. This should be a +# positive whole number greater than 0. This number +# does not cull the number of other thread-types in +# Isis, for example the cube write thread, but it +# should fairly accurately reflect overall potential +# CPU usage in Isis. +######################################################## +Group = Performance + CubeWriteThread = Optimized + GlobalThreads = Optimized +EndGroup + +######################################################## +# Customize the location of mission specific data +# files (calibration and spice kernels). Usually this +# should be left to the Isis administrator +######################################################## + +Group = DataDirectory + Apollo15 = $ISIS3DATA/apollo15 + Apollo16 = $ISIS3DATA/apollo16 + Apollo17 = $ISIS3DATA/apollo17 + Base = $ISIS3DATA/base + Cassini = $ISIS3DATA/cassini + Chan1 = $ISIS3DATA/chan1 + Chandrayaan1 = $ISIS3DATA/chandrayaan1 + Clementine1 = $ISIS3DATA/clementine1 + Control = $ISIS3DATA/control + Dawn = $ISIS3DATA/dawn + Galileo = $ISIS3DATA/galileo + Hayabusa = $ISIS3DATA/hayabusa + Hayabusa2 = $ISIS3DATA/hayabusa2 + Juno = $ISIS3DATA/juno + Kaguya = $ISIS3DATA/kaguya + Lo = $ISIS3DATA/lo + Lro = $ISIS3DATA/lro + Mariner10 = $ISIS3DATA/mariner10 + Mer = $ISIS3DATA/mer + Mex = $ISIS3DATA/mex + Messenger = $ISIS3DATA/messenger + Mgs = $ISIS3DATA/mgs + Mro = $ISIS3DATA/mro + Near = $ISIS3DATA/near + NewHorizons = $ISIS3DATA/newhorizons + Odyssey = $ISIS3DATA/odyssey + OsirisRex = $ISIS3DATA/../datalocal/osirisrex + Rolo = $ISIS3DATA/rolo + Rosetta = $ISIS3DATA/rosetta + Smart1 = $ISIS3DATA/smart1 + Tgo = $ISIS3DATA/tgo + Viking1 = $ISIS3DATA/viking1 + Viking2 = $ISIS3DATA/viking2 + Voyager1 = $ISIS3DATA/voyager1 + Voyager2 = $ISIS3DATA/voyager2 + Temporary = . +EndGroup + +End -- GitLab From ad6399888adc510f7349e14b53ad7aa741f2d7c8 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 13:48:02 -0700 Subject: [PATCH 130/620] fixed rpath issues for conda --- isis/CMakeLists.txt | 8 +- isis/cmake/AddIsisModule.cmake | 2 - isis/cmake/FindAllDependencies.cmake | 2 - isis/cmake/FindOpenGL.cmake | 8 +- isis/cmake/InstallThirdParty.cmake | 6 - isis/cmake/RunMakeFileTest.cmake | 2 +- isis/scripts/finalizeInstalledOsxRpaths.py | 240 ++++++++++----------- isis/scripts/fixOsxRpaths.py | 216 +++++++++---------- 8 files changed, 236 insertions(+), 248 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index bcc49036b0..434bb834a0 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -100,7 +100,7 @@ else() endif() if(develop) - + endif() if(${testOutputDir} STREQUAL "OFF") @@ -150,11 +150,11 @@ set(CORE_LIB_NAME isis3) # Specify relative library include paths which will be set up on # the installed files. if(APPLE) - set(CMAKE_INSTALL_RPATH "@loader_path/../lib;@loader_path/../3rdParty/lib") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};@loader_path/../lib;@loader_path/../3rdParty/lib") else() - set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib;$ORIGIN/../3rdParty/lib") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};$ORIGIN/../lib;$ORIGIN/../3rdParty/lib") endif() -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # We will set up some links with these files at the end of the install process so # make sure they are cleared at the start of the install process. diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index a15a5ba348..7f7e187e0d 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -62,8 +62,6 @@ function(add_isis_app folder libDependencies) endfunction(add_isis_app) - - # Set up the lone unit test in an obj folder function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index e11aa39144..9664407eae 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -62,7 +62,6 @@ find_program(RCC rcc REQUIRED) find_program(PROTOC protoc REQUIRED) if(APPLE) - find_package(OpenGL REQUIRED) find_package(Qt5 COMPONENTS Core Concurrent @@ -231,4 +230,3 @@ endforeach() list(REMOVE_DUPLICATES ALLLIBDIRS) list(REMOVE_DUPLICATES ALLLIBS) list(REMOVE_DUPLICATES ALLINCDIRS) - diff --git a/isis/cmake/FindOpenGL.cmake b/isis/cmake/FindOpenGL.cmake index 8fc3f41d2f..e7329ad920 100644 --- a/isis/cmake/FindOpenGL.cmake +++ b/isis/cmake/FindOpenGL.cmake @@ -19,9 +19,9 @@ find_library(GL_LIBRARY find_library(GLU_LIBRARY NAMES GLU ) -message("==================") -message(${OPENGL_INCLUDE_DIR}) -message(${GL_LIBRARY}) -message(${GLU_LIBRARY}) + +message( "-- OPENGL INCLUDE DIR: ${OPENGL_INCLUDE_DIR}") +message( "-- OPENGL LIB: ${GL_LIBRARY}") +message( "-- OPENGLU LIB: ${GLU_LIBRARY}") get_filename_component(OPENGL_INCLUDE_DIR "${OPENGL_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake index 29a4f01c02..c4e5c55082 100644 --- a/isis/cmake/InstallThirdParty.cmake +++ b/isis/cmake/InstallThirdParty.cmake @@ -25,11 +25,6 @@ function(install_third_party_libs) execute_process(COMMAND cp -L ${library} ${installLibFolder}) endif() endforeach() - - # Copy over QT Frameworks - if(APPLE) - # execute_process(COMMAND cp -Lr ${library} ${installLibFolder}) - endif(APPLE) endfunction() # Plugin portion of the installation @@ -59,7 +54,6 @@ function(install_third_party_license) install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/3rdParty/)") endif() install(CODE "execute_process(COMMAND cp -r ${LIC_DIR} ${CMAKE_INSTALL_PREFIX}/3rdParty/license)") - endfunction() diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake index 8e84d53a94..8f275e22a9 100644 --- a/isis/cmake/RunMakeFileTest.cmake +++ b/isis/cmake/RunMakeFileTest.cmake @@ -50,7 +50,7 @@ function(run_app_makefile_test makefile inputFolder outputFolder truthFolder bin # execute_process(COMMAND rm -rf ${outputFolder}) # execute_process(COMMAND rm -f ${logFile}) - execute_process(COMMAND make test WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) + execute_process(COMMAND make test MODE=LOUD WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) message("result: ${result}") if (result MATCHES "OK") set(failed "OFF") diff --git a/isis/scripts/finalizeInstalledOsxRpaths.py b/isis/scripts/finalizeInstalledOsxRpaths.py index 1f4b4754b2..e1b644400c 100644 --- a/isis/scripts/finalizeInstalledOsxRpaths.py +++ b/isis/scripts/finalizeInstalledOsxRpaths.py @@ -1,120 +1,120 @@ - -''' This script will replace all "long" library paths such as -@rpath/a/long/path/libExample.dylib with shortened paths such as -@rpath/libExample.dylib. It does not change the rpaths themselves, -just the references to them. -''' - -import os, sys, subprocess, stat - -def fixOneFile(inputPath, resetRpath): - '''Correct a single file''' - - # Get list of libraries loaded by this library - cmd = ['otool', '-l', inputPath] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) - otoolOutput, err = p.communicate() - - #print otoolOutput - - # Search for abs paths to the USGS hard coded location - needRpath = False - lines = [l.decode('utf-8') for l in otoolOutput.split()] - numUpdates = 0 - for line in lines: - - # Keep track of whether the next change step is for an ID or a LOAD operation. - if line == 'LC_ID_DYLIB': - idLine = True - if line == 'LC_LOAD_DYLIB': - idLine = False - - # Only change lines containing @rpath - if '@rpath' not in line: - continue - - # Trim off just the library name and prepend @rpath - #print line - if 'framework' in line: # Need whole framework part - posF = line.rfind('framework') - pos = line.rfind('/', 0, posF) - else: # Simple case - pos = line.rfind('/') - end = line[pos:] - - #print 'CROPPED: ' + end - #continue - - newPath = '@rpath' + end - - if newPath == line: # Skip already correct lines - continue - - # Replace the line - if idLine: # Handle LC_ID_DYLIB lines - cmd = ' '.join(['install_name_tool', '-id', newPath, inputPath]) - else: # Handle LC_LOAD_DYLIB lines - cmd = ' '.join(['install_name_tool', '-change', line, newPath, inputPath]) - #print cmd - os.system(cmd) - numUpdates += 1 - - # TODO: Delete any existing rpaths to keep things clean! - # If this option is set, reset the RPATH to look only in the local folder. - if resetRpath: - cmd = 'install_name_tool -add_rpath ./ ' + inputPath - #print cmd - os.system(cmd) - numUpdates += 1 - - return numUpdates - -def main(): - '''Main program corrects all files in a folder''' - - # Check input arguments - usage = 'python finalizeInstalledOsxRpaths.py folder [resetRpath]' - if len(sys.argv) < 2: - print(usage) - return -1 - - inputFolder= sys.argv[1] - resetRpath = False - if len(sys.argv) == 3: - resetRpath = True - if not os.path.exists(inputFolder): - print ('Input folder '+inputFolder+' does not exist!') - return -1 - - # Fix all of the .dylib files in the given folder - files = os.listdir(inputFolder) - for f in files: - - if '.plugin' in f: - continue - - fullPath = os.path.join(inputFolder, f) - - isBinary = (os.path.isfile(fullPath) and (stat.S_IXUSR & os.stat(fullPath)[stat.ST_MODE])) - isLib = ('.dylib' in f) - isFrame = 'framework' in f - - # Dig into framework folders to correct the rpaths in the underlying lib file - if isFrame: - name = f.replace('.framework', '') - path = f+'/Versions/Current/'+name - fullPath = os.path.join(inputFolder, path) - isLib = True - - if isBinary or isLib: - #print fullPath - numUpdates = fixOneFile(fullPath, resetRpath) - if numUpdates > 0: - print (f + ' --> ' + str(numUpdates) + ' changes made.') - #raise Exception('DEBUG') - - - -# Execute main() when called from command line -if __name__ == "__main__": - sys.exit(main()) +# +# ''' This script will replace all "long" library paths such as +# @rpath/a/long/path/libExample.dylib with shortened paths such as +# @rpath/libExample.dylib. It does not change the rpaths themselves, +# just the references to them. +# ''' +# +# import os, sys, subprocess, stat +# +# def fixOneFile(inputPath, resetRpath): +# '''Correct a single file''' +# +# # Get list of libraries loaded by this library +# cmd = ['otool', '-l', inputPath] +# p = subprocess.Popen(cmd, stdout=subprocess.PIPE) +# otoolOutput, err = p.communicate() +# +# #print otoolOutput +# +# # Search for abs paths to the USGS hard coded location +# needRpath = False +# lines = [l.decode('utf-8') for l in otoolOutput.split()] +# numUpdates = 0 +# for line in lines: +# +# # Keep track of whether the next change step is for an ID or a LOAD operation. +# if line == 'LC_ID_DYLIB': +# idLine = True +# if line == 'LC_LOAD_DYLIB': +# idLine = False +# +# # Only change lines containing @rpath +# if '@rpath' not in line: +# continue +# +# # Trim off just the library name and prepend @rpath +# #print line +# if 'framework' in line: # Need whole framework part +# posF = line.rfind('framework') +# pos = line.rfind('/', 0, posF) +# else: # Simple case +# pos = line.rfind('/') +# end = line[pos:] +# +# #print 'CROPPED: ' + end +# #continue +# +# newPath = '@rpath' + end +# +# if newPath == line: # Skip already correct lines +# continue +# +# # Replace the line +# if idLine: # Handle LC_ID_DYLIB lines +# cmd = ' '.join(['install_name_tool', '-id', newPath, inputPath]) +# else: # Handle LC_LOAD_DYLIB lines +# cmd = ' '.join(['install_name_tool', '-change', line, newPath, inputPath]) +# #print cmd +# os.system(cmd) +# numUpdates += 1 +# +# # TODO: Delete any existing rpaths to keep things clean! +# # If this option is set, reset the RPATH to look only in the local folder. +# if resetRpath: +# cmd = 'install_name_tool -add_rpath ./ ' + inputPath +# #print cmd +# os.system(cmd) +# numUpdates += 1 +# +# return numUpdates +# +# def main(): +# '''Main program corrects all files in a folder''' +# +# # Check input arguments +# usage = 'python finalizeInstalledOsxRpaths.py folder [resetRpath]' +# if len(sys.argv) < 2: +# print(usage) +# return -1 +# +# inputFolder= sys.argv[1] +# resetRpath = False +# if len(sys.argv) == 3: +# resetRpath = True +# if not os.path.exists(inputFolder): +# print ('Input folder '+inputFolder+' does not exist!') +# return -1 +# +# # Fix all of the .dylib files in the given folder +# files = os.listdir(inputFolder) +# for f in files: +# +# if '.plugin' in f: +# continue +# +# fullPath = os.path.join(inputFolder, f) +# +# isBinary = (os.path.isfile(fullPath) and (stat.S_IXUSR & os.stat(fullPath)[stat.ST_MODE])) +# isLib = ('.dylib' in f) +# isFrame = 'framework' in f +# +# # Dig into framework folders to correct the rpaths in the underlying lib file +# if isFrame: +# name = f.replace('.framework', '') +# path = f+'/Versions/Current/'+name +# fullPath = os.path.join(inputFolder, path) +# isLib = True +# +# if isBinary or isLib: +# #print fullPath +# numUpdates = fixOneFile(fullPath, resetRpath) +# if numUpdates > 0: +# print (f + ' --> ' + str(numUpdates) + ' changes made.') +# #raise Exception('DEBUG') +# +# +# +# # Execute main() when called from command line +# if __name__ == "__main__": +# sys.exit(main()) diff --git a/isis/scripts/fixOsxRpaths.py b/isis/scripts/fixOsxRpaths.py index a7e0541e30..df4085857e 100644 --- a/isis/scripts/fixOsxRpaths.py +++ b/isis/scripts/fixOsxRpaths.py @@ -1,109 +1,107 @@ - -# TODO: Clean up this file! - -import os, sys, subprocess - -# Constants - - -libFolders = ['/Users/smcmich1/isis_cmake/opt/usgs/v006/3rdParty/lib', - '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/lib', - '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/libexec'] -#individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/QtCore.framework/Versions/5/QtCore'] - -qtLibs = ('QtXmlPatterns QtXml QtNetwork '+ - 'QtSql QtGui QtCore QtSvg '+ - 'QtTest QtWebKit QtOpenGL '+ - 'QtConcurrent QtDBus '+ - 'QtMultimedia QtMultimediaWidgets '+ - 'QtNfc QtPositioning QtPrintSupport '+ - 'QtQml QtQuick QtQuickParticles '+ - 'QtQuickTest QtQuickWidgets QtScript '+ - 'QtScriptTools QtSensors QtSerialPort '+ - 'QtWebKitWidgets QtWebSockets QtWidgets '+ - 'QtTest QtWebChannel QtWebEngine QtWebEngineCore QtWebEngineWidgets').split() -individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/'+x+'.framework/Versions/5/'+x for x in qtLibs] -print individualLibs - -usgFolder = '/opt/usgs/v006/' - -rpathFolder = '/Users/smcmich1/isis_cmake/' -ignoreFolder = '/Users/smcmich1/isis_cmake/' - - -# Process one file - -def fixFile(fullPath, libName): - '''Fix the paths of a single library file''' - - # Get list of libraries loaded by this library - cmd = ['otool', '-l', fullPath] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) - otoolOutput, err = p.communicate() - - #print otoolOutput - - # Search for abs paths to the USGS hard coded location - needRpath = False - lines = otoolOutput.split() - for line in lines: - - # Some lines need to be skipped - if (usgFolder not in line) or (ignoreFolder in line) or ('@rpath' in line): - continue - - needRpath = True - - # Set up the command to fix this line - if libName in line: # Hande LC_ID_DYLIB lines - cmd = ' '.join(['install_name_tool', '-id', '@rpath'+line, fullPath]) - else: # Handle LC_LOAD_DYLIB lines - cmd = ' '.join(['install_name_tool', '-change', line, '@rpath'+line, fullPath]) - print cmd - os.system(cmd) - - # If any paths were changed, add the rpath. - if needRpath: - # Make sure this rpath is not there - cmd = ' '.join(['install_name_tool', '-delete_rpath', '/opt/usgs/v006/ports/lib', fullPath]) - print cmd - os.system(cmd) - # Add the correct rpath - cmd = ' '.join(['install_name_tool', '-add_rpath', rpathFolder, fullPath]) - print cmd - os.system(cmd) - print 'Fixed file ' + fullPath - -# Main function - -for folder in libFolders: - - libs = os.listdir(folder) - for lib in libs: - - # Only modify .dylib files - if 'dylib' not in lib: - continue - - # Get the full path - fullPath = os.path.join(folder, lib) - #print lib - - fixFile(fullPath, lib) - - -for fullPath in individualLibs: - - ## Only modify .dylib files - #if 'dylib' not in lib: - # continue - - # Get the full path - libName = os.path.basename(fullPath) - #print lib - - fixFile(fullPath, libName) - -print 'Finished modifying files!' - - +# +# # TODO: Clean up this file! +# +# import os, sys, subprocess +# +# # Constants +# +# +# libFolders = ['/Users/smcmich1/isis_cmake/opt/usgs/v006/3rdParty/lib', +# '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/lib', +# '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/libexec'] +# #individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/QtCore.framework/Versions/5/QtCore'] +# +# qtLibs = ('QtXmlPatterns QtXml QtNetwork '+ +# 'QtSql QtGui QtCore QtSvg '+ +# 'QtTest QtWebKit QtOpenGL '+ +# 'QtConcurrent QtDBus '+ +# 'QtMultimedia QtMultimediaWidgets '+ +# 'QtNfc QtPositioning QtPrintSupport '+ +# 'QtQml QtQuick QtQuickParticles '+ +# 'QtQuickTest QtQuickWidgets QtScript '+ +# 'QtScriptTools QtSensors QtSerialPort '+ +# 'QtWebKitWidgets QtWebSockets QtWidgets '+ +# 'QtTest QtWebChannel QtWebEngine QtWebEngineCore QtWebEngineWidgets').split() +# individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/'+x+'.framework/Versions/5/'+x for x in qtLibs] +# print individualLibs +# +# usgFolder = '/opt/usgs/v006/' +# +# rpathFolder = '/Users/smcmich1/isis_cmake/' +# ignoreFolder = '/Users/smcmich1/isis_cmake/' +# +# +# # Process one file +# +# def fixFile(fullPath, libName): +# '''Fix the paths of a single library file''' +# +# # Get list of libraries loaded by this library +# cmd = ['otool', '-l', fullPath] +# p = subprocess.Popen(cmd, stdout=subprocess.PIPE) +# otoolOutput, err = p.communicate() +# +# #print otoolOutput +# +# # Search for abs paths to the USGS hard coded location +# needRpath = False +# lines = otoolOutput.split() +# for line in lines: +# +# # Some lines need to be skipped +# if (usgFolder not in line) or (ignoreFolder in line) or ('@rpath' in line): +# continue +# +# needRpath = True +# +# # Set up the command to fix this line +# if libName in line: # Hande LC_ID_DYLIB lines +# cmd = ' '.join(['install_name_tool', '-id', '@rpath'+line, fullPath]) +# else: # Handle LC_LOAD_DYLIB lines +# cmd = ' '.join(['install_name_tool', '-change', line, '@rpath'+line, fullPath]) +# print cmd +# os.system(cmd) +# +# # If any paths were changed, add the rpath. +# if needRpath: +# # Make sure this rpath is not there +# cmd = ' '.join(['install_name_tool', '-delete_rpath', '/opt/usgs/v006/ports/lib', fullPath]) +# print cmd +# os.system(cmd) +# # Add the correct rpath +# cmd = ' '.join(['install_name_tool', '-add_rpath', rpathFolder, fullPath]) +# print cmd +# os.system(cmd) +# print 'Fixed file ' + fullPath +# +# # Main function +# +# for folder in libFolders: +# +# libs = os.listdir(folder) +# for lib in libs: +# +# # Only modify .dylib files +# if 'dylib' not in lib: +# continue +# +# # Get the full path +# fullPath = os.path.join(folder, lib) +# #print lib +# +# fixFile(fullPath, lib) +# +# +# for fullPath in individualLibs: +# +# ## Only modify .dylib files +# #if 'dylib' not in lib: +# # continue +# +# # Get the full path +# libName = os.path.basename(fullPath) +# #print lib +# +# fixFile(fullPath, libName) +# +# print 'Finished modifying files!' -- GitLab From b24ea7846fb77ce3ff763f1acc63d8c6e6c38fe4 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 15:09:37 -0700 Subject: [PATCH 131/620] updated macos spec file --- macos-spec.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos-spec.txt b/macos-spec.txt index e59a6ce537..2af2397a2f 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,7 +2,7 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT -https://conda.anaconda.org/usgs-astrogeology/osx-64/bullet-2.86.1-he2aa7b0_0.tar.bz2 +https://conda.anaconda.org/krodriguez/osx-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 -- GitLab From a52259c65abda84c3b14124cee68fc676ebed710 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 20:29:55 -0700 Subject: [PATCH 132/620] removed uneeded opengl find script, now defaults to conda env if no install directory is set and conda env is activated --- isis/CMakeLists.txt | 10 ++ isis/cmake/FindAllDependencies.cmake | 158 ++++----------------------- isis/cmake/FindOpenGL.cmake | 27 ----- isis/cmake/InstallThirdParty.cmake | 3 +- isis/cmake/TestSetup.cmake | 3 + 5 files changed, 38 insertions(+), 163 deletions(-) delete mode 100644 isis/cmake/FindOpenGL.cmake diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 434bb834a0..b0d7e80e55 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -71,6 +71,14 @@ option(buildTests "Set up unit, application, and module tests." ON ) option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) option(develop "Use a devleopment configuration" ON ) +# if cmake install prefix is not set, and conda env is activated, use the +# conda env as the install directory +if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") + set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) +endif() + +message("Installing in: ${CMAKE_INSTALL_PREFIX}") + # options only allow on/off but this flag is piped into ISIS as ENABLEJP2K # needs to be either 1 or 0 for C style true false if(JP2KFLAG) @@ -80,9 +88,11 @@ endif() # Prioritize passed in variables over env vars, probably a better way to do this if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data) set(isis3Data $ENV{ISIS3DATA}) + set(isis3Data ON) endif() if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData) set(isis3TestData $ENV{ISIS3TESTDATA}) + set(isis3TestData ON) endif() if(EXISTS ${isis3Data}) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 9664407eae..04b303e17b 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -4,45 +4,9 @@ # go looking for them if they are not? #=============================================================================== -message("CONDA PREFIX: $ENV{CONDA_PREFIX}") +message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) -# Add search USGS maintained libraries -list(APPEND CMAKE_INCLUDE_PATH - /usgs/pkgs/local/v007/include/ - /usgs/pkgs/local/v007/bin/ - /usgs/pkgs/local/v007/lib/ - /usgs/pkgs/local/v007/objects/ - /usgs/pkgs/local/v007/include/googleprotobuf/protobuf2.6.1/ - /usgs/pkgs/local/v007/include/xercesc/xercesc3.1.2/ - /usgs/pkgs/local/v007/include/tiff/tiff4.0.5/ - /usr/lib64/ -) - -set(CMAKE_PREFIX_PATH - /usgs/pkgs/local/v007/include/ - /usgs/pkgs/local/v007/bin/ - /usgs/pkgs/local/v007/lib/ - /usgs/pkgs/local/v007/libexec/ - /opt/usgs/v007/ports/Library/Frameworks/ - /opt/usgs/v007/ports/libexec/ - /opt/usgs/v007/ports/bin/ - /opt/usgs/v007/ports/lib/ - /opt/usgs/v007/ports/include/ - /opt/usgs/v007/ports/libexec/qt5 - /opt/usgs/v007/ports/libexec/qt5/bin/ - /opt/usgs/v007/ports/libexec/qt5/lib/ - /opt/usgs/v007/3rdparty/bin - /opt/usgs/v007/3rdparty/include/ - /opt/usgs/v007/3rdparty/lib/ - /opt/usgs/v007/proprietary/ - /opt/usgs/v007/proprietary/include/ - /opt/usgs/v007/proprietary/lib/ - /usr/lib/ - /usr/lib64/ - /usr/local/lib/ -) - # Add thirdPartyCppFlags set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") @@ -61,86 +25,28 @@ find_program(MOC moc REQUIRED) find_program(RCC rcc REQUIRED) find_program(PROTOC protoc REQUIRED) -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 - #WebKit - #WebKitWidgets - Widgets - Xml - XmlPatterns REQUIRED) -else() # oh god why - find_path(QT5_CORE_INCLUDE_DIR NAMES qchar.h PATH_SUFFIXES qt/qt5.7.1/QtCore/) - find_path(QT5_CONCURRENT_INCLUDE_DIR NAMES qtconcurrentmap.h PATH_SUFFIXES qt/qt5.7.1/QtConcurrent) - find_path(QT5_DBUS_INCLUDE_DIR NAMES qdbusmacros.h PATH_SUFFIXES qt/qt5.7.1/QtDBus) - find_path(QT5_GUI_INCLUDE_DIR NAMES qpainter.h PATH_SUFFIXES qt/qt5.7.1/QtGui) - find_path(QT5_MULTIMEDIA_INCLUDE_DIR NAMES qmediacontent.h PATH_SUFFIXES qt/qt5.7.1/QtMultimedia) - find_path(QT5_MULTIMEDIAWIDGETS_INCLUDE_DIR NAMES qvideowidget.h PATH_SUFFIXES qt/qt5.7.1/QtMultimediaWidgets) - find_path(QT5_NETWORK_INCLUDE_DIR NAMES qsslsocket.h PATH_SUFFIXES qt/qt5.7.1/QtNetwork) - find_path(QT5_OPENGL_INCLUDE_DIR NAMES qtopenglglobal.h PATH_SUFFIXES qt/qt5.7.1/QtOpenGL) - find_path(QT5_POSITIONING_INCLUDE_DIR NAMES qgeocoordinate.h PATH_SUFFIXES qt/qt5.7.1/QtPositioning) - find_path(QT5_PRINTSUPPORT_INCLUDE_DIR NAMES qprinter.h PATH_SUFFIXES qt/qt5.7.1/QtPrintSupport) - find_path(QT5_QML_INCLUDE_DIR NAMES qqmlinfo.h PATH_SUFFIXES qt/qt5.7.1/QtQml) - find_path(QT5_QUICK_INCLUDE_DIR NAMES qquickview.h PATH_SUFFIXES qt/qt5.7.1/QtQuick) -# find_path(QT5_SCRIPT_INCLUDE_DIR NAMES qscriptengine.h PATH_SUFFIXES qt/qt5.7.1/QtScript) -#find_path(QT5_SCRIPTTOOLS_INCLUDE_DIR NAMES qtscripttoolsversion.h PATH_SUFFIXES qt/qt5.7.1/QtScriptTools) - find_path(QT5_SENSORS_INCLUDE_DIR NAMES qgyroscope.h PATH_SUFFIXES qt/qt5.7.1/QtSensors) - find_path(QT5_SQL_INCLUDE_DIR NAMES qsql.h PATH_SUFFIXES qt/qt5.7.1/QtSql) - find_path(QT5_SVG_INCLUDE_DIR NAMES qsvgwidget.h PATH_SUFFIXES qt/qt5.7.1/QtSvg) - find_path(QT5_TEST_INCLUDE_DIR NAMES qtest.h PATH_SUFFIXES qt/qt5.7.1/QtTest) - find_path(QT5_WEBCHANNEL_INCLUDE_DIR NAMES qwebchannel.h PATH_SUFFIXES qt/qt5.7.1/QtWebChannel) - find_path(QT5_WEBENGINE_INCLUDE_DIR NAMES qtwebengineglobal.h PATH_SUFFIXES qt/qt5.7.1/QtWebEngine) - find_path(QT5_WEBENGINEWIDGETS_INCLUDE_DIR NAMES qwebenginescript.h PATH_SUFFIXES qt/qt5.7.1/QtWebEngineWidgets) - find_path(QT5_WIDGETS_INCLUDE_DIR NAMES qwidget.h PATH_SUFFIXES qt/qt5.7.1/QtWidgets) - find_path(QT5_XML_INCLUDE_DIR NAMES qxml.h PATH_SUFFIXES qt/qt5.7.1/QtXml) - find_path(QT5_XMLPATTERNS_INCLUDE_DIR NAMES qtxmlpatternsglobal.h PATH_SUFFIXES qt/qt5.7.1/QtXmlPatterns) - - get_filename_component(QT5_ROOT_INCLUDE_DIR "${QT5_CORE_INCLUDE_DIR}" DIRECTORY) - - 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_WEBENGINECORE_LIBRARY NAMES Qt5WebEngineCore) - 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(Qt5 COMPONENTS + Core + Concurrent + Gui + Multimedia + MultimediaWidgets + Network + OpenGL # Needed to install mesa-common-dev for this! + PrintSupport + Qml + Quick + Script + ScriptTools + Sql + Svg + Test + WebChannel + #WebKit + #WebKitWidgets + Widgets + Xml + XmlPatterns REQUIRED) # Some of these will have non-traditional installs with version numbers in the paths in v007 # For these, we pass in a version number, and use it in the path suffix @@ -170,15 +76,12 @@ find_package(X11 6 REQUIRED) find_package(nanoflann REQUIRED) find_package(PNG REQUIRED) find_package(Kakadu) +find_package(Geos 3.5.0 REQUIRED) -# v007 might have different versions installed for our mac and linux systems. # Im this case, we specify the version numbers being searched for in the non-traditional installs. if(APPLE) - find_package(Geos 3.5.0 REQUIRED) find_package(OpenGL REQUIRED) -else(APPLE) - find_package(Geos 3.5.1 REQUIRED) endif(APPLE) get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES @@ -193,8 +96,6 @@ endforeach() foreach (_variableName ${_variableNames}) if (_variableName MATCHES "^CMAKE+") - elseif (_variableName MATCHES "^BULLET$") - # We need to skip Bullet since the order needs to be very specific elseif (_variableName MATCHES ".+_LIB$") list(APPEND ALLLIBS "${${_variableName}}") elseif (_variableName MATCHES ".+_LIBRARY$") @@ -204,17 +105,6 @@ foreach (_variableName ${_variableNames}) endif() endforeach() -list(APPEND ALLLIBS "${BULLET_OPENCL_LIBRARY}") -list(APPEND ALLLIBS "${BULLET3_COMMON_LIBRARY}") -list(APPEND ALLLIBS "${BULLET3_GEOMETRY_LIBRARY}") -list(APPEND ALLLIBS "${BULLET_SOFTBODY_LIBRARY}") -list(APPEND ALLLIBS "${BULLET_DYNAMICS_LIBRARY}") -list(APPEND ALLLIBS "${BULLET3_3DYNAMICS_LIBRARY}") -list(APPEND ALLLIBS "${BULLET_INVERSEDYNAMICS_LIBRARY}") -list(APPEND ALLLIBS "${BULLET_COLLISION_LIBRARY}") -list(APPEND ALLLIBS "${BULLET3_3COLLISION_LIBRARY}") -list(APPEND ALLLIBS "${BULLET3_LINEARMATH_LIBRARY}") - foreach (_variableName ${_variableNames}) get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) if (_variableName MATCHES "^CMAKE+") diff --git a/isis/cmake/FindOpenGL.cmake b/isis/cmake/FindOpenGL.cmake deleted file mode 100644 index e7329ad920..0000000000 --- a/isis/cmake/FindOpenGL.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# CMake module for find_package(OpenGL) -# Finds include directory and all applicable libraries -# -# Sets the following: -# KAKADU_INCLUDE_DIR -# KAKADU_A_LIBRARY -# KAKADU_V_LIBRARY - -find_path(OPENGL_INCLUDE_DIR - NAME gl.h - PATH_SUFFIXES GL - HINTS GL -) - -find_library(GL_LIBRARY - NAMES GL -) - -find_library(GLU_LIBRARY - NAMES GLU -) - -message( "-- OPENGL INCLUDE DIR: ${OPENGL_INCLUDE_DIR}") -message( "-- OPENGL LIB: ${GL_LIBRARY}") -message( "-- OPENGLU LIB: ${GLU_LIBRARY}") - -get_filename_component(OPENGL_INCLUDE_DIR "${OPENGL_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/InstallThirdParty.cmake b/isis/cmake/InstallThirdParty.cmake index c4e5c55082..209b3610a6 100644 --- a/isis/cmake/InstallThirdParty.cmake +++ b/isis/cmake/InstallThirdParty.cmake @@ -11,8 +11,7 @@ function(install_third_party_libs) # Loop through all the library files in our list foreach(library ${ALLLIBS}) - get_filename_component(extension ${library} EXT) - if ("${extension}" STREQUAL ".so" OR "${extension}" STREQUAL ".dylib" ) + if (EXISTS ${library}) #get path to library in libararypath get_filename_component(librarypath ${library} PATH) diff --git a/isis/cmake/TestSetup.cmake b/isis/cmake/TestSetup.cmake index 16f08c890f..25c658fa3b 100644 --- a/isis/cmake/TestSetup.cmake +++ b/isis/cmake/TestSetup.cmake @@ -58,6 +58,7 @@ macro(add_makefile_test_target testName makeFile inputDir outputDir truthDir) -DTRUTH_DIR=${truthDir} -DBIN_DIR=${CMAKE_BINARY_DIR}/bin -P ${thisFolder}/RunMakeFileTest.cmake) + set_tests_properties(${testName} PROPERTIES LABELS "app") endmacro() @@ -78,4 +79,6 @@ macro(add_unit_test_target testFile truthFile) -DDATA_ROOT=$ENV{ISIS3DATA} -DCODE_ROOT=${PROJECT_SOURCE_DIR} -P ${thisFolder}/RunUnitTest.cmake) + + set_tests_properties(${testName} PROPERTIES LABELS "unit") endmacro() -- GitLab From 25d06130e427c87ec3c4dc4c3edc85fe5342cb44 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 20:35:46 -0700 Subject: [PATCH 133/620] removing third party install --- isis/CMakeLists.txt | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index b0d7e80e55..cee097e120 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -210,18 +210,7 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX}) add_subdirectory(src objects) # Set up third party libraries for installation -install_third_party() - -# # Create a link from the build/objects directory to each folder in 3rdPartyLibs/plugins. -# # - This is required so that the plugins can be found during unit tests. -# # TIP: Set "export QT_DEBUG_PLUGINS=1" to help debug plugin errors. -# foreach(plugin ${THIRDPARTYPLUGINFOLDERS}) -# get_filename_component(pluginName ${plugin} NAME) -# if(NOT EXISTS ${CMAKE_BINARY_DIR}/lib/${pluginName}) -# execute_process(COMMAND ln -s "${plugin}" ${pluginName} -# WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/lib") -# endif() -# endforeach() +# install_third_party() # Set up documentation build target. # - This script is called by running "make docs". -- GitLab From 0ffef397c0b21433450c0d273d3f899958b6a6ed Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 20:38:54 -0700 Subject: [PATCH 134/620] removed OSX RPATH fixing scripts --- isis/scripts/finalizeInstalledOsxRpaths.py | 120 --------------------- isis/scripts/fixOsxRpaths.py | 107 ------------------ 2 files changed, 227 deletions(-) delete mode 100644 isis/scripts/finalizeInstalledOsxRpaths.py delete mode 100644 isis/scripts/fixOsxRpaths.py diff --git a/isis/scripts/finalizeInstalledOsxRpaths.py b/isis/scripts/finalizeInstalledOsxRpaths.py deleted file mode 100644 index e1b644400c..0000000000 --- a/isis/scripts/finalizeInstalledOsxRpaths.py +++ /dev/null @@ -1,120 +0,0 @@ -# -# ''' This script will replace all "long" library paths such as -# @rpath/a/long/path/libExample.dylib with shortened paths such as -# @rpath/libExample.dylib. It does not change the rpaths themselves, -# just the references to them. -# ''' -# -# import os, sys, subprocess, stat -# -# def fixOneFile(inputPath, resetRpath): -# '''Correct a single file''' -# -# # Get list of libraries loaded by this library -# cmd = ['otool', '-l', inputPath] -# p = subprocess.Popen(cmd, stdout=subprocess.PIPE) -# otoolOutput, err = p.communicate() -# -# #print otoolOutput -# -# # Search for abs paths to the USGS hard coded location -# needRpath = False -# lines = [l.decode('utf-8') for l in otoolOutput.split()] -# numUpdates = 0 -# for line in lines: -# -# # Keep track of whether the next change step is for an ID or a LOAD operation. -# if line == 'LC_ID_DYLIB': -# idLine = True -# if line == 'LC_LOAD_DYLIB': -# idLine = False -# -# # Only change lines containing @rpath -# if '@rpath' not in line: -# continue -# -# # Trim off just the library name and prepend @rpath -# #print line -# if 'framework' in line: # Need whole framework part -# posF = line.rfind('framework') -# pos = line.rfind('/', 0, posF) -# else: # Simple case -# pos = line.rfind('/') -# end = line[pos:] -# -# #print 'CROPPED: ' + end -# #continue -# -# newPath = '@rpath' + end -# -# if newPath == line: # Skip already correct lines -# continue -# -# # Replace the line -# if idLine: # Handle LC_ID_DYLIB lines -# cmd = ' '.join(['install_name_tool', '-id', newPath, inputPath]) -# else: # Handle LC_LOAD_DYLIB lines -# cmd = ' '.join(['install_name_tool', '-change', line, newPath, inputPath]) -# #print cmd -# os.system(cmd) -# numUpdates += 1 -# -# # TODO: Delete any existing rpaths to keep things clean! -# # If this option is set, reset the RPATH to look only in the local folder. -# if resetRpath: -# cmd = 'install_name_tool -add_rpath ./ ' + inputPath -# #print cmd -# os.system(cmd) -# numUpdates += 1 -# -# return numUpdates -# -# def main(): -# '''Main program corrects all files in a folder''' -# -# # Check input arguments -# usage = 'python finalizeInstalledOsxRpaths.py folder [resetRpath]' -# if len(sys.argv) < 2: -# print(usage) -# return -1 -# -# inputFolder= sys.argv[1] -# resetRpath = False -# if len(sys.argv) == 3: -# resetRpath = True -# if not os.path.exists(inputFolder): -# print ('Input folder '+inputFolder+' does not exist!') -# return -1 -# -# # Fix all of the .dylib files in the given folder -# files = os.listdir(inputFolder) -# for f in files: -# -# if '.plugin' in f: -# continue -# -# fullPath = os.path.join(inputFolder, f) -# -# isBinary = (os.path.isfile(fullPath) and (stat.S_IXUSR & os.stat(fullPath)[stat.ST_MODE])) -# isLib = ('.dylib' in f) -# isFrame = 'framework' in f -# -# # Dig into framework folders to correct the rpaths in the underlying lib file -# if isFrame: -# name = f.replace('.framework', '') -# path = f+'/Versions/Current/'+name -# fullPath = os.path.join(inputFolder, path) -# isLib = True -# -# if isBinary or isLib: -# #print fullPath -# numUpdates = fixOneFile(fullPath, resetRpath) -# if numUpdates > 0: -# print (f + ' --> ' + str(numUpdates) + ' changes made.') -# #raise Exception('DEBUG') -# -# -# -# # Execute main() when called from command line -# if __name__ == "__main__": -# sys.exit(main()) diff --git a/isis/scripts/fixOsxRpaths.py b/isis/scripts/fixOsxRpaths.py deleted file mode 100644 index df4085857e..0000000000 --- a/isis/scripts/fixOsxRpaths.py +++ /dev/null @@ -1,107 +0,0 @@ -# -# # TODO: Clean up this file! -# -# import os, sys, subprocess -# -# # Constants -# -# -# libFolders = ['/Users/smcmich1/isis_cmake/opt/usgs/v006/3rdParty/lib', -# '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/lib', -# '/Users/smcmich1/isis_cmake/opt/usgs/v006/ports/libexec'] -# #individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/QtCore.framework/Versions/5/QtCore'] -# -# qtLibs = ('QtXmlPatterns QtXml QtNetwork '+ -# 'QtSql QtGui QtCore QtSvg '+ -# 'QtTest QtWebKit QtOpenGL '+ -# 'QtConcurrent QtDBus '+ -# 'QtMultimedia QtMultimediaWidgets '+ -# 'QtNfc QtPositioning QtPrintSupport '+ -# 'QtQml QtQuick QtQuickParticles '+ -# 'QtQuickTest QtQuickWidgets QtScript '+ -# 'QtScriptTools QtSensors QtSerialPort '+ -# 'QtWebKitWidgets QtWebSockets QtWidgets '+ -# 'QtTest QtWebChannel QtWebEngine QtWebEngineCore QtWebEngineWidgets').split() -# individualLibs = ['/Users/smcmich1/isis_cmake//opt/usgs/v006/ports/libexec/qt5/lib/'+x+'.framework/Versions/5/'+x for x in qtLibs] -# print individualLibs -# -# usgFolder = '/opt/usgs/v006/' -# -# rpathFolder = '/Users/smcmich1/isis_cmake/' -# ignoreFolder = '/Users/smcmich1/isis_cmake/' -# -# -# # Process one file -# -# def fixFile(fullPath, libName): -# '''Fix the paths of a single library file''' -# -# # Get list of libraries loaded by this library -# cmd = ['otool', '-l', fullPath] -# p = subprocess.Popen(cmd, stdout=subprocess.PIPE) -# otoolOutput, err = p.communicate() -# -# #print otoolOutput -# -# # Search for abs paths to the USGS hard coded location -# needRpath = False -# lines = otoolOutput.split() -# for line in lines: -# -# # Some lines need to be skipped -# if (usgFolder not in line) or (ignoreFolder in line) or ('@rpath' in line): -# continue -# -# needRpath = True -# -# # Set up the command to fix this line -# if libName in line: # Hande LC_ID_DYLIB lines -# cmd = ' '.join(['install_name_tool', '-id', '@rpath'+line, fullPath]) -# else: # Handle LC_LOAD_DYLIB lines -# cmd = ' '.join(['install_name_tool', '-change', line, '@rpath'+line, fullPath]) -# print cmd -# os.system(cmd) -# -# # If any paths were changed, add the rpath. -# if needRpath: -# # Make sure this rpath is not there -# cmd = ' '.join(['install_name_tool', '-delete_rpath', '/opt/usgs/v006/ports/lib', fullPath]) -# print cmd -# os.system(cmd) -# # Add the correct rpath -# cmd = ' '.join(['install_name_tool', '-add_rpath', rpathFolder, fullPath]) -# print cmd -# os.system(cmd) -# print 'Fixed file ' + fullPath -# -# # Main function -# -# for folder in libFolders: -# -# libs = os.listdir(folder) -# for lib in libs: -# -# # Only modify .dylib files -# if 'dylib' not in lib: -# continue -# -# # Get the full path -# fullPath = os.path.join(folder, lib) -# #print lib -# -# fixFile(fullPath, lib) -# -# -# for fullPath in individualLibs: -# -# ## Only modify .dylib files -# #if 'dylib' not in lib: -# # continue -# -# # Get the full path -# libName = os.path.basename(fullPath) -# #print lib -# -# fixFile(fullPath, libName) -# -# print 'Finished modifying files!' -- GitLab From 81e114438bf7ded165e5d261d8e4ac4a59cb8751 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 21:12:58 -0700 Subject: [PATCH 135/620] added labels for modules and app vs unit tests --- isis/cmake/AddIsisModule.cmake | 10 +++++++--- isis/cmake/TestSetup.cmake | 5 ++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 7f7e187e0d..844e65d758 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -79,7 +79,7 @@ function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) endforeach() # Generate a name for the executable - set(executableName "${moduleName}_unit_test_${filename}") + set(executableName "unitTest_${filename}") # Create the executable and link it to the module library add_executable( ${executableName} ${testFile}) @@ -87,7 +87,7 @@ function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) target_link_libraries(${executableName} ${moduleName} ${depLibs}) # Call function to add the test - add_unit_test_target(${executableName} ${truthFile}) + add_unit_test_target(${executableName} ${truthFile} ${moduleName}) endfunction(make_obj_unit_test) @@ -271,7 +271,11 @@ function(add_isis_module name) foreach(val RANGE ${numTests}) list(GET unitTestFiles ${val} testFile ) list(GET truthFiles ${val} truthFile) - make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") + if(name STREQUAL "isis3") + make_obj_unit_test("core" ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") + else() + make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") + endif() endforeach() endif() diff --git a/isis/cmake/TestSetup.cmake b/isis/cmake/TestSetup.cmake index 25c658fa3b..c3c3e202b1 100644 --- a/isis/cmake/TestSetup.cmake +++ b/isis/cmake/TestSetup.cmake @@ -64,7 +64,7 @@ endmacro() # Add a class based unit test with an executable and a truth file. -macro(add_unit_test_target testFile truthFile) +macro(add_unit_test_target testFile truthFile labels) set(thisFolder "${PROJECT_SOURCE_DIR}/cmake") set(fullTestPath "${CMAKE_BINARY_DIR}/unitTest/${testFile}") # The binary that the script will execute @@ -79,6 +79,5 @@ macro(add_unit_test_target testFile truthFile) -DDATA_ROOT=$ENV{ISIS3DATA} -DCODE_ROOT=${PROJECT_SOURCE_DIR} -P ${thisFolder}/RunUnitTest.cmake) - - set_tests_properties(${testName} PROPERTIES LABELS "unit") + set_tests_properties(${testName} PROPERTIES LABELS "unit;${labels}") endmacro() -- GitLab From 4595caeb2b661b649fb9d15fbc5cc33fce0aeb26 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 21:20:17 -0700 Subject: [PATCH 136/620] typo, core->base --- isis/cmake/AddIsisModule.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 844e65d758..3e0b89a7ac 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -271,8 +271,9 @@ function(add_isis_module name) foreach(val RANGE ${numTests}) list(GET unitTestFiles ${val} testFile ) list(GET truthFiles ${val} truthFile) + if(name STREQUAL "isis3") - make_obj_unit_test("core" ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") + make_obj_unit_test("base" ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") else() make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") endif() -- GitLab From 9769a235a8ada58bc44377c8061da01200bcba60 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 21 Mar 2018 23:22:19 -0700 Subject: [PATCH 137/620] turns out changing isis3 module name to base was not a good idea --- isis/cmake/AddIsisModule.cmake | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 3e0b89a7ac..aa403db34f 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -79,7 +79,7 @@ function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) endforeach() # Generate a name for the executable - set(executableName "unitTest_${filename}") + set(executableName "${moduleName}_unit_test_${filename}") # Create the executable and link it to the module library add_executable( ${executableName} ${testFile}) @@ -272,11 +272,7 @@ function(add_isis_module name) list(GET unitTestFiles ${val} testFile ) list(GET truthFiles ${val} truthFile) - if(name STREQUAL "isis3") - make_obj_unit_test("base" ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") - else() - make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") - endif() + make_obj_unit_test(${name} ${testFile} ${truthFile} "${reqLibs}" "${pluginLibs}") endforeach() endif() -- GitLab From 7f2a5d742759e41d67f1ae8bb67a980a5e6b40d9 Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Thu, 22 Mar 2018 13:08:09 -0700 Subject: [PATCH 138/620] added rpath line for third party flags --- isis/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index cee097e120..72064f2eb4 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -21,6 +21,8 @@ include(InstallThirdParty) #=============================================================================== # Project information +execute_process(COMMAND export LD_LIBRARY_PATH="$ENV{LD_LIBRARY_PATH}:$ENV{CONDA_PREFIX}/lib") + project (USGS_ISIS) # Short and long name of this package @@ -58,7 +60,7 @@ message("Detected Operating System: ${osVersionString}") set(BUILD_SHARED_LIBS ON) # Specify flags used -set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) +set(thirdPartyCppFlags -Wl,-rpath,$ENV{CONDA_PREFIX}/lib -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) -- GitLab From d1a9f468bcfbc5eab341fad40a90825fd97ff170 Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Thu, 22 Mar 2018 13:13:28 -0700 Subject: [PATCH 139/620] updated linux specs --- linux-spec.txt | 121 +++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/linux-spec.txt b/linux-spec.txt index 15545fa82f..529ab58395 100644 --- a/linux-spec.txt +++ b/linux-spec.txt @@ -2,117 +2,118 @@ # $ conda create --name --file # platform: linux-64 @EXPLICIT -https://conda.anaconda.org/conda-forge/linux-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.14.6-4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cloog-0.18.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cmake-3.9.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cspice-66-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/dbus-1.10.20-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/ds9-7.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/expat-2.2.5-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-3.2.4-3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/flann-1.8.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.0.0-4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.7-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geos-3.5.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.4.2-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.19.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.1.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.51.4-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/gmm-5.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gmp-6.1.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/gstreamer-1.8.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-1.3.4-2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.8.18-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/icu-58.2-0.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/isl-0.12.2-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/jama-125-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/jasper-1.900.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jbig-2.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jpeg-9b-2.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/jsoncpp-1.8.3-h3a67955_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.14.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lapack-3.6.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgcc-4.8.5-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgfortran-3.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.28-2.tar.bz2 https://conda.anaconda.org/probcomp/linux-64/libprotobuf-2.6.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.0-2.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libuv-1.11.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libwebp-0.5.2-7.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libxcb-1.12-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.7-0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/llvmdev-5.0.0-default_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/m4-1.4.17-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/mesalib-17.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/mpc-1.0.3-4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/mpfr-3.1.5-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/mysql-5.7.20-h55eaa98_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.6-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nanoflann-1.2.2-0.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/ncurses-5.9-10.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nn-1.86.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/openblas-0.2.19-2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py27_blas_openblas_203.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/pcl-1.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pcre-8.39-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/pip-9.0.1-py27_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/proj4-4.9.3-5.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/protobuf-2.6.1-py27_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python-2.7.14-2.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qhull-7.2.0-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qt-5.7.1-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qwt-6.1.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/readline-6.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/rhash-1.3.4-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py27_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.13.0-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/superlu-5.2.1-blas_openblas_201.tar.bz2 https://repo.continuum.io/pkgs/free/linux-64/system-5.8-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tbb-4.4_20160526-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tk-8.5.19-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/tnt-126-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py27_mesalib_0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/wheel-0.30.0-py27h2bc6bb2_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/x264-20131217-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/xerces-c-3.1.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.2-3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-6.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/xz-5.2.3-0.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.65.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/dbus-1.10.20-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.8.14-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.51.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.8.18-2.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/isl-0.12.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/jasper-1.900.1-1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/jsoncpp-1.8.3-h3a67955_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/llvmdev-5.0.0-default_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-3.1.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/openblas-0.2.19-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qhull-7.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/readline-6.2-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/blas-1.1-openblas.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cloog-0.18.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.4.2-1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/gstreamer-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mesalib-17.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mpc-1.0.3-4.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/mysql-5.7.20-h55eaa98_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python-2.7.14-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/bz2file-0.98-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/protobuf-2.6.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/superlu-5.2.1-blas_openblas_201.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.14.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/cmake-3.9.1-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qt-5.7.1-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py27_mesalib_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-1.3.4-2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/pcl-1.8.1-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qwt-6.1.3-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/wheel-0.30.0-py27h2bc6bb2_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py27_blas_openblas_203.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/pip-9.0.1-py27_1.tar.bz2 -- GitLab From fb767979e60181595f978b95a20546d4c56ec848 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 22 Mar 2018 13:20:20 -0700 Subject: [PATCH 140/620] added rpath link for linker to handle janky third party libs --- isis/CMakeLists.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 72064f2eb4..0846b1b7fa 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -21,8 +21,6 @@ include(InstallThirdParty) #=============================================================================== # Project information -execute_process(COMMAND export LD_LIBRARY_PATH="$ENV{LD_LIBRARY_PATH}:$ENV{CONDA_PREFIX}/lib") - project (USGS_ISIS) # Short and long name of this package @@ -60,7 +58,12 @@ message("Detected Operating System: ${osVersionString}") set(BUILD_SHARED_LIBS ON) # Specify flags used -set(thirdPartyCppFlags -Wl,-rpath,$ENV{CONDA_PREFIX}/lib -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) +set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) +# on linux, add the conda prefix to handle possible issues with rpaths at link time +# sometimes third parties do not set their rpaths correctly +if(LINUX) + set(thirdPartyCppFlags -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) +endif() # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) -- GitLab From 1b0d4c88b910c01ebe1e4d69cb2abcb492ddbdfb Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 22 Mar 2018 13:36:24 -0700 Subject: [PATCH 141/620] fixed error where third party flags were being overwritten --- isis/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 0846b1b7fa..f17bd85493 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -62,7 +62,7 @@ set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused # on linux, add the conda prefix to handle possible issues with rpaths at link time # sometimes third parties do not set their rpaths correctly if(LINUX) - set(thirdPartyCppFlags -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) + set(thirdPartyCppFlags ${thirdPartyCppFlags} -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) endif() # Specify user options that can be passed in with the initial CMake command. -- GitLab From c80b09673dfe00135e87dea4d320f277e3699f00 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 22 Mar 2018 13:38:47 -0700 Subject: [PATCH 142/620] simpler 3rd party flags --- isis/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index f17bd85493..480f3c7d1e 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -58,12 +58,10 @@ message("Detected Operating System: ${osVersionString}") set(BUILD_SHARED_LIBS ON) # Specify flags used -set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual) # on linux, add the conda prefix to handle possible issues with rpaths at link time # sometimes third parties do not set their rpaths correctly -if(LINUX) - set(thirdPartyCppFlags ${thirdPartyCppFlags} -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) -endif() +set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) + # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) -- GitLab From 8ee7386e72170b90b4a876f07b0ac139de44f5bb Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Thu, 22 Mar 2018 14:06:19 -0700 Subject: [PATCH 143/620] updated env file --- environment.yml | 225 ++++++++++++++++++++++++++---------------------- 1 file changed, 124 insertions(+), 101 deletions(-) diff --git a/environment.yml b/environment.yml index 93c08c5f1f..a75840556a 100644 --- a/environment.yml +++ b/environment.yml @@ -1,104 +1,127 @@ -name: isisdeps +name: isis channels: -- anaconda -- inria-pro-sed -- krodriguez -- conda-forge -- usgs-astrogeology -- defaults + - probcomp + - anaconda + - usgs-astrogeology + - jlaura + - krodriguez + - conda-forge + - defaults dependencies: -- libgcc=4.8.5=1 -- blas=1.1=openblas -- boost=1.65.1=py27_0 -- boost-cpp=1.65.1=1 -- bzip2=1.0.6=1 -- ca-certificates=2018.1.18=0 -- cairo=1.14.6=4 -- certifi=2018.1.18=py27_0 -- cmake=3.9.1=0 -- cspice=66=0 -- curl=7.55.1=0 -- dbus=1.10.22=0 -- doxygen=1.8.14=0 -- eigen=3.3.3=0 -- expat=2.2.5=0 -- ffmpeg=3.2.4=3 -- flann=1.8.4=0 -- fontconfig=2.12.1=4 -- freetype=2.7=1 -- geos=3.5.1=1 -- geotiff=1.4.2=1 -- gettext=0.19.8.1=0 -- giflib=5.1.4=0 -- glib=2.51.4=0 -- gsl=2.2.1=blas_openblas_3 -- harfbuzz=1.3.4=2 -- hdf5=1.8.18=3 -- icu=58.2=0 -- jasper=1.900.1=4 -- jpeg=9b=2 -- krb5=1.14.2=0 -- lapack=3.6.1=1 -- libffi=3.2.1=3 -- libgfortran=3.0.0=0 -- libiconv=1.15=0 -- libpng=1.6.28=2 -- libssh2=1.8.0=2 -- libtiff=4.0.9=0 -- libuv=1.11.0=0 -- libwebp=0.5.2=7 -- libxcb=1.12=1 -- libxml2=2.9.7=0 -- m4=1.4.17=1 -- metis=5.1.0=3 -- nanoflann=1.2.2=0 -- ncurses=5.9=10 -- ninja=1.7.2=0 -- nn=1.86.0=2 -- numpy=1.13.3=py27_blas_openblas_200 -- openblas=0.2.19=2 -- opencv=3.3.0=py27_blas_openblas_200 -- openssl=1.0.2n=0 -- pcre=8.39=0 -- pip=9.0.1=py27_1 -- pixman=0.34.0=1 -- proj4=4.9.3=5 -- protobuf=3.2.0=py27_0 -- python=2.7.14=4 -- qt=5.6.2=h9e3eb04_4 -- qwt=6.1.3=1 -- readline=7.0=0 -- rhash=1.3.4=0 -- setuptools=38.5.1=py27_0 -- six=1.11.0=py27_1 -- sqlite=3.20.1=2 -- suitesparse=4.5.4=blas_openblas_200 -- superlu=5.2.1=blas_openblas_201 -- tk=8.6.7=0 -- wheel=0.30.0=py27_2 -- x264=20131217=3 -- xorg-kbproto=1.0.7=1 -- xorg-libx11=1.6.4=6 -- xorg-libxau=1.0.8=3 -- xorg-libxdmcp=1.1.2=3 -- xorg-xproto=7.0.31=6 -- xz=5.2.3=0 -- zlib=1.2.11=0 -- openmpi=1.8.6=4 -- parmetis=4.0.3p2=1 -- jama=125=0 -- tnt=126=0 -- bullet=2.86.1=he2aa7b0_0 -- ds9=7.5=h35e3669_0 -- embree=2.16.0=h6834224_0 -- gmm=5.0=h6aef312_0 -- naif=n0066 -- patchelf=0.9=h879b6ae_0 -- pcl=1.8.1=h7a71350_0 -- qhull=7.2.0=h396fa31_0 -- tbb=4.4=hf7780a4_0 -- vtk=7.1.1=py27h56fd973_0 -- xalan-c=1.11=h1922a5c_0 -- xerces-c=3.1.4=h10f7eb2_0 -prefix: /Users/krodriguez-pr/anaconda3/envs/isisdeps + - ca-certificates=2017.08.26=h1d4fec5_0 + - dbus=1.10.20=0 + - future=0.16.0=py27_1 + - gst-plugins-base=1.8.0=0 + - gstreamer=1.8.0=0 + - jsoncpp=1.8.3=h3a67955_0 + - libgcc=4.8.5=1 + - libgcc-ng=7.2.0=h7cc24e2_2 + - libgfortran=3.0=0 + - libstdcxx-ng=7.2.0=h7a57d05_2 + - libxcb=1.12=1 + - mysql=5.7.20=h55eaa98_0 + - ncurses=5.9=10 + - ninja=1.7.2=0 + - patchelf=0.9=hf79760b_2 + - pip=9.0.1=py27_1 + - setuptools=38.5.1=py27_0 + - wheel=0.30.0=py27h2bc6bb2_1 + - xerces-c=3.1.4=0 + - xz=5.2.3=0 + - zlib=1.2.11=0 + - blas=1.1=openblas + - boost=1.65.1=py27_0 + - boost-cpp=1.65.1=1 + - bzip2=1.0.6=1 + - cairo=1.14.6=4 + - certifi=2018.1.18=py27_0 + - cmake=3.9.1=0 + - cspice=66=0 + - curl=7.55.1=0 + - doxygen=1.8.14=0 + - eigen=3.3.3=0 + - embree=2.14.0=0 + - expat=2.2.5=0 + - ffmpeg=3.2.4=3 + - flann=1.8.4=0 + - fontconfig=2.12.1=4 + - freeglut=3.0.0=4 + - freetype=2.7=1 + - geos=3.5.1=1 + - geotiff=1.4.2=1 + - gettext=0.19.8.1=0 + - giflib=5.1.4=0 + - glib=2.51.4=0 + - gmp=6.1.2=0 + - gsl=2.2.1=blas_openblas_3 + - harfbuzz=1.3.4=2 + - hdf5=1.8.18=2 + - icu=58.2=0 + - jasper=1.900.1=1 + - jbig=2.1=0 + - jpeg=9b=2 + - krb5=1.14.2=0 + - lapack=3.6.1=1 + - libffi=3.2.1=3 + - libiconv=1.15=0 + - libpng=1.6.28=2 + - libssh2=1.8.0=2 + - libtiff=4.0.9=0 + - libuv=1.11.0=0 + - libwebp=0.5.2=7 + - libxml2=2.9.7=0 + - llvm-meta=5.0.0=0 + - llvmdev=5.0.0=default_1 + - m4=1.4.17=1 + - mesalib=17.2.0=0 + - metis=5.1.0=3 + - mpc=1.0.3=4 + - mpfr=3.1.5=0 + - mysql-connector-c=6.1.6=0 + - nanoflann=1.2.2=0 + - nn=1.86.0=2 + - numpy=1.13.3=py27_blas_openblas_200 + - openblas=0.2.19=2 + - opencv=3.2.0=np113py27_blas_openblas_203 + - openssl=1.0.2n=0 + - pcre=8.39=0 + - pixman=0.34.0=1 + - proj4=4.9.3=5 + - pthread-stubs=0.3=1 + - python=2.7.14=2 + - readline=6.2=0 + - rhash=1.3.4=0 + - six=1.11.0=py27_1 + - sqlite=3.13.0=1 + - suitesparse=4.5.4=blas_openblas_200 + - superlu=5.2.1=blas_openblas_201 + - tbb=4.4_20160526=1 + - tk=8.5.19=2 + - vtk=8.1.0=py27_mesalib_0 + - x264=20131217=3 + - xorg-kbproto=1.0.7=1 + - xorg-libx11=1.6.4=6 + - xorg-libxau=1.0.8=3 + - xorg-libxdmcp=1.1.2=3 + - xorg-libxrender=0.9.10=0 + - xorg-renderproto=0.11.1=1 + - xorg-xproto=7.0.31=6 + - bz2file=0.98=py27_0 + - cloog=0.18.0=0 + - gcc=4.8.5=7 + - isl=0.12.2=0 + - protobuf=2.6.1=py27_1 + - system=5.8=2 + - libprotobuf=2.6.1=0 + - bullet=2.86.1=0 + - ds9=7.5=0 + - gmm=5.0=0 + - jama=125=0 + - pcl=1.8.1=0 + - qhull=7.2.0=0 + - qt=5.7.1=0 + - qwt=6.1.3=0 + - tnt=126=0 + - xalan-c=1.11=0 +prefix: /scratch/anaconda3/envs/isis -- GitLab From 218dd1a75b5bfa0a7dbb5ebaa468465e6783a091 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 22 Mar 2018 15:33:17 -0700 Subject: [PATCH 144/620] updated env and removed findlibc line --- environment.yml | 233 +++++++++++++-------------- isis/CMakeLists.txt | 1 - isis/cmake/FindAllDependencies.cmake | 22 +-- isis/cmake/FindBoost.cmake | 8 - isis/cmake/RunMakeFileTest.cmake | 4 +- 5 files changed, 129 insertions(+), 139 deletions(-) diff --git a/environment.yml b/environment.yml index a75840556a..543eb509e1 100644 --- a/environment.yml +++ b/environment.yml @@ -1,127 +1,126 @@ name: isis channels: + - krodriguez + - usgs-astrogeology + - conda-forge - probcomp - anaconda - - usgs-astrogeology - jlaura - - krodriguez - - conda-forge - defaults dependencies: - - ca-certificates=2017.08.26=h1d4fec5_0 - - dbus=1.10.20=0 - - future=0.16.0=py27_1 + - ca-certificates==2017.08.26=h1d4fec5_0 + - dbus==1.10.20=0 + - future==0.16.0=y27_1 - gst-plugins-base=1.8.0=0 - - gstreamer=1.8.0=0 - - jsoncpp=1.8.3=h3a67955_0 - - libgcc=4.8.5=1 - - libgcc-ng=7.2.0=h7cc24e2_2 - - libgfortran=3.0=0 - - libstdcxx-ng=7.2.0=h7a57d05_2 - - libxcb=1.12=1 - - mysql=5.7.20=h55eaa98_0 - - ncurses=5.9=10 - - ninja=1.7.2=0 - - patchelf=0.9=hf79760b_2 - - pip=9.0.1=py27_1 + - gstreamer==1.8.0=0 + - jsoncpp==1.8.3=h3a67955_0 + - libgcc==4.8.5=1 + - libgcc-ng==7.2.0=h7cc24e2_2 + - libgfortran==3.0=0 + - libstdcxx-ng==7.2.0=h7a57d05_2 + - libxcb==1.12=1 + - mysql==5.7.20=h55eaa98_0 + - ncurses==5.9=10 + - ninja==1.7.2=0 + - patchelf==0.9=hf79760b_2 + - pip==9.0.1=py27_1 - setuptools=38.5.1=py27_0 - - wheel=0.30.0=py27h2bc6bb2_1 - - xerces-c=3.1.4=0 - - xz=5.2.3=0 - - zlib=1.2.11=0 - - blas=1.1=openblas - - boost=1.65.1=py27_0 - - boost-cpp=1.65.1=1 - - bzip2=1.0.6=1 - - cairo=1.14.6=4 - - certifi=2018.1.18=py27_0 - - cmake=3.9.1=0 - - cspice=66=0 - - curl=7.55.1=0 - - doxygen=1.8.14=0 - - eigen=3.3.3=0 - - embree=2.14.0=0 - - expat=2.2.5=0 - - ffmpeg=3.2.4=3 - - flann=1.8.4=0 - - fontconfig=2.12.1=4 - - freeglut=3.0.0=4 - - freetype=2.7=1 - - geos=3.5.1=1 - - geotiff=1.4.2=1 - - gettext=0.19.8.1=0 - - giflib=5.1.4=0 - - glib=2.51.4=0 - - gmp=6.1.2=0 - - gsl=2.2.1=blas_openblas_3 - - harfbuzz=1.3.4=2 - - hdf5=1.8.18=2 - - icu=58.2=0 - - jasper=1.900.1=1 - - jbig=2.1=0 - - jpeg=9b=2 - - krb5=1.14.2=0 - - lapack=3.6.1=1 - - libffi=3.2.1=3 - - libiconv=1.15=0 - - libpng=1.6.28=2 - - libssh2=1.8.0=2 - - libtiff=4.0.9=0 - - libuv=1.11.0=0 - - libwebp=0.5.2=7 - - libxml2=2.9.7=0 - - llvm-meta=5.0.0=0 - - llvmdev=5.0.0=default_1 - - m4=1.4.17=1 - - mesalib=17.2.0=0 - - metis=5.1.0=3 - - mpc=1.0.3=4 - - mpfr=3.1.5=0 - - mysql-connector-c=6.1.6=0 - - nanoflann=1.2.2=0 - - nn=1.86.0=2 - - numpy=1.13.3=py27_blas_openblas_200 - - openblas=0.2.19=2 - - opencv=3.2.0=np113py27_blas_openblas_203 - - openssl=1.0.2n=0 - - pcre=8.39=0 - - pixman=0.34.0=1 - - proj4=4.9.3=5 - - pthread-stubs=0.3=1 - - python=2.7.14=2 - - readline=6.2=0 - - rhash=1.3.4=0 - - six=1.11.0=py27_1 - - sqlite=3.13.0=1 - - suitesparse=4.5.4=blas_openblas_200 - - superlu=5.2.1=blas_openblas_201 - - tbb=4.4_20160526=1 - - tk=8.5.19=2 - - vtk=8.1.0=py27_mesalib_0 - - x264=20131217=3 - - xorg-kbproto=1.0.7=1 - - xorg-libx11=1.6.4=6 - - xorg-libxau=1.0.8=3 - - xorg-libxdmcp=1.1.2=3 - - xorg-libxrender=0.9.10=0 - - xorg-renderproto=0.11.1=1 - - xorg-xproto=7.0.31=6 - - bz2file=0.98=py27_0 - - cloog=0.18.0=0 - - gcc=4.8.5=7 - - isl=0.12.2=0 - - protobuf=2.6.1=py27_1 - - system=5.8=2 - - libprotobuf=2.6.1=0 - - bullet=2.86.1=0 - - ds9=7.5=0 - - gmm=5.0=0 - - jama=125=0 - - pcl=1.8.1=0 - - qhull=7.2.0=0 - - qt=5.7.1=0 - - qwt=6.1.3=0 - - tnt=126=0 - - xalan-c=1.11=0 + - wheel==0.30.0=py27h2bc6bb2_1 + - xerces-c==3.1.4=0 + - xz==5.2.3=0 + - zlib==1.2.11=0 + - blas==1.1=openblas + - boost==1.65.1=py27_0 + - boost-cpp==1.65.1=1 + - bzip2==1.0.6=1 + - cairo==1.14.6=4 + - certifi==2018.1.18=py27_0 + - cmake==3.9.1=0 + - cspice==66=0 + - curl==7.55.1=0 + - doxygen==1.8.14=0 + - eigen==3.3.3=0 + - embree==2.14.0=0 + - expat==2.2.5=0 + - ffmpeg==3.2.4=3 + - flann==1.8.4=0 + - fontconfig==2.12.1=4 + - freeglut==3.0.0=4 + - freetype==2.7=1 + - geos==3.5.1=1 + - geotiff==1.4.2=1 + - gettext==0.19.8.1=0 + - giflib==5.1.4=0 + - glib==2.51.4=0 + - gmp==6.1.2=0 + - gsl==2.2.1=blas_openblas_3 + - harfbuzz==1.3.4=2 + - hdf5==1.8.18=2 + - icu==58.2=0 + - jasper==1.900.1=1 + - jbig==2.1=0 + - jpeg==9b=2 + - krb5==1.14.2=0 + - lapack==3.6.1=1 + - libffi==3.2.1=3 + - libiconv==1.15=0 + - libpng==1.6.28=2 + - libssh2==1.8.0=2 + - libtiff==4.0.9=0 + - libuv==1.11.0=0 + - libwebp==0.5.2=7 + - libxml2==2.9.7=0 + - llvm-meta==5.0.0=0 + - llvmdev==5.0.0=default_1 + - m4==1.4.17=1 + - mesalib==17.2.0=0 + - metis==5.1.0=3 + - mpc==1.0.3=4 + - mpfr==3.1.5=0 + - mysql-connector-c==6.1.6=0 + - nanoflann==1.2.2=0 + - nn==1.86.0=2 + - numpy==1.13.3=py27_blas_openblas_200 + - openblas==0.2.19=2 + - opencv==3.2.0=np113py27_blas_openblas_203 + - openssl==1.0.2n=0 + - pcre==8.39=0 + - pixman==0.34.0=1 + - proj4==4.9.3=5 + - pthread-stubs==0.3=1 + - python==2.7.14=2 + - readline==6.2=0 + - rhash==1.3.4=0 + - six==1.11.0=py27_1 + - sqlite==3.13.0=1 + - suitesparse==4.5.4=blas_openblas_200 + - superlu==5.2.1=blas_openblas_201 + - tbb==4.4_20160526=1 + - tk==8.5.19=2 + - vtk==8.1.0=py27_mesalib_0 + - x264==20131217=3 + - xorg-kbproto==1.0.7=1 + - xorg-libx11==1.6.4=6 + - xorg-libxau==1.0.8=3 + - xorg-libxdmcp==1.1.2=3 + - xorg-libxrender==0.9.10=0 + - xorg-renderproto==0.11.1=1 + - xorg-xproto==7.0.31=6 + - bz2file==0.98=py27_0 + - cloog==0.18.0=0 + - gcc==4.8.5=7 + - isl==0.12.2=0 + - protobuf==2.6.1=py27_1 + - system==5.8=2 + - libprotobuf==2.6.1=0 + - bullet==2.86.1=0 + - ds9==7.5=0 + - gmm==5.0=0 + - jama==125=0 + - pcl==1.8.1=0 + - qhull==7.2.0=0 + - qt==5.7.1=0 + - qwt==6.1.3=0 + - tnt==126=0 + - xalan-c==1.11=0 prefix: /scratch/anaconda3/envs/isis - diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 480f3c7d1e..47d86789a1 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -62,7 +62,6 @@ set(BUILD_SHARED_LIBS ON) # sometimes third parties do not set their rpaths correctly set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) - # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) option(isis3TestData "Directory containing Isis3TestData" OFF ) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake index 04b303e17b..6440e2d679 100644 --- a/isis/cmake/FindAllDependencies.cmake +++ b/isis/cmake/FindAllDependencies.cmake @@ -52,26 +52,26 @@ find_package(Qt5 COMPONENTS # For these, we pass in a version number, and use it in the path suffix # This only applies to v007, and outside of the building, we should only expect standard installs # The v007-specific installs are listed beside their find_package calls below: -find_package(Boost 1.59.0 REQUIRED) # "boost/boost${Boost_FIND_VERSION}/boost/" +find_package(Boost 1.59.0 REQUIRED) find_package(Bullet 2.86 REQUIRED) -find_package(Cholmod 4.4.5 REQUIRED) # "SuiteSparse/SuiteSparse${Cholmod_FIND_VERSION}/SuiteSparse/" +find_package(Cholmod 4.4.5 REQUIRED) find_package(CSPICE 65 REQUIRED) find_package(Eigen REQUIRED) find_package(Embree 2.15.0 REQUIRED) find_package(GeoTIFF 2 REQUIRED) -find_package(GMM 5.0 REQUIRED) # "/gmm/gmm-${GMM_FIND_VERSION}/gmm/" +find_package(GMM 5.0 REQUIRED) find_package(GSL 19 REQUIRED) find_package(HDF5 1.8.15 REQUIRED) -find_package(Jama 125 REQUIRED) # Jama version is 1.2.5, but v007 directory is "jama/jama125/" +find_package(Jama 125 REQUIRED) find_package(NN REQUIRED) find_package(OpenCV 3.1.0 REQUIRED) -find_package(PCL 1.8 REQUIRED) # "pcl-${PCL_FIND_VERSION}" -find_package(Protobuf 2.6.1 REQUIRED) # "google-protobuf/protobuf${Protobuf_FIND_VERSION}/" -find_package(Qwt 6 REQUIRED) # "qwt${Qwt_FIND_VERSION}" -find_package(SuperLU 4.3 REQUIRED) # "superlu/superlu${SuperLU_FIND_VERSION}/superlu/" -find_package(TIFF 4.0.5 REQUIRED) # "tiff/tiff-${TIFF_FIND_VERSION}" -find_package(TNT 126 REQUIRED) # TNT version is 1.2.6, but v007 directory is "tnt/tnt126/" -find_package(XercesC 3.1.2 REQUIRED) # "xercesc/xercesc-${XercesC_FIND_VERSION}/" +find_package(PCL 1.8 REQUIRED) +find_package(Protobuf 2.6.1 REQUIRED) +find_package(Qwt 6 REQUIRED) +find_package(SuperLU 4.3 REQUIRED) +find_package(TIFF 4.0.5 REQUIRED) +find_package(TNT 126 REQUIRED) +find_package(XercesC 3.1.2 REQUIRED) find_package(X11 6 REQUIRED) find_package(nanoflann REQUIRED) find_package(PNG REQUIRED) diff --git a/isis/cmake/FindBoost.cmake b/isis/cmake/FindBoost.cmake index 47c2e1d6ba..b8c4db1228 100644 --- a/isis/cmake/FindBoost.cmake +++ b/isis/cmake/FindBoost.cmake @@ -136,11 +136,3 @@ find_library(BOOST_RANDOM_MT_LIBRARY find_library(BOOST_WSERIALIZATION_MT_LIBRARY NAMES boost_wserialization-mt boost_wserialization ) - -find_library(PYTHON_LIBRARY - NAMES python2 python2.7 python3 -) - -find_library(C_LIBRARY - NAMES c -) diff --git a/isis/cmake/RunMakeFileTest.cmake b/isis/cmake/RunMakeFileTest.cmake index 8f275e22a9..242a9dc1ca 100644 --- a/isis/cmake/RunMakeFileTest.cmake +++ b/isis/cmake/RunMakeFileTest.cmake @@ -49,8 +49,8 @@ function(run_app_makefile_test makefile inputFolder outputFolder truthFolder bin # set(code "") # execute_process(COMMAND rm -rf ${outputFolder}) # execute_process(COMMAND rm -f ${logFile}) - - execute_process(COMMAND make test MODE=LOUD WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) + message("SOURCE FOLDER ${sourceFolder}") + execute_process(COMMAND make test WORKING_DIRECTORY ${sourceFolder} OUTPUT_VARIABLE result) message("result: ${result}") if (result MATCHES "OK") set(failed "OFF") -- GitLab From 569e00a96163bf042fa4d95f4848412d954bbcf6 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Sat, 24 Mar 2018 18:05:18 -0700 Subject: [PATCH 145/620] Update linux-spec.txt --- linux-spec.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/linux-spec.txt b/linux-spec.txt index 529ab58395..07f700f8dd 100644 --- a/linux-spec.txt +++ b/linux-spec.txt @@ -21,8 +21,6 @@ https://conda.anaconda.org/conda-forge/linux-64/jbig-2.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jpeg-9b-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.14.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-3.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libgcc-4.8.5-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgfortran-3.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-0.tar.bz2 https://conda.anaconda.org/probcomp/linux-64/libprotobuf-2.6.1-0.tar.bz2 @@ -97,7 +95,6 @@ https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -- GitLab From 85ea81f9980737fd164fd05693bcb8d18187f20f Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Tue, 27 Mar 2018 12:09:42 -0700 Subject: [PATCH 146/620] first copypasta for python binding support --- .gitignore | 162 ++++++++++ isis/Jenkinsfile => Jenkinsfile | 0 configure.py | 88 +++++ isis/sipfiles/BundleAdjust.sip | 31 ++ isis/sipfiles/BundleControlPoint.sip | 68 ++++ isis/sipfiles/BundleImage.sip | 16 + isis/sipfiles/BundleMeasure.sip | 30 ++ .../BundleObservationSolveSettings.sip | 59 ++++ isis/sipfiles/BundleResults.sip | 125 ++++++++ isis/sipfiles/BundleSettings.sip | 113 +++++++ isis/sipfiles/BundleSolutionInfo.sip | 28 ++ isis/sipfiles/ControlNet.sip | 32 ++ isis/sipfiles/ControlPoint.sip | 302 ++++++++++++++++++ isis/sipfiles/MaximumLikelihoodWFunctions.sip | 52 +++ isis/sipfiles/Statistics.sip | 41 +++ isis/sipfiles/master.sip | 85 +++++ isis/sipfiles/type_conversions.sip | 292 +++++++++++++++++ 17 files changed, 1524 insertions(+) rename isis/Jenkinsfile => Jenkinsfile (100%) create mode 100644 configure.py create mode 100644 isis/sipfiles/BundleAdjust.sip create mode 100644 isis/sipfiles/BundleControlPoint.sip create mode 100644 isis/sipfiles/BundleImage.sip create mode 100644 isis/sipfiles/BundleMeasure.sip create mode 100644 isis/sipfiles/BundleObservationSolveSettings.sip create mode 100644 isis/sipfiles/BundleResults.sip create mode 100644 isis/sipfiles/BundleSettings.sip create mode 100644 isis/sipfiles/BundleSolutionInfo.sip create mode 100644 isis/sipfiles/ControlNet.sip create mode 100644 isis/sipfiles/ControlPoint.sip create mode 100644 isis/sipfiles/MaximumLikelihoodWFunctions.sip create mode 100644 isis/sipfiles/Statistics.sip create mode 100644 isis/sipfiles/master.sip create mode 100644 isis/sipfiles/type_conversions.sip diff --git a/.gitignore b/.gitignore index 789cc4093c..c2d153b74e 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,165 @@ print.prt */tsts/*/output/* */build/ */install/ + +# Created by https://www.gitignore.io/api/c++ + +### C++ ### +# Prerequisites +*.d +*.cpp +*.c +*.hpp +*.sbf + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + + +# Created by https://www.gitignore.io/api/osx + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +# Created by https://www.gitignore.io/api/python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +.venv/ +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject diff --git a/isis/Jenkinsfile b/Jenkinsfile similarity index 100% rename from isis/Jenkinsfile rename to Jenkinsfile diff --git a/configure.py b/configure.py new file mode 100644 index 0000000000..4a3c84d735 --- /dev/null +++ b/configure.py @@ -0,0 +1,88 @@ +import os +import sys +import sipconfig +import sipdistutils +import PyQt5 +import subprocess +import argparse + +from os.path import splitext +from os.path import dirname +from glob import glob +from distutils.spawn import find_executable + +from PyQt5.QtCore import PYQT_CONFIGURATION +from plio.utils.utils import find_in_dict +from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict +from sipconfig import ModuleMakefile + +def main (module): + # The name of the SIP build file generated by SIP and used by the build + # system. + sipy_sip_dir = "sipfiles/" + module = sipy_sip_dir+module + '.sip' + build_file = "bundle"+".sbf" + target = module+".so" + + # Get the extra SIP flags needed by the imported qt module. Note that + # this normally only includes those flags (-x and -t) that relate to SIP's + # versioning system. + qt_sip_flags = qtconfigdict["sip_flags"] + + # sip_bin = current_env_path + "/bin/sip" + sip_bin = find_executable('sip') + pyqt_sip_dir = dirname(dirname(sip_bin)) + "/share/sip/PyQt5" + + # Get the PyQt configuration information. + config = sipconfig.Configuration() + + # Run SIP to generate the code. Note that we tell SIP where to find the qt + # module's specification files using the -I flag. + + errcode = os.system(" ".join([sip_bin, "-e","-c", ".", "-b", build_file, "-I", + pyqt_sip_dir, qt_sip_flags, module])) + + if errcode != 0: + print('sip exited with non zero error code: {}'.format(errcode)) + + # We are going to install the SIP specification file for this module and + # its configuration module. + installs = [] + installs.append([module, os.path.join(pyqt_sip_dir, "isis3")]) + + isis_root = os.getenv("ISISROOT") + if not isis_root: + raise("Please set ISIS") + + extra_libs = ["$(ALLLIBS)", "-Wl,-rpath,"+isis_root+"/lib", "-Wl,-rpath,"+isis_root+"/3rdParty/lib"] + + makefile = ModuleMakefile(configuration=config, build_file=build_file, installs=installs) + makefile.extra_cxxflags = ["$(ALLINCDIRS)", "-Wstrict-aliasing=0", "-Wno-unused-variable"] + makefile.extra_lflags = ["$(ALLLIBDIRS)"] + makefile.extra_include_dirs = [x[0] for x in os.walk('incs/')] + makefile.extra_lib_dirs = [isis_root + '/3rdParty/lib', isis_root + 'lib'] + makefile.generate() + + # add import line for isismake.os + isis_makefile = "include " + isis_root + "/make/isismake.os" + + with open("Makefile", 'r+') as f: + content = f.read() + content = content.replace("LIBS =", "LIBS = " + ' '.join(extra_libs)) + f.seek(0, 0) + f.write(isis_makefile + '\n\n' + content) + +if __name__ == "__main__": + clean = ['cpp', 'c', 'h', 'hpp', 'o', 'sbf'] + + # If clean is passed in, clear up all the files genreated by the scripts + if len(sys.argv) > 1 and sys.argv[1] == 'clean': + files = [] + for filetype in clean: + files.extend(glob('*.{}'.format(filetype))) + + for f in files: + os.remove(f) + exit() + + main('master') diff --git a/isis/sipfiles/BundleAdjust.sip b/isis/sipfiles/BundleAdjust.sip new file mode 100644 index 0000000000..098d7cab9c --- /dev/null +++ b/isis/sipfiles/BundleAdjust.sip @@ -0,0 +1,31 @@ +// SIP Wrapper to the ISIS3 bundle class +%Include type_conversions.sip + + +namespace Isis { + class BundleAdjust : public QObject { + %TypeHeaderCode + #include "BundleAdjust.h" + #include "IException.h" + %End + + public: + BundleAdjust(PyObject* settings, const QString &cnetFile, const QString &cubeList, bool printSummary = true) throw(Isis::IException) [(QSharedPointer, QString, QString, bool)]; + %MethodCode + int sipErr = 0; + QSharedPointer *wrappedSettings = new QSharedPointer(); + + Isis::BundleSettings *settings = (Isis::BundleSettings*) sipConvertToType(a0, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); + wrappedSettings->reset(settings); + try { + sipCpp = new sipIsis_BundleAdjust(*wrappedSettings, *a1, *a2, a3); + } + catch (Isis::IException &error) { + PyErr_SetString(sipException_Isis_IException, error.what()); + return NULL; + } + %End + + Isis::BundleSolutionInfo solveCholeskyBR() throw(Isis::IException) ; + }; +}; diff --git a/isis/sipfiles/BundleControlPoint.sip b/isis/sipfiles/BundleControlPoint.sip new file mode 100644 index 0000000000..934b00bc94 --- /dev/null +++ b/isis/sipfiles/BundleControlPoint.sip @@ -0,0 +1,68 @@ +namespace Isis { + class BundleControlPoint { + + %TypeHeaderCode + #include "BundleControlPoint.h" + #include + %End + + public: + + SIP_PYTYPE measures() throw(Isis::IException); + %MethodCode + size_t size = sipCpp->size(); + + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + Isis::BundleMeasure* cppMeasure = sipCpp->at(i).data(); + + PyObject *pyMeasure = sipConvertFromType((void*)(cppMeasure), sipType_Isis_BundleMeasure, NULL); + PyList_SetItem(l, i, pyMeasure); + } + + return l; + + %End + + // BundleControlPoint(ControlPoint *point); // default constructor + BundleControlPoint(const Isis::BundleControlPoint &src) throw(Isis::IException); + ~BundleControlPoint(); + + // copy + void copy(const Isis::BundleControlPoint &src) throw(Isis::IException); + + // mutators + // QSharedPointer addMeasure(ControlMeasure *controlMeasure); + void computeResiduals() throw(Isis::IException); + void setNumberOfRejectedMeasures(int numRejected) throw(Isis::IException); + void setRejected(bool reject) throw(Isis::IException); + void setWeights(const QSharedPointer settings, double metersToRadians) throw(Isis::IException); + void zeroNumberOfRejectedMeasures() throw(Isis::IException); + + // accessors + bool isRejected() const throw(Isis::IException); + int numberOfMeasures() const throw(Isis::IException); + int numberOfRejectedMeasures() const throw(Isis::IException); + double residualRms() const throw(Isis::IException); + QString id() const throw(Isis::IException); + Isis::ControlPoint::PointType type() const throw(Isis::IException); + + // string format methods + QString formatBundleOutputSummaryString(bool errorPropagation) const throw(Isis::IException); + QString formatBundleOutputDetailString(bool errorPropagation, double RTM, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; + QString formatValue(double value, int fieldWidth, int precision) throw(Isis::IException); + QString formatAprioriSigmaString(int type, int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; + QString formatLatitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException); + QString formatLongitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException); + QString formatRadiusAprioriSigmaString(int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; + QString formatAdjustedSigmaString(int type, int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + QString formatLatitudeAdjustedSigmaString(int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + QString formatLongitudeAdjustedSigmaString(int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + QString formatRadiusAdjustedSigmaString(int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + + }; +}; diff --git a/isis/sipfiles/BundleImage.sip b/isis/sipfiles/BundleImage.sip new file mode 100644 index 0000000000..bf8d975d4c --- /dev/null +++ b/isis/sipfiles/BundleImage.sip @@ -0,0 +1,16 @@ +namespace Isis { + class BundleImage /NoDefaultCtors/ { + %TypeHeaderCode + #include "BundleImage.h" + %End + %InstanceCode + sipCpp = new Isis::BundleImage(NULL, "", ""); + %End + public: + + + // QSharedPointer parentObservation(); + QString serialNumber() throw(Isis::IException); + QString fileName() throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/BundleMeasure.sip b/isis/sipfiles/BundleMeasure.sip new file mode 100644 index 0000000000..fd2a02942c --- /dev/null +++ b/isis/sipfiles/BundleMeasure.sip @@ -0,0 +1,30 @@ +%Include type_conversions.sip + +namespace Isis { + class BundleMeasure /NoDefaultCtors/ { + %TypeHeaderCode + #include "BundleMeasure.h" + %End + + public: + + bool isRejected() const throw(Isis::IException); + // Camera *camera() const; + // Isis::BundleControlPoint *parentControlPoint(); + QSharedPointer parentBundleImage() throw(Isis::IException); + // QSharedPointer parentBundleObservation(); + // const QSharedPointer observationSolveSettings(); + + double sample() const throw(Isis::IException); + double sampleResidual() const throw(Isis::IException); + double line() const throw(Isis::IException); + double lineResidual() const throw(Isis::IException); + double residualMagnitude() const throw(Isis::IException); + QString cubeSerialNumber() const throw(Isis::IException); + double focalPlaneComputedX() const throw(Isis::IException); + double focalPlaneComputedY() const throw(Isis::IException); + double focalPlaneMeasuredX() const throw(Isis::IException); + double focalPlaneMeasuredY() const throw(Isis::IException); + int observationIndex() const throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/BundleObservationSolveSettings.sip b/isis/sipfiles/BundleObservationSolveSettings.sip new file mode 100644 index 0000000000..89b28277c0 --- /dev/null +++ b/isis/sipfiles/BundleObservationSolveSettings.sip @@ -0,0 +1,59 @@ + +%Import QtCore/QtCoremod.sip +%Import QtXml/QtXmlmod.sip + +namespace Isis{ + class BundleObservationSolveSettings { + %TypeHeaderCode + #include "BundleObservationSolveSettings.h" + %End + public: + + enum InstrumentPointingSolveOption { + NoPointingFactors = 0, /**< Solve for none of the pointing factors.*/ + AnglesOnly = 1, /**< Solve for pointing angles: right ascension, declination + and, optionally, twist.*/ + AnglesVelocity = 2, //!< Solve for pointing angles and their angular velocities. + AnglesVelocityAcceleration = 3, /**< Solve for pointing angles, their velocities and their + accelerations.*/ + AllPointingCoefficients = 4 /**< Solve for all coefficients in the polynomials fit to + the pointing angles.*/ + }; + + //! Options for how to solve for instrument position + enum InstrumentPositionSolveOption { + NoPositionFactors = 0, /**< Solve for none of the position factors.*/ + PositionOnly = 1, /**< Solve for instrument positions only.*/ + PositionVelocity = 2, /**< Solve for instrument positions and velocities.*/ + PositionVelocityAcceleration = 3, /**< Solve for instrument positions, velocities, and + accelerations.*/ + AllPositionCoefficients = 4 /**< Solve for all coefficients in the polynomials fit to + the instrument positions.*/ + }; + + BundleObservationSolveSettings() throw(Isis::IException); + InstrumentPositionSolveOption stringToInstrumentPositionSolveOption(QString option) throw(Isis::IException); + InstrumentPointingSolveOption stringToInstrumentPointingSolveOption(QString option) throw(Isis::IException); + + void setInstrumentPositionSettings(InstrumentPositionSolveOption option, + int spkDegree = 2, + int spkSolveDegree = 2, + bool positionOverHermite = false, + double positionAprioriSigma = -1.0, + double velocityAprioriSigma = -1.0, + double accelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/; + + + void setInstrumentPointingSettings(InstrumentPointingSolveOption option, + bool solveTwist, + int ckDegree = 2, + int ckSolveDegree = 2, + bool solvePolynomialOverExisting = false, + double anglesAprioriSigma = -1.0, + double angularVelocityAprioriSigma = -1.0, + double angularAccelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/; + + + + }; +}; diff --git a/isis/sipfiles/BundleResults.sip b/isis/sipfiles/BundleResults.sip new file mode 100644 index 0000000000..777ae54aed --- /dev/null +++ b/isis/sipfiles/BundleResults.sip @@ -0,0 +1,125 @@ +%Include Statistics.sip +%Include type_conversions.sip + + +namespace Isis { + class BundleResults : public QObject { + %TypeHeaderCode + #include "BundleResults.h" + %End + + public: + BundleResults(const Isis::BundleResults &src); + void initialize(); + + void resizeSigmaStatisticsVectors(int numberImages); + // void setRmsImageResidualLists(QList rmsImageLineResiduals, + // QList rmsImageSampleResiduals, + // QList rmsImageResiduals); + // void setRmsImageResidualLists(QVector rmsImageLineResiduals, + // QVector rmsImageSampleResiduals, + // QVector rmsImageResiduals); + // void setSigmaLatitudeRange(Distance minLatDist, Distance maxLatDist, + // QString minLatPointId, QString maxLatPointId); + // void setSigmaLongitudeRange(Distance minLonDist, Distance maxLonDist, + // QString minLonPointId, QString maxLonPointId); + // void setSigmaRadiusRange(Distance minRadDist, Distance maxRadDist, + // QString minRadPointId, QString maxRadPointId); + void setRmsFromSigmaStatistics(double rmsFromSigmaLatStats, + double rmsFromSigmaLonStats, + double rmsFromSigmaRadStats); + + void printMaximumLikelihoodTierInformation() throw(Isis::IException); + void incrementMaximumLikelihoodModelIndex() throw(Isis::IException); + + void incrementFixedPoints() throw(Isis::IException); + int numberFixedPoints() const throw(Isis::IException); + void incrementHeldImages() throw(Isis::IException); + int numberHeldImages() const throw(Isis::IException); + void incrementIgnoredPoints() throw(Isis::IException); + int numberIgnoredPoints() const throw(Isis::IException); // currently unused ??? + void setRejectionLimit(double rejectionLimit) throw(Isis::IException); + void setRmsXYResiduals(double rx, double ry, double rxy) throw(Isis::IException); + + void setNumberRejectedObservations(int numberObservations) throw(Isis::IException); + void setNumberObservations(int numberObservations) throw(Isis::IException); + void setNumberImageParameters(int numberParameters) throw(Isis::IException); // ??? this is the same value an m_nRank + void resetNumberConstrainedPointParameters() throw(Isis::IException); + void incrementNumberConstrainedPointParameters(int incrementAmount) throw(Isis::IException); + void resetNumberConstrainedImageParameters() throw(Isis::IException); + void incrementNumberConstrainedImageParameters(int incrementAmount) throw(Isis::IException); + void resetNumberConstrainedTargetParameters() throw(Isis::IException); + void incrementNumberConstrainedTargetParameters(int incrementAmount) throw(Isis::IException); + void setNumberUnknownParameters(int numberParameters) throw(Isis::IException); + void computeDegreesOfFreedom() throw(Isis::IException); + + void computeSigma0(double dvtpv, Isis::BundleSettings::ConvergenceCriteria criteria) throw(Isis::IException); + void setDegreesOfFreedom(double degreesOfFreedom) throw(Isis::IException); + void setSigma0(double sigma0) throw(Isis::IException); + void setElapsedTime(double time) throw(Isis::IException); + void setElapsedTimeErrorProp(double time) throw(Isis::IException); + void setRadiansToMeters(double rtm) throw(Isis::IException); + void setConverged(bool converged) throw(Isis::IException); // or initialze method + // void setBundleControlPoints(QVector controlPoints); + // void setOutputControlNet(QSharedPointer outNet); + void setIterations(int iterations) throw(Isis::IException); + // void setObservations(BundleObservationVector observations) throw(Isis::IException); + + QList rmsImageSampleResiduals() const throw(Isis::IException); + QList rmsImageLineResiduals() const throw(Isis::IException); + QList rmsImageResiduals() const throw(Isis::IException); + QVector rmsImageXSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageYSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageZSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageRASigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageDECSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageTWISTSigmas() const throw(Isis::IException); // currently unused ??? + + // Distance minSigmaLatitudeDistance() const throw(Isis::IException); + // Distance maxSigmaLatitudeDistance() const throw(Isis::IException); + // Distance minSigmaLongitudeDistance() const throw(Isis::IException); + // Distance maxSigmaLongitudeDistance() const throw(Isis::IException); + // Distance minSigmaRadiusDistance() const throw(Isis::IException); + // Distance maxSigmaRadiusDistance() const throw(Isis::IException); + + QString maxSigmaLatitudePointId() const throw(Isis::IException); + QString minSigmaLatitudePointId() const throw(Isis::IException); + QString minSigmaLongitudePointId() const throw(Isis::IException); + QString maxSigmaLongitudePointId() const throw(Isis::IException); + QString minSigmaRadiusPointId() const throw(Isis::IException); + QString maxSigmaRadiusPointId() const throw(Isis::IException); + double sigmaLatitudeStatisticsRms() const throw(Isis::IException); + double sigmaLongitudeStatisticsRms() const throw(Isis::IException); + double sigmaRadiusStatisticsRms() const throw(Isis::IException); + double rmsRx() const throw(Isis::IException); // currently unused ??? + double rmsRy() const throw(Isis::IException); // currently unused ??? + double rmsRxy() const throw(Isis::IException); // currently unused ??? + double rejectionLimit() const throw(Isis::IException); + double radiansToMeters() const throw(Isis::IException); + int numberRejectedObservations() const throw(Isis::IException); + int numberObservations() const throw(Isis::IException); + + int numberImageParameters() const throw(Isis::IException); // ??? this is the same value an m_nRank + int numberConstrainedPointParameters() const throw(Isis::IException); + int numberConstrainedImageParameters() const throw(Isis::IException); + int numberConstrainedTargetParameters() const throw(Isis::IException); + int numberUnknownParameters() const throw(Isis::IException); + int degreesOfFreedom() const throw(Isis::IException); + double sigma0() const throw(Isis::IException); + double elapsedTime() const throw(Isis::IException); + double elapsedTimeErrorProp() const throw(Isis::IException); + bool converged() const throw(Isis::IException); // or initialze method + + QVector > &bundleControlPoints(); + QSharedPointer outputControlNet() const throw(Isis::IException); + + int iterations() const throw(Isis::IException); + + int numberMaximumLikelihoodModels() const throw(Isis::IException); + int maximumLikelihoodModelIndex() const throw(Isis::IException); + double maximumLikelihoodMedianR2Residuals() const throw(Isis::IException); + double maximumLikelihoodModelQuantile(int modelIndex) const throw(Isis::IException); + + }; + +}; diff --git a/isis/sipfiles/BundleSettings.sip b/isis/sipfiles/BundleSettings.sip new file mode 100644 index 0000000000..b6f9799ab4 --- /dev/null +++ b/isis/sipfiles/BundleSettings.sip @@ -0,0 +1,113 @@ +%Include BundleObservationSolveSettings.sip +%Include MaximumLikelihoodWFunctions.sip + +%Include type_conversions.sip + +namespace Isis { + + class BundleSettings { + %TypeHeaderCode + #include "BundleSettings.h" + #include "BundleObservationSolveSettings.h" + #include + %End + public: + + enum ConvergenceCriteria { + Sigma0, /**< The value of sigma0 will be used to determine that the bundle + adjustment has converged.*/ + ParameterCorrections /**< All parameter corrections will be used to determine that the + bundle adjustment has converged.*/ + }; + + // enum MaximumLikelihoodModel { + // NoMaximumLikelihoodEstimator, + // Huber, + // ModifiedHuber, + // Welsch, + // Chen + // }; + + BundleSettings() throw(Isis::IException); + + void setValidateNetwork(bool) throw(Isis::IException); + + void setSolveOptions(bool solveObservationMode = false, + bool updateCubeLabel = false, + bool errorPropagation = false, + bool solveRadius = false, + double globalLatitudeAprioriSigma = Isis::Null, + double globalLongitudeAprioriSigma = Isis::Null, + double globalRadiusAprioriSigma = Isis::Null) throw(Isis::IException) /KeywordArgs="Optional"/; + + void setOutlierRejection(bool outlierRejection, + double multiplier = 1.0) throw(Isis::IException); + + bool solveObservationMode() const throw(Isis::IException); + bool solveRadius() const throw(Isis::IException); + bool updateCubeLabel() const throw(Isis::IException); + bool errorPropagation() const throw(Isis::IException); + bool outlierRejection() const throw(Isis::IException); + double outlierRejectionMultiplier() const throw(Isis::IException); + double globalLatitudeAprioriSigma() const throw(Isis::IException); + double globalLongitudeAprioriSigma() const throw(Isis::IException); + double globalRadiusAprioriSigma() const throw(Isis::IException); + + int numberSolveSettings() const throw(Isis::IException); + Isis::BundleObservationSolveSettings observationSolveSettings(QString instrumentId) const throw(Isis::IException); + Isis::BundleObservationSolveSettings observationSolveSettings(int n) const throw(Isis::IException); + + void setObservationSolveOptions(QList); + // %MethodCode + // Py_ssize_t size = PyList_Size(a0); + // QList *cppSettingsList = new QList(); + // int sipErr = 0; + // for(int i = 0; i < size; i++) { + // PyObject *pyStat = PyList_GET_ITEM(a0, i); + // Isis::BundleObservationSolveSettings *settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pyStat, sipType_Isis_BundleObservationSolveSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); + // cppSettingsList->append(*settings); + // } + // + // sipCpp->setObservationSolveOptions(*cppSettingsList); + // %End + + SIP_PYLIST maximumLikelihoodEstimatorModels() const throw(Isis::IException); + %MethodCode // convert QList to Python list if tuples + typedef Isis::MaximumLikelihoodWFunctions::Model Model; + size_t size = sipCpp->maximumLikelihoodEstimatorModels().size(); + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + // get the two items from the QPair + Model *model = new Model(sipCpp->maximumLikelihoodEstimatorModels()[i].first); + double doubl = sipCpp->maximumLikelihoodEstimatorModels()[i].second; + + // Convert the two items to PyObjects + PyObject *first = sipConvertFromType((void*)(model), sipType_Isis_MaximumLikelihoodWFunctions_Model, NULL); + PyObject *second = PyFloat_FromDouble(doubl); + + // set the tuple items + PyObject *tuple = PyTuple_New(2); + PyTuple_SetItem(tuple, 0, first); + PyTuple_SetItem(tuple, 1, second); + + // Add new tuple to list + PyList_SetItem(l, i, tuple); + } + return l; + %End + + + int numberTargetBodyParameters() const throw(Isis::IException); + bool solveTargetBody() const throw(Isis::IException); + bool solvePoleRA() const throw(Isis::IException); + bool solvePoleRAVelocity() const throw(Isis::IException); + bool solvePoleDec() const throw(Isis::IException); + bool solvePoleDecVelocity() const throw(Isis::IException); + bool solvePM() const throw(Isis::IException); + bool solvePMVelocity() const throw(Isis::IException); + bool solvePMAcceleration() const throw(Isis::IException); + bool solveTriaxialRadii() const throw(Isis::IException); + bool solveMeanRadius() const throw(Isis::IException); + + }; +}; diff --git a/isis/sipfiles/BundleSolutionInfo.sip b/isis/sipfiles/BundleSolutionInfo.sip new file mode 100644 index 0000000000..7f1c27ba14 --- /dev/null +++ b/isis/sipfiles/BundleSolutionInfo.sip @@ -0,0 +1,28 @@ + +%Include type_conversions.sip + +namespace Isis{ + +class BundleSolutionInfo : public QObject { + %TypeHeaderCode + #include "BundleSolutionInfo.h" + %End + + public: + BundleSolutionInfo(const Isis::BundleSolutionInfo &src) throw(Isis::IException); + + void setOutputStatistics(Isis::BundleResults statisticsResults) throw(Isis::IException); + void setRunTime(QString runTime) throw(Isis::IException); + + QString id() const throw(Isis::IException); + QString controlNetworkFileName() const throw(Isis::IException); + QSharedPointer bundleSettings() throw(Isis::IException); + Isis::BundleResults bundleResults() throw(Isis::IException); + QString runTime() const throw(Isis::IException); + + bool outputText() throw(Isis::IException); + bool outputPointsCSV() throw(Isis::IException); + bool outputResiduals() throw(Isis::IException); + + }; // end namespace Isis +}; diff --git a/isis/sipfiles/ControlNet.sip b/isis/sipfiles/ControlNet.sip new file mode 100644 index 0000000000..51ae49eff3 --- /dev/null +++ b/isis/sipfiles/ControlNet.sip @@ -0,0 +1,32 @@ +namespace Isis { + class ControlNet : public QObject { + %TypeHeaderCode + #include "ControlNet.h" + %End + public: + ControlNet() throw(Isis::IException); + ControlNet(const Isis::ControlNet &other) throw(Isis::IException); + + void clear() throw(Isis::IException); + + void Write(const QString &filename, bool pvl = false) throw(Isis::IException); + + bool IsValid() const throw(Isis::IException); + double GetMaximumResidual() throw(Isis::IException); + QString GetNetworkId() const throw(Isis::IException); + int GetNumEditLockMeasures() throw(Isis::IException); + int GetNumEditLockPoints() throw(Isis::IException); + int GetNumIgnoredMeasures() throw(Isis::IException); + int GetNumberOfValidMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + void ClearJigsawRejected() throw(Isis::IException); + void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + int GetNumMeasures() const throw(Isis::IException); + int GetNumPoints() const throw(Isis::IException); + int GetNumValidMeasures() throw(Isis::IException); + int GetNumValidPoints() throw(Isis::IException); + QString GetTarget() const throw(Isis::IException); + QString GetUserName() const throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/ControlPoint.sip b/isis/sipfiles/ControlPoint.sip new file mode 100644 index 0000000000..9efd2942e4 --- /dev/null +++ b/isis/sipfiles/ControlPoint.sip @@ -0,0 +1,302 @@ +namespace Isis { + + class ControlPoint : public QObject { + %TypeHeaderCode + #include "ControlPoint.h" + %End + public: + enum PointType { + Fixed = 0, + Constrained = 1, + Free = 2 + }; + + + enum Status { + Failure, + Success, + PointLocked + }; + + enum ConstraintStatus { + LatitudeConstrained = 0, + LongitudeConstrained = 1, + RadiusConstrained = 2, +// XConstrained = 3, +// YConstrained = 4, +// ZConstrained = 5; + }; + + // This stuff input to jigsaw + // How did apriori source get computed?? + struct SurfacePointSource { + enum Source { + None, + User, + AverageOfMeasures, + Reference, + Basemap, + BundleSolution + }; + }; + + struct RadiusSource { + enum Source { + None, + User, + AverageOfMeasures, + Ellipsoid, + DEM, + BundleSolution + }; + }; + + ControlPoint() throw(Isis::IException); + ControlPoint(const QString &id) throw(Isis::IException); + + // Isis::ControlNet *Parent() { return parentNetwork; } + + // void Load(PvlObject &p) throw(Isis::IException); + + // void Add(ControlMeasure *measure) throw(Isis::IException); + // int Delete(ControlMeasure *measure) throw(Isis::IException); + // int Delete(QString serialNumber) throw(Isis::IException); + // int Delete(int index) throw(Isis::IException); + // Status ResetApriori() throw(Isis::IException); + + // const Isis::ControlMeasure *GetMeasure(QString serialNumber) const throw(Isis::IException); + // ControlMeasure *GetMeasure(QString serialNumber) throw(Isis::IException); + + // const ControlMeasure *GetMeasure(int index) const throw(Isis::IException); + // ControlMeasure *GetMeasure(int index) throw(Isis::IException); + + // const ControlMeasure *GetRefMeasure() const throw(Isis::IException); + // ControlMeasure *GetRefMeasure() throw(Isis::IException); + + // Status SetChooserName(QString name) throw(Isis::IException); + // Status SetDateTime(QString newDateTime) throw(Isis::IException); + // Status SetEditLock(bool editLock) throw(Isis::IException); + // Status SetId(QString id) throw(Isis::IException); + // Status SetRefMeasure(ControlMeasure *cm) throw(Isis::IException); + // Status SetRefMeasure(int index) throw(Isis::IException); + // Status SetRefMeasure(QString sn) throw(Isis::IException); + // Status SetRejected(bool rejected) throw(Isis::IException); + // Status SetIgnored(bool newIgnoreStatus) throw(Isis::IException); + // Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint) throw(Isis::IException); + // Status SetType(PointType newType) throw(Isis::IException); + // + // Status SetAprioriRadiusSource(RadiusSource::Source source) throw(Isis::IException); + // Status SetAprioriRadiusSourceFile(QString sourceFile) throw(Isis::IException); + // Status SetAprioriSurfacePoint(SurfacePoint aprioriSP) throw(Isis::IException); + // Status SetAprioriSurfacePointSource(SurfacePointSource::Source source) throw(Isis::IException); + // Status SetAprioriSurfacePointSourceFile(QString sourceFile) throw(Isis::IException); + +// Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon, +// const Distance &radius) throw(Isis::IException); + + // Status ComputeApriori() throw(Isis::IException); + // Status ComputeResiduals() throw(Isis::IException); + // Status ComputeResiduals_Millimeters() throw(Isis::IException); + // + // SurfacePoint GetAdjustedSurfacePoint() const throw(Isis::IException); + // SurfacePoint GetBestSurfacePoint() const throw(Isis::IException); + + QString GetChooserName() const throw(Isis::IException); + QString GetDateTime() const throw(Isis::IException); + bool IsEditLocked() const throw(Isis::IException); + bool IsRejected() const throw(Isis::IException); + QString GetId() const throw(Isis::IException); + bool IsIgnored() const throw(Isis::IException); + bool IsValid() const throw(Isis::IException); + bool IsInvalid() const throw(Isis::IException); + bool IsFixed() const throw(Isis::IException); + + bool HasAprioriCoordinates() throw(Isis::IException); + bool IsConstrained() throw(Isis::IException); + bool IsLatitudeConstrained() throw(Isis::IException); + bool IsLongitudeConstrained() throw(Isis::IException); + bool IsRadiusConstrained() throw(Isis::IException); + int NumberOfConstrainedCoordinates() throw(Isis::IException); + + static QString PointTypeToString(PointType type) throw(Isis::IException); + static PointType StringToPointType(QString pointTypeString) throw(Isis::IException); + + QString GetPointTypeString() const throw(Isis::IException); + // PointType GetType() const throw(Isis::IException); + + static QString RadiusSourceToString(RadiusSource::Source source) throw(Isis::IException); + static RadiusSource::Source StringToRadiusSource(QString str) throw(Isis::IException); + QString GetRadiusSourceString() const throw(Isis::IException); + static QString SurfacePointSourceToString(SurfacePointSource::Source source) throw(Isis::IException); + // static SurfacePointSource::Source StringToSurfacePointSource(QString str) throw(Isis::IException); + QString GetSurfacePointSourceString() const throw(Isis::IException); + + // SurfacePoint GetAprioriSurfacePoint() const throw(Isis::IException); + // RadiusSource::Source GetAprioriRadiusSource() const throw(Isis::IException); + // QString GetAprioriRadiusSourceFile() const throw(Isis::IException); + // SurfacePointSource::Source GetAprioriSurfacePointSource() const throw(Isis::IException); + // QString GetAprioriSurfacePointSourceFile() const throw(Isis::IException); + + int GetNumMeasures() const throw(Isis::IException); + int GetNumValidMeasures() const throw(Isis::IException); + int GetNumLockedMeasures() const throw(Isis::IException); + bool HasSerialNumber(QString serialNumber) const throw(Isis::IException); + // int IndexOf(ControlMeasure *, bool throws = true) const throw(Isis::IException); + int IndexOf(QString sn, bool throws = true) const throw(Isis::IException); + int IndexOfRefMeasure() const throw(Isis::IException); + bool IsReferenceExplicit() const throw(Isis::IException); + QString GetReferenceSN() const throw(Isis::IException); + + // Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const throw(Isis::IException); + // Statistics GetStatistic(long dataType) const throw(Isis::IException); + + // QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const throw(Isis::IException); + // QList< QString > getCubeSerialNumbers() const throw(Isis::IException); + + // const ControlMeasure *operator[](QString serialNumber) const throw(Isis::IException); + // ControlMeasure *operator[](QString serialNumber) throw(Isis::IException); + + // const ControlMeasure *operator[](int index) const throw(Isis::IException); + // ControlMeasure *operator[](int index) throw(Isis::IException); + + // bool operator!=(const ControlPoint &pPoint) const throw(Isis::IException); + // bool operator==(const ControlPoint &pPoint) const throw(Isis::IException); + // const ControlPoint &operator=(const ControlPoint &pPoint) throw(Isis::IException); + + // The next 7 methods are specifically to support BundleAdjust + void ZeroNumberOfRejectedMeasures() throw(Isis::IException); + void SetNumberOfRejectedMeasures(int numRejected) throw(Isis::IException); + int GetNumberOfRejectedMeasures() const throw(Isis::IException); + double GetSampleResidualRms() const throw(Isis::IException); + double GetLineResidualRms() const throw(Isis::IException); + double GetResidualRms() const throw(Isis::IException); + void ClearJigsawRejected() throw(Isis::IException); + + // ControlPointFileEntryV0002 ToFileEntry() const throw(Isis::IException); + + private: + // void SetExplicitReference(ControlMeasure *measure) throw(Isis::IException); + void ValidateMeasure(QString serialNumber) const throw(Isis::IException); + // void AddMeasure(ControlMeasure *measure) throw(Isis::IException); + void PointModified() throw(Isis::IException); + + + // private: + // ControlNet *parentNetwork; + // + // //!< List of Control Measures + // QHash< QString, ControlMeasure * > * measures; + // + // QStringList *cubeSerials; + // + // ControlMeasure *referenceMeasure; + // + // /** + // * This is the control point ID. This is supposed to be a unique + // * identifier for control points. This often has a number in it, and + // * looks like "T0052" where the next one is "T0053" and so on. + // */ + // QString id; + // + // /** + // * This is the user name of the person who last modified this control + // * point. Modifications are things like updating the surface point, but + // * not things like updating the last modified time. The calculations + // * relating to this control point have to actually change for this to + // * be updated. This is an empty string if we need to dynamically + // * get the username of the caller when asked for (or written to file). + // */ + // QString chooserName; + // + // /** + // * This is the last modified date and time. This is updated automatically + // * and works virtually in the same way as chooserName. + // */ + // QString dateTime; + // + // /** + // * What this control point is tying together. + // * @see PointType + // */ + // PointType type; + // + // /** + // * If we forced a build that we would normally have thrown an exception + // * for then this is set to true. Otherwise, and most of the time, this + // * is false. + // */ + // bool invalid; + // + // /** + // * This stores the edit lock state. + // * @see SetEditLock + // */ + // bool editLock; + // + // /** + // * This stores the jigsaw rejected state. + // * @see SetJigsawReject + // */ + // bool jigsawRejected; + // + // /** + // * This stores the constraint status of the a priori SurfacePoint + // * @todo Eventually add x, y, and z + // */ + // std::bitset<6> constraintStatus; + // + // /** + // * This indicates if a program has explicitely set the reference in this + // * point or the implicit reference is still the current reference. This + // * is useful for programs that want to choose the reference for all + // * points where this hasn't happened yet. + // */ + // bool referenceExplicitlySet; + // + // /** + // * True if we should preserve but ignore the entire control point and its + // * measures. + // */ + // bool ignore; + // + // //! Where the apriori surface point originated from + // SurfacePointSource::Source aprioriSurfacePointSource; + // + // //! FileName where the apriori surface point originated from + // QString aprioriSurfacePointSourceFile; + // + // /** + // * Where the apriori surface point's radius originated from, most commonly + // * used by jigsaw. + // */ + // RadiusSource::Source aprioriRadiusSource; + // + // /** + // * The name of the file that derives the apriori surface point's radius + // */ + // QString aprioriRadiusSourceFile; + // + // /** + // * The apriori surface point. This is the "known truth" or trustworthy + // * point that should not be modified unless done very explicitely. This + // * comes from places like hand picking where you really don't want the + // * surface point to vary far from this point, but some variation is + // * okay (1/10th of a pixel is fair for human accuracy for example). Very + // * often this point does not exist. + // */ + // SurfacePoint aprioriSurfacePoint; + // + // /** + // * This is the calculated, or aposterori, surface point. This is what most + // * programs should be working with and updating. + // */ + // SurfacePoint adjustedSurfacePoint; + // + // /** + // * This parameter is used and maintained by BundleAdjust for the jigsaw + // * application. It is stored here because ControlPoint contains the index + // * of the measures. + // */ + // int numberOfRejectedMeasures; + }; +}; diff --git a/isis/sipfiles/MaximumLikelihoodWFunctions.sip b/isis/sipfiles/MaximumLikelihoodWFunctions.sip new file mode 100644 index 0000000000..cbc668d80d --- /dev/null +++ b/isis/sipfiles/MaximumLikelihoodWFunctions.sip @@ -0,0 +1,52 @@ +namespace Isis { + + class MaximumLikelihoodWFunctions { + %TypeHeaderCode + #include "MaximumLikelihoodWFunctions.h" + %End + + public: + + enum Model { + Huber, + HuberModified, + Welsch, + Chen + }; + + static QString modelToString(Model model) throw(Isis::IException); + static Isis::MaximumLikelihoodWFunctions::Model stringToModel(QString modelName) throw(Isis::IException); + + MaximumLikelihoodWFunctions() throw(Isis::IException); + MaximumLikelihoodWFunctions(Model modelSelection) throw(Isis::IException); + MaximumLikelihoodWFunctions(Model modelSelection, double tweakingConstant) throw(Isis::IException); + MaximumLikelihoodWFunctions(const Isis::MaximumLikelihoodWFunctions &other) throw(Isis::IException); + + void setModel(Model modelSelection) throw(Isis::IException); // uses default tweaking constant + void setTweakingConstantDefault() throw(Isis::IException); + + void setModel(Model modelSelection, double tweakingConstant) throw(Isis::IException); + void setTweakingConstant(double tweakingConstant) throw(Isis::IException); + + Model model() const throw(Isis::IException); + double tweakingConstant() const throw(Isis::IException); + + // the W functions provide an additional weighting factor W which is used + // to 're-weight' each observation dynamically during an adjustment, the + // scalar functions provide access to various flavors of this scalar (as + // a function of the residual divided by the residuals sigma) + + double sqrtWeightScaler(double residualZScore) throw(Isis::IException); //it is often convient to use square roots of + //weights when building normals, this function + // provides the scaler for the square root of + // the weight directly + double tweakingConstantQuantile() throw(Isis::IException); // returns which quantile of the residuals is recommended to + // use as the tweaking constant, this varies as a function of + // the model being employed + + QString weightedResidualCutoff() throw(Isis::IException); + + QDataStream &write(QDataStream &stream) const throw(Isis::IException); + QDataStream &read(QDataStream &stream) throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/Statistics.sip b/isis/sipfiles/Statistics.sip new file mode 100644 index 0000000000..089b76a636 --- /dev/null +++ b/isis/sipfiles/Statistics.sip @@ -0,0 +1,41 @@ + +namespace Isis { + class Statistics : public QObject { + %TypeHeaderCode + #include "Statistics.h" + %End + public: + Statistics(const Isis::Statistics &other) throw(Isis::IException); + + void Reset() throw(Isis::IException); + + void AddData(const double *data, const unsigned int count) throw(Isis::IException); + void AddData(const double data) throw(Isis::IException); + + void RemoveData(const double *data, const unsigned int count) throw(Isis::IException); + void RemoveData(const double data) throw(Isis::IException); + + double ValidMinimum() const throw(Isis::IException); + double ValidMaximum() const throw(Isis::IException); + bool InRange(const double value) throw(Isis::IException); + bool AboveRange(const double value) throw(Isis::IException); + bool BelowRange(const double value) throw(Isis::IException); + + double Average() const throw(Isis::IException); + double StandardDeviation() const throw(Isis::IException); + double Variance() const throw(Isis::IException); + double Sum() const throw(Isis::IException); + double SumSquare() const throw(Isis::IException); + double Rms() const throw(Isis::IException); + + double Minimum() const throw(Isis::IException); + double Maximum() const throw(Isis::IException); + double ChebyshevMinimum(const double percent = 99.5) const throw(Isis::IException); + double ChebyshevMaximum(const double percent = 99.5) const throw(Isis::IException); + double BestMinimum(const double percent = 99.5) const throw(Isis::IException); + double BestMaximum(const double percent = 99.5) const throw(Isis::IException); + double ZScore(const double value) const throw(Isis::IException); + + bool RemovedData() const throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/master.sip b/isis/sipfiles/master.sip new file mode 100644 index 0000000000..8eb5eb7064 --- /dev/null +++ b/isis/sipfiles/master.sip @@ -0,0 +1,85 @@ +%Module(name=bundle, + version=0, + keyword_arguments="Optional") + +%ExportedHeaderCode + #include + #include + #include + #include + #include + + using namespace std; + + // Wraps glob to return a STD vector to avoid dealing with C style globbing + inline vector glob(const QString& pat){ + glob_t glob_result; + glob(pat.toLatin1().data(),GLOB_TILDE,NULL,&glob_result); + vector ret; + for(unsigned int i=0;i libs = glob(pat); + QLibrary lib_loader; + + for (vector::const_iterator i = libs.begin(); i != libs.end(); ++i) { + // Strip extension + QFileInfo file(*i); + QString lib_dir = file.path() + "/" + file.completeBaseName(); + + lib_loader.setFileName(lib_dir); + + // Load hint required for symbols to be accessible to other libraries loaded later + lib_loader.setLoadHints(QLibrary::ExportExternalSymbolsHint); + + bool load_ok = lib_loader.load(); + + // if verbose is true, print out load info + if (verbose) { + if (load_ok) { + cout << "Loaded " + lib_dir.toStdString() + " : OK" << endl; + } + else if (!load_ok) { + cout << "Loaded " + lib_dir.toStdString() + " : FAILED" << endl + << lib_loader.errorString().toStdString() << endl; + } + } + + } + + } +%End + +%InitialisationCode + QString isis_root = QString::fromStdString(getenv("ISISROOT")); + + load_libs(isis_root + "/3rdParty/lib/lib*"); + load_libs(isis_root + "/lib/libisis*"); +%End + +%Include type_conversions.sip + +%Include ControlPoint.sip +%Include BundleMeasure.sip +%Include BundleControlPoint.sip +%Include BundleImage.sip +%Include ControlNet.sip +%Include Statistics.sip +%Include BundleResults.sip +%Include BundleSolutionInfo.sip +%Include BundleObservationSolveSettings.sip +%Include BundleSettings.sip +%Include BundleAdjust.sip +%Include MaximumLikelihoodWFunctions.sip diff --git a/isis/sipfiles/type_conversions.sip b/isis/sipfiles/type_conversions.sip new file mode 100644 index 0000000000..7a337c444f --- /dev/null +++ b/isis/sipfiles/type_conversions.sip @@ -0,0 +1,292 @@ + +%Import QtCore/QtCoremod.sip +%Import QtXml/QtXmlmod.sip + + + +%Exception Isis::IException(SIP_Exception) /PyName=IException/ +{ +%TypeHeaderCode +#include "IException.h" +%End +%RaiseCode + const char *detail = sipExceptionRef.what(); + + SIP_BLOCK_THREADS + PyErr_SetString(sipException_Isis_IException, detail); + SIP_UNBLOCK_THREADS +%End +}; + + +%MappedType QVector > +{ + %TypeHeaderCode + #include "BundleControlPoint.h" + #include + %End + + %ConvertFromTypeCode + size_t size = sipCpp->size(); + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + + Isis::BundleControlPoint* cppCPoint = sipCpp->at(i).data(); + + PyObject *pyCPoint = sipConvertFromType((void*)(cppCPoint), sipType_Isis_BundleControlPoint, NULL); + PyList_SetItem(l, i, pyCPoint); + } + + return l; + %End + + %ConvertToTypeCode + Py_ssize_t size = PyList_Size(sipPy); + QVector > *cppPointList = new QVector > (); + int sipErr = 0; + for(int i = 0; i < size; i++) { + PyObject *pyCPoint = PyList_GET_ITEM(sipPy, i); + Isis::BundleControlPoint *cppCPoint = (Isis::BundleControlPoint*)sipConvertToType(pyCPoint, sipType_Isis_BundleControlPoint, NULL, SIP_NOT_NONE, NULL, &sipErr); + cppPointList->append(QSharedPointer(cppCPoint)); + } + + *sipCppPtr = cppPointList; + return sipGetState(sipTransferObj); + %End + +}; + +%MappedType QList +{ + %TypeHeaderCode + #include "Statistics.h" + #include + %End + + %ConvertFromTypeCode + size_t size = sipCpp->size(); + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + Isis::Statistics* cppStats = new Isis::Statistics(sipCpp->at(i)); + PyObject *pyStats = sipConvertFromType((void*)(cppStats), sipType_Isis_Statistics, NULL); + PyList_SetItem(l, i, pyStats); + } + + return l; + %End + + %ConvertToTypeCode + Py_ssize_t size = PyList_Size(sipPy); + QList *cppStatList = new QList(); + int sipErr = 0; + for(int i = 0; i < size; i++) { + PyObject *pyStat = PyList_GET_ITEM(sipPy, i); + Isis::Statistics *stats = (Isis::Statistics*)sipConvertToType(pyStat, sipType_Isis_Statistics, NULL, SIP_NOT_NONE, NULL, &sipErr); + cppStatList->append(*stats); + } + + *sipCppPtr = cppStatList; + return sipGetState(sipTransferObj); + %End +}; + + + +%MappedType QList +{ + %TypeHeaderCode + #include "BundleObservationSolveSettings.h" + #include + %End + + %ConvertFromTypeCode + PyObject *l; + + // Create the Python list of the correct length. + if ((l = PyList_New(sipCpp->size())) == NULL) + return NULL; + + for (int i = 0; i < sipCpp->size(); ++i) { + Isis::BundleObservationSolveSettings *settings = new Isis::BundleObservationSolveSettings(sipCpp->at(i)); + + PyObject *pySettings = sipConvertFromType((void*)(settings), sipType_Isis_BundleObservationSolveSettings, NULL); + PyList_SetItem(l, i, pySettings); + } + + return l; + %End + + + %ConvertToTypeCode + if (!sipIsErr) { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i), + sipType_Isis_BundleObservationSolveSettings, SIP_NOT_NONE)) + return 0; + + return 1; + } + + Py_ssize_t size = PyList_Size(sipPy); + + QList *cppSettingsList = new QList(); + int state; + + for(Py_ssize_t i = 0; i < size; i++) { + PyObject *pySettings = PyList_GET_ITEM(sipPy, i); + Isis::BundleObservationSolveSettings *settings; + + settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pySettings, sipType_Isis_BundleObservationSolveSettings, 0, SIP_NOT_NONE, &state, sipIsErr); + + if (*sipIsErr) { + sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state); + delete cppSettingsList; + return 0; + } + + cppSettingsList->append(*settings); + sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state); + } + + *sipCppPtr = cppSettingsList; + return sipGetState(sipTransferObj); + %End +}; + +// convert Bundlesettings wrapped in a QSharedPointer in Isis +%MappedType QSharedPointer +{ + %TypeHeaderCode + #include "BundleImage.h" + #include + %End + + %ConvertFromTypeCode + Isis::BundleImage *cpp = sipCpp->data(); + PyObject *py = sipConvertFromType(cpp, sipType_Isis_BundleImage, NULL); + return py; + %End + + %ConvertToTypeCode + int sipErr = 0; + QSharedPointer* cpp_qsp = new QSharedPointer(); + Isis::BundleImage *cpp = (Isis::BundleImage*)sipConvertToType(sipPy, sipType_Isis_BundleImage, NULL, SIP_NOT_NONE, NULL, &sipErr); + cpp_qsp->reset(cpp); + *sipCppPtr = cpp_qsp; + + return sipGetState(sipTransferObj); + %End +}; + + +// convert Bundlesettings wrapped in a QSharedPointer in Isis +%MappedType QSharedPointer +{ + %TypeHeaderCode + #include "BundleSettings.h" + #include + using namespace std; + %End + + %ConvertFromTypeCode + Isis::BundleSettings *settings = sipCpp->data(); + PyObject *pySettings = sipConvertFromType(settings, sipType_Isis_BundleSettings, NULL); + return pySettings; + %End + + %ConvertToTypeCode + int sipErr = 0; + QSharedPointer* wrappedSettings = new QSharedPointer(); + + Isis::BundleSettings *settings = (BundleSettings*) sipConvertToType(sipPy, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); + wrappedSettings->reset(settings); + *sipCppPtr = wrappedSettings; + + return sipGetState(sipTransferObj); + %End +}; + + +// convert Bundlesettings wrapped in a QSharedPointer in Isis +%MappedType QSharedPointer +{ + %TypeHeaderCode + #include "ControlNet.h" + #include + using namespace std; + %End + + %ConvertFromTypeCode + PyObject *pySettings = sipConvertFromType(sipCpp, sipType_Isis_ControlNet, NULL); + return pySettings; + %End + + %ConvertToTypeCode + int sipErr = 0; + QSharedPointer *qspControlNet = NULL; + if (!sipCanConvertToType(sipPy, sipType_Isis_ControlNet, SIP_NOT_NONE)) { + sipErr = 1; + } + else { + Isis::ControlNet *cppControlNet = (Isis::ControlNet*)sipConvertToType(sipPy, sipType_Isis_ControlNet, NULL, SIP_NOT_NONE, NULL, &sipErr); + qspControlNet->reset(cppControlNet); + } + + *sipCppPtr = qspControlNet; + return sipGetState(sipTransferObj); + %End +}; + + + +// Convert a python str object to a std::string. +%MappedType std::string +{ + %TypeHeaderCode + #include + %End + + %ConvertFromTypeCode + // convert an std::string to a Python (unicode) string + PyObject* newstring; + newstring = PyUnicode_DecodeUTF8(sipCpp->c_str(), sipCpp->length(), NULL); + if(newstring == NULL) { + PyErr_Clear(); + newstring = PyBytes_FromString(sipCpp->c_str()); + } + return newstring; + %End + + %ConvertToTypeCode + // Allow a Python string (or a unicode string) whenever a string is + // expected. + // If argument is a Unicode string, just decode it to UTF-8 + // If argument is a Python string, assume it's UTF-8 + if (sipIsErr == NULL) + return (PyBytes_Check(sipPy) || PyUnicode_Check(sipPy)); + + if (sipPy == Py_None) + { + *sipCppPtr = new std::string; + return 1; + } + + if (PyUnicode_Check(sipPy)) + { + PyObject* s = PyUnicode_AsEncodedString(sipPy, "UTF-8", ""); + *sipCppPtr = new std::string(PyBytes_AS_STRING(s)); + Py_DECREF(s); + return 1; + } + + if (PyBytes_Check(sipPy)) + { + *sipCppPtr = new std::string(PyBytes_AS_STRING(sipPy)); + return 1; + } + return 0; + %End +}; -- GitLab From d106484fbebaa069f0fb7fccc3e006dc9b8f6add Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 28 Mar 2018 11:46:11 -0700 Subject: [PATCH 147/620] moved findAllDepenedcies code to main CMakeLists.txt --- isis/CMakeLists.txt | 187 +++++++++++++++++++++------ isis/cmake/FindAllDependencies.cmake | 122 ----------------- 2 files changed, 150 insertions(+), 159 deletions(-) delete mode 100644 isis/cmake/FindAllDependencies.cmake diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 47d86789a1..8fc66f23fd 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -57,11 +57,6 @@ message("Detected Operating System: ${osVersionString}") # as a static library using some specialized code in Utilities.cmake. set(BUILD_SHARED_LIBS ON) -# Specify flags used -# on linux, add the conda prefix to handle possible issues with rpaths at link time -# sometimes third parties do not set their rpaths correctly -set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) - # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) option(isis3TestData "Directory containing Isis3TestData" OFF ) @@ -71,67 +66,188 @@ option(buildMissions "Build the mission specific modules" ON ) option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) option(buildTests "Set up unit, application, and module tests." ON ) option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) -option(develop "Use a devleopment configuration" ON ) +option(pybindings "Turn on to build Python bindings" OFF ) + +Iterate through all variables and extract the libraries and include directories +get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES + +# Get all include dir variables +foreach (_variableName ${_variableNames}) +#message("VAR=${_variableName}") + if (_variableName MATCHES ".+_INCLUDE_DIR$") + list(APPEND ALLINCDIRS "${${_variableName}}") + elseif (_variableName MATCHES ".+_INCLUDE_PATH$") + list(APPEND ALLINCDIRS "${${_variableName}}") + endif(_variableName MATCHES ".+_INCLUDE_DIR$") +endforeach() + +# get all Library variables +foreach (_variableName ${_variableNames}) + get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) + if (_variableName MATCHES "^CMAKE+") + elseif (_variableName MATCHES ".+_LIB$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + elseif (_variableName MATCHES ".+_LIBRARY$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + elseif (_variableName MATCHES ".+_LIBRARIES$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + endif() +endforeach() + +# Sometimes we add the same lib more than once (especially with LIBDIRS) +list(REMOVE_DUPLICATES ALLLIBDIRS) +list(REMOVE_DUPLICATES ALLLIBS) +list(REMOVE_DUPLICATES ALLINCDIRS) # if cmake install prefix is not set, and conda env is activated, use the # conda env as the install directory if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") - set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) + set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) endif() - message("Installing in: ${CMAKE_INSTALL_PREFIX}") # options only allow on/off but this flag is piped into ISIS as ENABLEJP2K # needs to be either 1 or 0 for C style true false if(JP2KFLAG) - set(JP2KFLAG 1) + set(JP2KFLAG 1) endif() # Prioritize passed in variables over env vars, probably a better way to do this if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data) - set(isis3Data $ENV{ISIS3DATA}) - set(isis3Data ON) + set(isis3Data $ENV{ISIS3DATA}) + set(isis3Data ON) endif() if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData) - set(isis3TestData $ENV{ISIS3TESTDATA}) - set(isis3TestData ON) + set(isis3TestData $ENV{ISIS3TESTDATA}) + set(isis3TestData ON) endif() if(EXISTS ${isis3Data}) - set(ENV{ISIS3DATA} "${isis3Data}") - message("Using ISIS3DATA = $ENV{ISIS3DATA}") + set(ENV{ISIS3DATA} "${isis3Data}") + message("Using ISIS3DATA = $ENV{ISIS3DATA}") else() - message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") + message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") endif() if(EXISTS ${isis3TestData}) - set(ENV{ISIS3TESTDATA} "${isis3TestData}") - message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") + set(ENV{ISIS3TESTDATA} "${isis3TestData}") + message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") else() - message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") -endif() - -if(develop) - + message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") endif() if(${testOutputDir} STREQUAL "OFF") - message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") - set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") - execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) + message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") + set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") + execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) else() - # User specified a test output folder, make sure it exists. - message("Writing test data folders to = ${testOutputDir}") - execute_process(COMMAND mkdir -p ${testOutputDir}) + # User specified a test output folder, make sure it exists. + message("Writing test data folders to = ${testOutputDir}") + execute_process(COMMAND mkdir -p ${testOutputDir}) endif() -# Set the default library extension based on the platform -if(APPLE) - set(SO ".dylib") -else() - set(SO ".so") +#=============================================================================== +#=============================================================================== + +message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") +list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) + +# Specify flags used +# on linux, add the conda prefix to handle possible issues with rpaths at link time +# sometimes third parties do not set their rpaths correctly +set(thirdPartyCppFlags -Wall \ + -std=c++11 \ + -DISIS_LITTLE_ENDIAN=1 \ + -fPIC -Wno-unused-parameter \ + -Wno-overloaded-virtual \ + -Wl,-rpath,$ENV{CONDA_PREFIX}/lib \ + -DGMM_USES_SUPERLU \ + -DENABLEJP2K=${JP2KFLAG} \ + ) + +# Flag to fix numeric literals problem with boost on linux +if(NOT APPLE) + set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) endif() +# Set python bindings configuration +if(pybindings) + find_package(Python REQUIRED) + + # use PYINSTALL_DIR to overwrite python install directory + # Better to use find Python script + if (NOT DEFINED PYINSTALL_DIR) + set(PYINSTALL_PREFIX ${PYTHON_SITE_PACKAGES_DIR}) + endif() +endif() + +# Paths to required executables +find_program(XALAN Xalan REQUIRED) +find_program(LATEX latex) +find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED) +find_program(UIC uic REQUIRED) +find_program(MOC moc REQUIRED) +find_program(RCC rcc REQUIRED) +find_program(PROTOC protoc REQUIRED) + +find_package(Qt5 COMPONENTS + Core + Concurrent + Gui + Multimedia + MultimediaWidgets + Network + OpenGL # Needed to install mesa-common-dev for this! + PrintSupport + Qml + Quick + Script + ScriptTools + Sql + Svg + Test + WebChannel + Widgets + Xml + XmlPatterns REQUIRED) + +# Some of these will have non-traditional installs with version numbers in the paths in v007 +# For these, we pass in a version number, and use it in the path suffix +# This only applies to v007, and outside of the building, we should only expect standard installs +# The v007-specific installs are listed beside their find_package calls below: +find_package(Boost 1.59.0 REQUIRED) +find_package(Bullet 2.86 REQUIRED) +find_package(Cholmod 4.4.5 REQUIRED) +find_package(CSPICE 65 REQUIRED) +find_package(Eigen REQUIRED) +find_package(Embree 2.15.0 REQUIRED) +find_package(GeoTIFF 2 REQUIRED) +find_package(GMM 5.0 REQUIRED) +find_package(GSL 19 REQUIRED) +find_package(HDF5 1.8.15 REQUIRED) +find_package(Jama 125 REQUIRED) +find_package(NN REQUIRED) +find_package(OpenCV 3.1.0 REQUIRED) +find_package(PCL 1.8 REQUIRED) +find_package(Protobuf 2.6.1 REQUIRED) +find_package(Qwt 6 REQUIRED) +find_package(SuperLU 4.3 REQUIRED) +find_package(TIFF 4.0.5 REQUIRED) +find_package(TNT 126 REQUIRED) +find_package(XercesC 3.1.2 REQUIRED) +find_package(X11 6 REQUIRED) +find_package(nanoflann REQUIRED) +find_package(PNG REQUIRED) +find_package(Kakadu) +find_package(Geos 3.5.0 REQUIRED) + +# Im this case, we specify the version numbers being searched for in the non-traditional installs. +if(APPLE) + find_package(OpenGL REQUIRED) +endif(APPLE) #=============================================================================== #=============================================================================== @@ -139,9 +255,6 @@ endif() # Add extension to find fortran until .so symlink can be added to /usr/lib64 list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5) -# Set up all the third party library dependencies. -include(FindAllDependencies) - # Allow everything to include the 3rd party libraries include_directories(SYSTEM ${ALLINCDIRS}) link_directories(${ALLLIBDIRS}) diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake deleted file mode 100644 index 6440e2d679..0000000000 --- a/isis/cmake/FindAllDependencies.cmake +++ /dev/null @@ -1,122 +0,0 @@ -#============================================================================== -# 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? -#=============================================================================== - -message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") -list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) - -# Add thirdPartyCppFlags -set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) -set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") - -# Flag to fix numeric literals problem with boost on linux -if(NOT APPLE) - set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) -endif() - -# Paths to required executables -find_program(XALAN Xalan REQUIRED) -find_program(LATEX latex) -find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED) -find_program(UIC uic REQUIRED) -find_program(MOC moc REQUIRED) -find_program(RCC rcc REQUIRED) -find_program(PROTOC protoc REQUIRED) - -find_package(Qt5 COMPONENTS - Core - Concurrent - Gui - Multimedia - MultimediaWidgets - Network - OpenGL # Needed to install mesa-common-dev for this! - PrintSupport - Qml - Quick - Script - ScriptTools - Sql - Svg - Test - WebChannel - #WebKit - #WebKitWidgets - Widgets - Xml - XmlPatterns REQUIRED) - -# Some of these will have non-traditional installs with version numbers in the paths in v007 -# For these, we pass in a version number, and use it in the path suffix -# This only applies to v007, and outside of the building, we should only expect standard installs -# The v007-specific installs are listed beside their find_package calls below: -find_package(Boost 1.59.0 REQUIRED) -find_package(Bullet 2.86 REQUIRED) -find_package(Cholmod 4.4.5 REQUIRED) -find_package(CSPICE 65 REQUIRED) -find_package(Eigen REQUIRED) -find_package(Embree 2.15.0 REQUIRED) -find_package(GeoTIFF 2 REQUIRED) -find_package(GMM 5.0 REQUIRED) -find_package(GSL 19 REQUIRED) -find_package(HDF5 1.8.15 REQUIRED) -find_package(Jama 125 REQUIRED) -find_package(NN REQUIRED) -find_package(OpenCV 3.1.0 REQUIRED) -find_package(PCL 1.8 REQUIRED) -find_package(Protobuf 2.6.1 REQUIRED) -find_package(Qwt 6 REQUIRED) -find_package(SuperLU 4.3 REQUIRED) -find_package(TIFF 4.0.5 REQUIRED) -find_package(TNT 126 REQUIRED) -find_package(XercesC 3.1.2 REQUIRED) -find_package(X11 6 REQUIRED) -find_package(nanoflann REQUIRED) -find_package(PNG REQUIRED) -find_package(Kakadu) -find_package(Geos 3.5.0 REQUIRED) - - -# Im this case, we specify the version numbers being searched for in the non-traditional installs. -if(APPLE) - find_package(OpenGL REQUIRED) -endif(APPLE) - -get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES -foreach (_variableName ${_variableNames}) -#message("VAR=${_variableName}") - if (_variableName MATCHES ".+_INCLUDE_DIR$") - list(APPEND ALLINCDIRS "${${_variableName}}") - elseif (_variableName MATCHES ".+_INCLUDE_PATH$") - list(APPEND ALLINCDIRS "${${_variableName}}") - endif(_variableName MATCHES ".+_INCLUDE_DIR$") -endforeach() - -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() -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() - -list(REMOVE_DUPLICATES ALLLIBDIRS) -list(REMOVE_DUPLICATES ALLLIBS) -list(REMOVE_DUPLICATES ALLINCDIRS) -- GitLab From 737c2871a67acb4edb8d6b27f227e11998a30563 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 28 Mar 2018 16:47:30 -0700 Subject: [PATCH 148/620] updated status messages to actually use the STATUS param + cleaner messages --- isis/CMakeLists.txt | 91 +++++++++++++++----------- isis/cmake/AddIsisModule.cmake | 2 - isis/cmake/CMakeLists.txt | 4 -- isis/cmake/FindBullet.cmake | 22 +++---- isis/cmake/FindCSPICE.cmake | 4 +- isis/cmake/FindCholmod.cmake | 18 ++--- isis/cmake/FindEigen.cmake | 2 +- isis/cmake/FindEmbree.cmake | 4 +- isis/cmake/FindGMM.cmake | 2 +- isis/cmake/FindGSL.cmake | 6 +- isis/cmake/FindGeoTIFF.cmake | 4 +- isis/cmake/FindGeos.cmake | 6 +- isis/cmake/FindHDF5.cmake | 10 +-- isis/cmake/FindJama.cmake | 2 +- isis/cmake/FindKakadu.cmake | 8 +-- isis/cmake/FindLibPython.py | 40 ++++++++++++ isis/cmake/FindNN.cmake | 4 +- isis/cmake/FindOpenCV.cmake | 28 ++++---- isis/cmake/FindPCL.cmake | 8 +-- isis/cmake/FindPNG.cmake | 4 +- isis/cmake/FindProtobuf.cmake | 4 +- isis/cmake/FindPython.cmake | 116 +++++++++++++++++++++++++++++++++ isis/cmake/FindQwt.cmake | 4 +- isis/cmake/FindSip.cmake | 57 ++++++++++++++++ isis/cmake/FindSip.py | 42 ++++++++++++ isis/cmake/FindSuperLU.cmake | 4 +- isis/cmake/FindTIFF.cmake | 4 +- isis/cmake/FindTNT.cmake | 2 +- isis/cmake/FindX11.cmake | 2 +- isis/cmake/FindXercesC.cmake | 4 +- isis/cmake/Findnanoflann.cmake | 2 +- 31 files changed, 387 insertions(+), 123 deletions(-) create mode 100644 isis/cmake/FindLibPython.py create mode 100644 isis/cmake/FindPython.cmake create mode 100644 isis/cmake/FindSip.cmake create mode 100644 isis/cmake/FindSip.py diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 8fc66f23fd..8c34f1b348 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -66,11 +66,16 @@ option(buildMissions "Build the mission specific modules" ON ) option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) option(buildTests "Set up unit, application, and module tests." ON ) option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) -option(pybindings "Turn on to build Python bindings" OFF ) +option(pybindings "Turn on to build Python bindings" ON ) -Iterate through all variables and extract the libraries and include directories + +# Iterate through all variables and extract the libraries and include directories get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES +set(ALLLIBDIRS "") +set(ALLLIBS "") +set(ALLINCDIRS "") + # Get all include dir variables foreach (_variableName ${_variableNames}) #message("VAR=${_variableName}") @@ -107,36 +112,27 @@ list(REMOVE_DUPLICATES ALLINCDIRS) if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) endif() -message("Installing in: ${CMAKE_INSTALL_PREFIX}") - -# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K -# needs to be either 1 or 0 for C style true false -if(JP2KFLAG) - set(JP2KFLAG 1) -endif() # Prioritize passed in variables over env vars, probably a better way to do this if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data) set(isis3Data $ENV{ISIS3DATA}) - set(isis3Data ON) endif() if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData) set(isis3TestData $ENV{ISIS3TESTDATA}) - set(isis3TestData ON) endif() if(EXISTS ${isis3Data}) set(ENV{ISIS3DATA} "${isis3Data}") - message("Using ISIS3DATA = $ENV{ISIS3DATA}") else() message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") + set(isis3Data OFF) endif() if(EXISTS ${isis3TestData}) set(ENV{ISIS3TESTDATA} "${isis3TestData}") - message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") else() message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") + set(isis3TestData OFF) endif() if(${testOutputDir} STREQUAL "OFF") @@ -149,25 +145,52 @@ else() execute_process(COMMAND mkdir -p ${testOutputDir}) endif() +message("========================== CONFIGURATION ========================== ") +message(STATUS "ISIS3DATA: ${isis3Data}") +message(STATUS "ISISTESTDATA: ${isis3TestData}") +message(STATUS "TEST OUTPUT DIR: ${testOutputDir}") +message(STATUS "BUILD STATIC CORE: ${buildStaticCore}") +message(STATUS "BUILD TESTS: ${buildTests}") +message(STATUS "BUILD CORE: ${buildCore}") +message(STATUS "BUILD MISSIONS: ${buildMissions}") +message(STATUS "JP2K SUPPORT: ${JP2KFLAG}") +message(STATUS "PYTHON BINDINGS: ${pybindings}") +message(STATUS "INSTALL LOCATION: ${CMAKE_INSTALL_PREFIX}") +message("=================================================================== ") #=============================================================================== #=============================================================================== -message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") -list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) +if(EXISTS ENV{CONDA_PREFIX}) + message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") + list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) +endif() + +# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K +# needs to be either 1 or 0 for C style true false +if(JP2KFLAG) + set(JP2KFLAG 1) +endif() # Specify flags used # on linux, add the conda prefix to handle possible issues with rpaths at link time # sometimes third parties do not set their rpaths correctly -set(thirdPartyCppFlags -Wall \ - -std=c++11 \ - -DISIS_LITTLE_ENDIAN=1 \ - -fPIC -Wno-unused-parameter \ - -Wno-overloaded-virtual \ - -Wl,-rpath,$ENV{CONDA_PREFIX}/lib \ - -DGMM_USES_SUPERLU \ - -DENABLEJP2K=${JP2KFLAG} \ +set(thirdPartyCppFlags -Wall + -std=c++11 + -DISIS_LITTLE_ENDIAN=1 + -fPIC -Wno-unused-parameter + -Wno-overloaded-virtual + -Wl,-rpath,$ENV{CONDA_PREFIX}/lib + -DGMM_USES_SUPERLU + -DENABLEJP2K=${JP2KFLAG} ) + # Append CPP flags set in the third party lib file to the string set in this file. + string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) + # Set up the ctest tool which is used to run all of the tests. + enable_testing() + include(CTest) + # Flag to fix numeric literals problem with boost on linux if(NOT APPLE) set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) @@ -176,7 +199,7 @@ endif() # Set python bindings configuration if(pybindings) find_package(Python REQUIRED) - + find_package(Sip REQUIRED) # use PYINSTALL_DIR to overwrite python install directory # Better to use find Python script if (NOT DEFINED PYINSTALL_DIR) @@ -269,7 +292,6 @@ ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp) file(COPY ${ISIS_HEADERS} DESTINATION ${CMAKE_BINARY_DIR}/inc) include_directories(${CMAKE_BINARY_DIR}/inc) - set(CORE_LIB_NAME isis3) # Specify relative library include paths which will be set up on @@ -283,19 +305,12 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # We will set up some links with these files at the end of the install process so # make sure they are cleared at the start of the install process. -install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})") -install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})") -install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.${SO})") -EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_BINARY_DIR}/) -install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") -install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") - -# Append CPP flags set in the third party lib file to the string set in this file. -string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) -# Set up the ctest tool which is used to run all of the tests. -enable_testing() -include(CTest) +# install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})") +# install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})") +# install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.${SO})") +# EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_BINARY_DIR}/) +# install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") +# install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") # Delete any existing plugin files in the build folder so they # don't get filled with duplicate entries. diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index aa403db34f..f4a87169d2 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -4,7 +4,6 @@ include(CodeGeneration) - # Incorporate an application folder function(add_isis_app folder libDependencies) @@ -58,7 +57,6 @@ function(add_isis_app folder libDependencies) add_makefile_test_folder(${f} ${appName}_app) endforeach() endif() - endfunction(add_isis_app) diff --git a/isis/cmake/CMakeLists.txt b/isis/cmake/CMakeLists.txt index 4bb9e778d4..8b1df97398 100644 --- a/isis/cmake/CMakeLists.txt +++ b/isis/cmake/CMakeLists.txt @@ -1,4 +1,3 @@ - # This file contains everything that should be exectuted AFTER the installation # step has completed. @@ -10,8 +9,6 @@ install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0${SO} ${CMAKE_INSTALL_P install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3${SO})") install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis${SO})") - - # On OSX, need to correct all the paths encoded in each of the distributed library files so # that they properly find the distruted files using relative paths. if (APPLE) @@ -26,5 +23,4 @@ if (APPLE) get_filename_component(name ${f} NAME) install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/plugins/${name} resetRpath)") endforeach() - endif() diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index dcc984c2b9..8b7b117683 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -23,14 +23,14 @@ find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) -message( "-- BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) -message( "-- BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) -message( "-- BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) -message( "-- BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) -message( "-- BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) -message( "-- BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) -message( "-- BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) -message( "-- BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) -message( "-- BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) -message( "-- BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) -message( "-- BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) +message(STATUS "BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) +message(STATUS "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) +message(STATUS "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) +message(STATUS "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) +message(STATUS "BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) +message(STATUS "BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) +message(STATUS "BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) +message(STATUS "BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) +message(STATUS "BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) +message(STATUS "BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) +message(STATUS "BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index 78f1af260b..3df2e1ff87 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -14,5 +14,5 @@ find_library(CSPICE_LIBRARY NAMES cspice ) -message( "-- CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) -message( "-- CSPICE LIB: " ${CSPICE_LIBRARY} ) +message(STATUS "CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) +message(STATUS "CSPICE LIB: " ${CSPICE_LIBRARY} ) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index c8119a296d..a46f6d9c36 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -36,15 +36,15 @@ endif() get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) -message( "-- CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) -message( "-- CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) -message( "-- CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) -message( "-- CAMD LIB: " ${CAMD_LIBRARY} ) -message( "-- AMD LIB: " ${AMD_LIBRARY} ) -message( "-- SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) -message( "-- FORTRAN LIB: " ${FORTRAN_LIBRARY} ) -message( "-- BLAS LIB: " ${BLAS_LIBRARY} ) +message(STATUS "CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) +message(STATUS "CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) +message(STATUS "CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) +message(STATUS "CAMD LIB: " ${CAMD_LIBRARY} ) +message(STATUS "AMD LIB: " ${AMD_LIBRARY} ) +message(STATUS "SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) +message(STATUS "FORTRAN LIB: " ${FORTRAN_LIBRARY} ) +message(STATUS "BLAS LIB: " ${BLAS_LIBRARY} ) if(NOT APPLE) - message("-- LAPACK LIB: " ${LAPACK_LIBRARY}) + message(STATUS "LAPACK LIB: " ${LAPACK_LIBRARY}) endif() diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake index ef0829284e..154a23cd59 100644 --- a/isis/cmake/FindEigen.cmake +++ b/isis/cmake/FindEigen.cmake @@ -14,4 +14,4 @@ find_path(EIGEN_ROOT_INCLUDE_DIR PATH_SUFFIXES eigen eigen3 ) -message( "-- EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) +message(STATUS "EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake index 786e3307f6..d7af1d78d6 100644 --- a/isis/cmake/FindEmbree.cmake +++ b/isis/cmake/FindEmbree.cmake @@ -16,5 +16,5 @@ find_library(EMBREE_LIBRARY get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY) -message( "-- EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) -message( "-- EMBREE LIB: " ${EMBREE_LIBRARY}) +message(STATUS "EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) +message(STATUS "EMBREE LIB: " ${EMBREE_LIBRARY}) diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake index e2a7d8da50..3787fa9534 100644 --- a/isis/cmake/FindGMM.cmake +++ b/isis/cmake/FindGMM.cmake @@ -11,4 +11,4 @@ find_path(GMM_INCLUDE_DIR get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) -message( "-- GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") +message(STATUS "GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake index cd38cf470f..105dad800e 100644 --- a/isis/cmake/FindGSL.cmake +++ b/isis/cmake/FindGSL.cmake @@ -20,6 +20,6 @@ find_library(GSL_CBLAS_LIBRARY get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY) -message( "-- GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") -message( "-- GSL LIB: ${GSL_LIBRARY}") -message( "-- GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") +message(STATUS "GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") +message(STATUS "GSL LIB: ${GSL_LIBRARY}") +message(STATUS "GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index fce2108576..9bfbb68cac 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -16,5 +16,5 @@ find_library(GEOTIFF_LIBRARY get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) -message( "-- GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") -message( "-- GEOTIFF LIB: ${GEOTIFF_LIBRARY}") +message(STATUS "GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") +message(STATUS "GEOTIFF LIB: ${GEOTIFF_LIBRARY}") diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake index 8f4cf44249..dc2df58ec2 100644 --- a/isis/cmake/FindGeos.cmake +++ b/isis/cmake/FindGeos.cmake @@ -17,8 +17,8 @@ find_library(GEOS_C_LIBRARY NAMES geos_c ) -message( "-- GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) -message( "-- GEOS LIB: " ${GEOS_LIBRARY} ) -message( "-- GEOS C LIB: " ${GEOS_C_LIBRARY} ) +message(STATUS "GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) +message(STATUS "GEOS LIB: " ${GEOS_LIBRARY} ) +message(STATUS "GEOS C LIB: " ${GEOS_C_LIBRARY} ) get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindHDF5.cmake b/isis/cmake/FindHDF5.cmake index e9abbc72b8..1ebf7edcd3 100644 --- a/isis/cmake/FindHDF5.cmake +++ b/isis/cmake/FindHDF5.cmake @@ -17,8 +17,8 @@ find_library(HDF5_HLCPP_LIBRARY NAMES hdf5_hl_cpp) get_filename_component(HDF5_ROOT_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" DIRECTORY) -message( "-- HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") -message( "-- HDF5 LIB: ${HDF5_LIBRARY}") -message( "-- HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") -message( "-- HDF5 HL LIB: ${HDF5_HL_LIBRARY}") -message( "-- HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") +message(STATUS "HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") +message(STATUS "HDF5 LIB: ${HDF5_LIBRARY}") +message(STATUS "HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") +message(STATUS "HDF5 HL LIB: ${HDF5_HL_LIBRARY}") +message(STATUS "HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake index 71de34db60..c547d3b27d 100644 --- a/isis/cmake/FindJama.cmake +++ b/isis/cmake/FindJama.cmake @@ -11,4 +11,4 @@ find_path(JAMA_INCLUDE_DIR get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY) -message( "-- JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") +message(STATUS "JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake index a6edd15542..ed637a0e6f 100644 --- a/isis/cmake/FindKakadu.cmake +++ b/isis/cmake/FindKakadu.cmake @@ -23,9 +23,9 @@ if(JP2KFLAG) get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) - message( "-- KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") - message( "-- KAKADU A LIB: ${KAKADU_A_LIBRARY}") - message( "-- KAKADU V LIB: ${KAKADU_V_LIBRARY}") + message(STATUS "KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") + message(STATUS "KAKADU A LIB: ${KAKADU_A_LIBRARY}") + message(STATUS "KAKADU V LIB: ${KAKADU_V_LIBRARY}") else() - message("-- KAKADU DISABLED") + message(STATUS "KAKADU DISABLED") endif() diff --git a/isis/cmake/FindLibPython.py b/isis/cmake/FindLibPython.py new file mode 100644 index 0000000000..1a9b1460c9 --- /dev/null +++ b/isis/cmake/FindLibPython.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2007, Simon Edwards +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the Simon Edwards nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# FindLibPython.py +# Copyright (c) 2007, Simon Edwards +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +import sys +import distutils.sysconfig + +print("exec_prefix:%s" % sys.exec_prefix) +print("short_version:%s" % sys.version[:3]) +print("long_version:%s" % sys.version.split()[0]) +print("py_inc_dir:%s" % distutils.sysconfig.get_python_inc()) +print("site_packages_dir:%s" % distutils.sysconfig.get_python_lib(plat_specific=1)) diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake index 17c030e282..fa2b596278 100644 --- a/isis/cmake/FindNN.cmake +++ b/isis/cmake/FindNN.cmake @@ -15,5 +15,5 @@ find_library(NN_LIBRARY get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) -message( "-- NN INCLUDE DIR: ${NN_INCLUDE_DIR}") -message( "-- NN LIB: ${NN_LIBRARY}") +message(STATUS "NN INCLUDE DIR: ${NN_INCLUDE_DIR}") +message(STATUS "NN LIB: ${NN_LIBRARY}") diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake index 0984686d94..0450572ef0 100644 --- a/isis/cmake/FindOpenCV.cmake +++ b/isis/cmake/FindOpenCV.cmake @@ -28,17 +28,17 @@ find_library(OPENCV_FLANN_LIBRARY NAMES opencv_flann) get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY) -message( "-- OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") -message( "-- OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") -message( "-- OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") -message( "-- OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") -message( "-- OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") -message( "-- OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") -message( "-- OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") -message( "-- OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") -message( "-- OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") -message( "-- OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") -message( "-- OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") -message( "-- OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") -message( "-- OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") -message( "-- OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") +message(STATUS "OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") +message(STATUS "OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") +message(STATUS "OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") +message(STATUS "OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") +message(STATUS "OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") +message(STATUS "OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") +message(STATUS "OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") +message(STATUS "OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") +message(STATUS "OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") +message(STATUS "OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") +message(STATUS "OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") +message(STATUS "OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") +message(STATUS "OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") +message(STATUS "OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index 625a6126d7..902b5b6b1c 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -21,7 +21,7 @@ find_library(PCL_IO_LIBRARY NAMES pcl_io) get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) -message( "-- PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") -message( "-- PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") -message( "-- PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") -message( "-- PCL IO LIB: ${PCL_IO_LIBRARY}") +message(STATUS "PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") +message(STATUS "PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") +message(STATUS "PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") +message(STATUS "PCL IO LIB: ${PCL_IO_LIBRARY}") diff --git a/isis/cmake/FindPNG.cmake b/isis/cmake/FindPNG.cmake index bc11004ec1..6c2439f113 100644 --- a/isis/cmake/FindPNG.cmake +++ b/isis/cmake/FindPNG.cmake @@ -13,5 +13,5 @@ find_library(PNG_LIBRARY NAMES png ) -message( "-- PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") -message( "-- PNG LIB: ${PNG_LIBRARY}") +message(STATUS "PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") +message(STATUS "PNG LIB: ${PNG_LIBRARY}") diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake index 5374cb50e8..74db9e4342 100644 --- a/isis/cmake/FindProtobuf.cmake +++ b/isis/cmake/FindProtobuf.cmake @@ -7,5 +7,5 @@ find_library(PROTOBUF_LIBRARY NAMES protobuf) get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) -message( "-- PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") -message( "-- PROTOBUF LIB: ${PROTOBUF_LIBRARY}") +message(STATUS "PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") +message(STATUS "PROTOBUF LIB: ${PROTOBUF_LIBRARY}") diff --git a/isis/cmake/FindPython.cmake b/isis/cmake/FindPython.cmake new file mode 100644 index 0000000000..72ed11f5da --- /dev/null +++ b/isis/cmake/FindPython.cmake @@ -0,0 +1,116 @@ +# Find Python +# ~~~~~~~~~~~ +# Find the Python interpreter and related Python directories. +# +# This file defines the following variables: +# +# PYTHON_EXECUTABLE - The path and filename of the Python interpreter. +# +# PYTHON_SHORT_VERSION - The version of the Python interpreter found, +# excluding the patch version number. (e.g. 2.5 and not 2.5.1)) +# +# PYTHON_LONG_VERSION - The version of the Python interpreter found as a human +# readable string. +# +# PYTHON_SITE_PACKAGES_DIR - Location of the Python site-packages directory. +# +# PYTHON_INCLUDE_PATH - Directory holding the python.h include file. +# +# PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library. + +# Copyright (c) 2007, Simon Edwards +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +INCLUDE(CMakeFindFrameworks) + +if(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") + # Already in cache, be silent + set(PYTHONLIBRARY_FOUND TRUE) +else(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") + + FIND_PACKAGE(PythonInterp 3) + + if(PYTHONINTERP_FOUND) + FIND_FILE(_find_lib_python_py FindLibPython.py PATHS ${CMAKE_MODULE_PATH}) + + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_lib_python_py} OUTPUT_VARIABLE python_config) + if(python_config) + STRING(REGEX REPLACE ".*exec_prefix:([^\n]+).*$" "\\1" PYTHON_PREFIX ${python_config}) + STRING(REGEX REPLACE ".*\nshort_version:([^\n]+).*$" "\\1" PYTHON_SHORT_VERSION ${python_config}) + STRING(REGEX REPLACE ".*\nlong_version:([^\n]+).*$" "\\1" PYTHON_LONG_VERSION ${python_config}) + STRING(REGEX REPLACE ".*\npy_inc_dir:([^\n]+).*$" "\\1" PYTHON_INCLUDE_PATH ${python_config}) + if(NOT PYTHON_SITE_PACKAGES_DIR) + if(NOT PYTHON_LIBS_WITH_KDE_LIBS) + STRING(REGEX REPLACE ".*\nsite_packages_dir:([^\n]+).*$" "\\1" PYTHON_SITE_PACKAGES_DIR ${python_config}) + else(NOT PYTHON_LIBS_WITH_KDE_LIBS) + set(PYTHON_SITE_PACKAGES_DIR ${KDE4_LIB_INSTALL_DIR}/python${PYTHON_SHORT_VERSION}/site-packages) + endif(NOT PYTHON_LIBS_WITH_KDE_LIBS) + endif(NOT PYTHON_SITE_PACKAGES_DIR) + STRING(REGEX REPLACE "([0-9]+).([0-9]+)" "\\1\\2" PYTHON_SHORT_VERSION_NO_DOT ${PYTHON_SHORT_VERSION}) + set(PYTHON_LIBRARY_NAMES python${PYTHON_SHORT_VERSION} python${PYTHON_SHORT_VERSION_NO_DOT} python${PYTHON_SHORT_VERSION}m python${PYTHON_SHORT_VERSION_NO_DOT}m) + if(WIN32) + STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR}) + FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs) + endif(WIN32) + FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES}) + set(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH} CACHE FILEPATH "Directory holding the python.h include file" FORCE) + set(PYTHONLIBRARY_FOUND TRUE) + endif(python_config) + + # adapted from cmake's builtin FindPythonLibs + if(APPLE) + # If a framework has been detected in the include path, make sure + # framework's versioned library (not any .dylib) is used for linking + # NOTE: don't rely upon Python.framework/Versions/Current, since that may be 2.7 + if("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") + set(PYTHON_LIBRARY "") + set(PYTHON_DEBUG_LIBRARY "") + # get clean path to just framework + STRING(REGEX REPLACE "^(.*/Python\\.framework).*$" "\\1" _py_fw "${PYTHON_INCLUDE_PATH}") + if("${_py_fw}" MATCHES "Cellar/python") + # Appears to be a Homebrew Python install; do specific fix ups + # get Homebrew prefix (may not be /usr/local) + STRING(REGEX REPLACE "^(.+)/Cellar.*$" "\\1" _hb_prefix "${_py_fw}") + # prefer the Homebrew prefix framework over only versioned Python keg + set(_py_fw "${_hb_prefix}/Frameworks/Python.framework") + # prefer the symlinked-to Homebrew site-packages over only versioned Python keg + set(PYTHON_SITE_PACKAGES_DIR "${_hb_prefix}/lib/python${PYTHON_SHORT_VERSION}/site-packages") + endif("${_py_fw}" MATCHES "Cellar/python") + # prefer the Headers subdirectory for includes + if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") + set(PYTHON_INCLUDE_PATH "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers" CACHE FILEPATH "Directory holding the python.h include file" FORCE) + endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") + endif("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") + if(NOT PYTHON_LIBRARY) + # ensure the versioned framework's library is defined, instead of relying upon -F search paths + if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") + set(PYTHON_LIBRARY "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python" CACHE FILEPATH "Python framework library" FORCE) + endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") + endif(NOT PYTHON_LIBRARY) + if(PYTHON_LIBRARY) + set(PYTHONLIBRARY_FOUND TRUE) + endif(PYTHON_LIBRARY) + endif(APPLE) + endif(PYTHONINTERP_FOUND) + + if(PYTHONLIBRARY_FOUND) + if(APPLE) + # keep reference to system or custom python site-packages + # useful during app-bundling operations + set(PYTHON_SITE_PACKAGES_SYS ${PYTHON_SITE_PACKAGES_DIR}) + endif(APPLE) + set(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) + if(NOT PYTHONLIBRARY_FIND_QUIETLY) + message(STATUS "Found Python executable: ${PYTHON_EXECUTABLE}") + message(STATUS "Found Python version: ${PYTHON_LONG_VERSION}") + message(STATUS "Found Python library: ${PYTHON_LIBRARY}") + message(STATUS "Found Python site-packages: ${PYTHON_SITE_PACKAGES_DIR}") + endif(NOT PYTHONLIBRARY_FIND_QUIETLY) + else(PYTHONLIBRARY_FOUND) + if(PYTHONLIBRARY_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Python") + endif(PYTHONLIBRARY_FIND_REQUIRED) + endif(PYTHONLIBRARY_FOUND) + +endif (EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 8b52467945..8262a57b69 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -16,5 +16,5 @@ find_library(QWT_LIBRARY get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) -message( "-- QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") -message( "-- QWT LIB: ${QWT_LIBRARY}") +message(STATUS "QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") +message(STATUS "QWT LIB: ${QWT_LIBRARY}") diff --git a/isis/cmake/FindSip.cmake b/isis/cmake/FindSip.cmake new file mode 100644 index 0000000000..cf5d73f2ca --- /dev/null +++ b/isis/cmake/FindSip.cmake @@ -0,0 +1,57 @@ + +# Find SIP +# ~~~~~~~~ +# +# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php +# +# Find the installed version of SIP. FindSIP should be called after Python +# has been found. +# +# This file defines the following variables: +# +# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number +# suitable for comparison as a string. +# +# SIP_VERSION_STR - The version of SIP found as a human readable string. +# +# SIP_BINARY_PATH - Path and filename of the SIP command line executable. +# +# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. +# +# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed +# into. + +# Copyright (c) 2007, Simon Edwards +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +IF(SIP_VERSION) + # Already in cache, be silent + SET(SIP_FOUND TRUE) +ELSE(SIP_VERSION) + + FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH}) + + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) + IF(sip_config) + STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) + STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_mod_dir:([^\n]+).*$" "\\1" SIP_MOD_DIR ${sip_config}) + SET(SIP_FOUND TRUE) + ENDIF(sip_config) + + IF(SIP_FOUND) + IF(NOT SIP_FIND_QUIETLY) + MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") + ENDIF(NOT SIP_FIND_QUIETLY) + ELSE(SIP_FOUND) + IF(SIP_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find SIP") + ENDIF(SIP_FIND_REQUIRED) + ENDIF(SIP_FOUND) + +ENDIF(SIP_VERSION) diff --git a/isis/cmake/FindSip.py b/isis/cmake/FindSip.py new file mode 100644 index 0000000000..4fd4e37ac0 --- /dev/null +++ b/isis/cmake/FindSip.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2007, Simon Edwards +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the Simon Edwards nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# FindSIP.py +# Copyright (c) 2007, Simon Edwards +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +import sipconfig + +sipcfg = sipconfig.Configuration() +print("sip_version:%06.0x" % sipcfg.sip_version) +print("sip_version_num:%d" % sipcfg.sip_version) +print("sip_version_str:%s" % sipcfg.sip_version_str) +print("sip_bin:%s" % sipcfg.sip_bin) +print("default_sip_dir:%s" % sipcfg.default_sip_dir) +print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) +print("sip_mod_dir:%s" % sipcfg.sip_mod_dir) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 7462e6dc9a..2c588bd138 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -17,5 +17,5 @@ find_library(SUPERLU_LIBRARY get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) -message( "-- SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") -message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") +message(STATUS "SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") +message(STATUS "SUPERLU LIB: ${SUPERLU_LIBRARY}") diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake index 6b7149b687..f483f58778 100644 --- a/isis/cmake/FindTIFF.cmake +++ b/isis/cmake/FindTIFF.cmake @@ -5,5 +5,5 @@ find_path(TIFF_INCLUDE_DIR find_library(TIFF_LIBRARY NAMES tiff) -message( "-- TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") -message( "-- TIFF LIB: ${TIFF_LIBRARY}") +message(STATUS "TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") +message(STATUS "TIFF LIB: ${TIFF_LIBRARY}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake index aea3a60d36..0bbfb154c0 100644 --- a/isis/cmake/FindTNT.cmake +++ b/isis/cmake/FindTNT.cmake @@ -11,4 +11,4 @@ find_path(TNT_INCLUDE_DIR get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) -message("-- TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) +message(STATUS "TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake index a1714cb526..fe25ac1315 100644 --- a/isis/cmake/FindX11.cmake +++ b/isis/cmake/FindX11.cmake @@ -8,4 +8,4 @@ find_library(X11_LIBRARY NAMES X11 ) -message( "-- X11 LIB: " ${X11_LIBRARY} ) +message(STATUS "X11 LIB: " ${X11_LIBRARY} ) diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake index 6e72e533aa..335dca4fda 100644 --- a/isis/cmake/FindXercesC.cmake +++ b/isis/cmake/FindXercesC.cmake @@ -6,5 +6,5 @@ find_path(XERCESC_INCLUDE_DIR find_library(XercesC_LIBRARY NAMES xerces-c) -message( "-- XERCES LIB: " ${XercesC_LIBRARY} ) -message( "-- XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) +message(STATUS "XERCES LIB: " ${XercesC_LIBRARY} ) +message(STATUS "XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) diff --git a/isis/cmake/Findnanoflann.cmake b/isis/cmake/Findnanoflann.cmake index 3562e074d8..3c05e57013 100644 --- a/isis/cmake/Findnanoflann.cmake +++ b/isis/cmake/Findnanoflann.cmake @@ -12,4 +12,4 @@ find_path(NANOFLANN_INCLUDE_DIR get_filename_component(NANOFLANN_ROOT_INCLUDE_DIR "${NANOFLANN_INCLUDE_DIR}" DIRECTORY) -message( "-- NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") +message(STATUS "NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") -- GitLab From c1da70cf49eed2ac538840284d1bf14b3863296e Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 28 Mar 2018 16:51:46 -0700 Subject: [PATCH 149/620] moved CONDA status emssage --- isis/CMakeLists.txt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 8c34f1b348..006c88924b 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -155,15 +155,19 @@ message(STATUS "BUILD CORE: ${buildCore}") message(STATUS "BUILD MISSIONS: ${buildMissions}") message(STATUS "JP2K SUPPORT: ${JP2KFLAG}") message(STATUS "PYTHON BINDINGS: ${pybindings}") -message(STATUS "INSTALL LOCATION: ${CMAKE_INSTALL_PREFIX}") +message(STATUS "INSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") + +if(EXISTS $ENV{CONDA_PREFIX}) + message(STATUS "CONDA PREFIX: $ENV{CONDA_PREFIX}") + list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} + $ENV{CONDA_PREFIX}/lib/cmake/Qt5) +endif() message("=================================================================== ") + #=============================================================================== #=============================================================================== -if(EXISTS ENV{CONDA_PREFIX}) - message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") - list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) -endif() + # options only allow on/off but this flag is piped into ISIS as ENABLEJP2K # needs to be either 1 or 0 for C style true false -- GitLab From 65b2c0beabeca6939a006846de6910cb122c4e02 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Wed, 28 Mar 2018 22:04:27 -0700 Subject: [PATCH 150/620] Added target for generating C++ files from sip files --- isis/CMakeLists.txt | 72 ++++++++++++++++++++++------------ isis/sipfiles/BundleAdjust.sip | 2 +- isis/sipfiles/master.sip | 2 - 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 006c88924b..e8d42fe107 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -145,29 +145,26 @@ else() execute_process(COMMAND mkdir -p ${testOutputDir}) endif() -message("========================== CONFIGURATION ========================== ") -message(STATUS "ISIS3DATA: ${isis3Data}") -message(STATUS "ISISTESTDATA: ${isis3TestData}") -message(STATUS "TEST OUTPUT DIR: ${testOutputDir}") -message(STATUS "BUILD STATIC CORE: ${buildStaticCore}") -message(STATUS "BUILD TESTS: ${buildTests}") -message(STATUS "BUILD CORE: ${buildCore}") -message(STATUS "BUILD MISSIONS: ${buildMissions}") -message(STATUS "JP2K SUPPORT: ${JP2KFLAG}") -message(STATUS "PYTHON BINDINGS: ${pybindings}") -message(STATUS "INSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") +message("CONFIGURATION") +message("\tBUILD STATIC CORE: ${buildStaticCore}") +message("\tBUILD TESTS: ${buildTests}") +message("\tBUILD CORE: ${buildCore}") +message("\tBUILD MISSIONS: ${buildMissions}") +message("\tJP2K SUPPORT: ${JP2KFLAG}") +message("\tPYTHON BINDINGS: ${pybindings}") +message("\tISIS3DATA: ${isis3Data}") +message("\tISISTESTDATA: ${isis3TestData}") +message("\tTEST OUTPUT DIR: ${testOutputDir}") +message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") + +#=============================================================================== +#=============================================================================== if(EXISTS $ENV{CONDA_PREFIX}) - message(STATUS "CONDA PREFIX: $ENV{CONDA_PREFIX}") + message("CONDA PREFIX: $ENV{CONDA_PREFIX}") list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) endif() -message("=================================================================== ") - -#=============================================================================== -#=============================================================================== - - # options only allow on/off but this flag is piped into ISIS as ENABLEJP2K # needs to be either 1 or 0 for C style true false @@ -197,10 +194,10 @@ set(thirdPartyCppFlags -Wall # Flag to fix numeric literals problem with boost on linux if(NOT APPLE) - set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) + set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals) endif() -# Set python bindings configuration +# Set python bindings configuration and set target for generating C++ files if(pybindings) find_package(Python REQUIRED) find_package(Sip REQUIRED) @@ -209,6 +206,29 @@ if(pybindings) if (NOT DEFINED PYINSTALL_DIR) set(PYINSTALL_PREFIX ${PYTHON_SITE_PACKAGES_DIR}) endif() + + # We need to get the locations for sip files, modules, etc. + set(ISIS_SIP_DIR "${CMAKE_SOURCE_DIR}/sipfiles") + set(ISIS_SIP_MODULE "${CMAKE_SOURCE_DIR}/sipfiles/master.sip") + set(SIP_BUILD_FILE "sippy.sbf") + set(ISIS_SIP_CODE_DIR ${CMAKE_BINARY_DIR}/sipsrc) + + execute_process(COMMAND mkdir -p "${ISIS_SIP_CODE_DIR}") + + # get the PYQT configuration based flags from Python + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c + "from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict;print(qtconfigdict['sip_flags'])" + OUTPUT_VARIABLE PYQT_SIP_FLAGS) + + # CMAKE doesn't handle spaces from python well when piping that into the + # command because of white space and a trailing new line, + # so we turn it into a list + string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS) + string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS}) + + add_custom_target(sipfiles + COMMAND ${SIP_BINARY_PATH} -e -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE} + COMMENT "Generating C++ code from sip files") endif() # Paths to required executables @@ -309,12 +329,12 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # We will set up some links with these files at the end of the install process so # make sure they are cleared at the start of the install process. -# install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})") -# install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})") -# install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.${SO})") -# EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_BINARY_DIR}/) -# install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") -# install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") +install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5.0${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.5${SO})") +install(CODE "EXECUTE_PROCESS(COMMAND rm -f ${CMAKE_INSTALL_PREFIX}/lib/libisis3.${SO})") +EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_BINARY_DIR}/) +install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") +install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") # Delete any existing plugin files in the build folder so they # don't get filled with duplicate entries. diff --git a/isis/sipfiles/BundleAdjust.sip b/isis/sipfiles/BundleAdjust.sip index 098d7cab9c..46753c4569 100644 --- a/isis/sipfiles/BundleAdjust.sip +++ b/isis/sipfiles/BundleAdjust.sip @@ -20,7 +20,7 @@ namespace Isis { try { sipCpp = new sipIsis_BundleAdjust(*wrappedSettings, *a1, *a2, a3); } - catch (Isis::IException &error) { + catch (Isis::IException &error) {Ã’ PyErr_SetString(sipException_Isis_IException, error.what()); return NULL; } diff --git a/isis/sipfiles/master.sip b/isis/sipfiles/master.sip index 8eb5eb7064..2d296cc1a6 100644 --- a/isis/sipfiles/master.sip +++ b/isis/sipfiles/master.sip @@ -56,9 +56,7 @@ << lib_loader.errorString().toStdString() << endl; } } - } - } %End -- GitLab From c5425c74152f6bbb10dc8ebba05961e5c8ace842 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 29 Mar 2018 01:38:56 -0700 Subject: [PATCH 151/620] updated gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index c2d153b74e..fdd6c6484c 100644 --- a/.gitignore +++ b/.gitignore @@ -49,8 +49,6 @@ print.prt ### C++ ### # Prerequisites *.d -*.cpp -*.c *.hpp *.sbf -- GitLab From 0abdeb8c0691161642eea78bf375bf63c39720fd Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 29 Mar 2018 01:57:41 -0700 Subject: [PATCH 152/620] added rule for create isispy.so --- isis/CMakeLists.txt | 182 +++++++++++++++++++-------------- isis/sipfiles/BundleAdjust.sip | 2 +- isis/sipfiles/ControlNet.sip | 1 - 3 files changed, 104 insertions(+), 81 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index e8d42fe107..075c2c8fd3 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -68,45 +68,6 @@ option(buildTests "Set up unit, application, and module tests." ON ) option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) option(pybindings "Turn on to build Python bindings" ON ) - -# Iterate through all variables and extract the libraries and include directories -get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES - -set(ALLLIBDIRS "") -set(ALLLIBS "") -set(ALLINCDIRS "") - -# Get all include dir variables -foreach (_variableName ${_variableNames}) -#message("VAR=${_variableName}") - if (_variableName MATCHES ".+_INCLUDE_DIR$") - list(APPEND ALLINCDIRS "${${_variableName}}") - elseif (_variableName MATCHES ".+_INCLUDE_PATH$") - list(APPEND ALLINCDIRS "${${_variableName}}") - endif(_variableName MATCHES ".+_INCLUDE_DIR$") -endforeach() - -# get all Library variables -foreach (_variableName ${_variableNames}) - get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) - if (_variableName MATCHES "^CMAKE+") - elseif (_variableName MATCHES ".+_LIB$") - list(APPEND ALLLIBDIRS "${LIBDIR}") - list(APPEND ALLLIBS "${${_variableName}}") - elseif (_variableName MATCHES ".+_LIBRARY$") - list(APPEND ALLLIBDIRS "${LIBDIR}") - list(APPEND ALLLIBS "${${_variableName}}") - elseif (_variableName MATCHES ".+_LIBRARIES$") - list(APPEND ALLLIBDIRS "${LIBDIR}") - list(APPEND ALLLIBS "${${_variableName}}") - endif() -endforeach() - -# Sometimes we add the same lib more than once (especially with LIBDIRS) -list(REMOVE_DUPLICATES ALLLIBDIRS) -list(REMOVE_DUPLICATES ALLLIBS) -list(REMOVE_DUPLICATES ALLINCDIRS) - # if cmake install prefix is not set, and conda env is activated, use the # conda env as the install directory if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") @@ -145,6 +106,10 @@ else() execute_process(COMMAND mkdir -p ${testOutputDir}) endif() +# inject ISISROOT +add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) +add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) + message("CONFIGURATION") message("\tBUILD STATIC CORE: ${buildStaticCore}") message("\tBUILD TESTS: ${buildTests}") @@ -160,6 +125,7 @@ message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") #=============================================================================== #=============================================================================== +# Set up Anaconda prefix in the case with a non-default conda env is activated if(EXISTS $ENV{CONDA_PREFIX}) message("CONDA PREFIX: $ENV{CONDA_PREFIX}") list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} @@ -180,7 +146,6 @@ set(thirdPartyCppFlags -Wall -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual - -Wl,-rpath,$ENV{CONDA_PREFIX}/lib -DGMM_USES_SUPERLU -DENABLEJP2K=${JP2KFLAG} ) @@ -194,41 +159,8 @@ set(thirdPartyCppFlags -Wall # Flag to fix numeric literals problem with boost on linux if(NOT APPLE) - set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals) -endif() - -# Set python bindings configuration and set target for generating C++ files -if(pybindings) - find_package(Python REQUIRED) - find_package(Sip REQUIRED) - # use PYINSTALL_DIR to overwrite python install directory - # Better to use find Python script - if (NOT DEFINED PYINSTALL_DIR) - set(PYINSTALL_PREFIX ${PYTHON_SITE_PACKAGES_DIR}) - endif() - - # We need to get the locations for sip files, modules, etc. - set(ISIS_SIP_DIR "${CMAKE_SOURCE_DIR}/sipfiles") - set(ISIS_SIP_MODULE "${CMAKE_SOURCE_DIR}/sipfiles/master.sip") - set(SIP_BUILD_FILE "sippy.sbf") - set(ISIS_SIP_CODE_DIR ${CMAKE_BINARY_DIR}/sipsrc) - - execute_process(COMMAND mkdir -p "${ISIS_SIP_CODE_DIR}") - - # get the PYQT configuration based flags from Python - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c - "from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict;print(qtconfigdict['sip_flags'])" - OUTPUT_VARIABLE PYQT_SIP_FLAGS) - - # CMAKE doesn't handle spaces from python well when piping that into the - # command because of white space and a trailing new line, - # so we turn it into a list - string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS) - string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS}) - - add_custom_target(sipfiles - COMMAND ${SIP_BINARY_PATH} -e -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE} - COMMENT "Generating C++ code from sip files") + set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals + -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) endif() # Paths to required executables @@ -296,8 +228,104 @@ if(APPLE) find_package(OpenGL REQUIRED) endif(APPLE) +if(pybindings) + find_package(Python REQUIRED) + find_package(Sip REQUIRED) +endif() + +# Iterate through all variables and extract the libraries and include directories +get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES + +set(ALLLIBDIRS "") +set(ALLLIBS "") +set(ALLINCDIRS "") + +# Get all include dir variables +foreach (_variableName ${_variableNames}) +#message("VAR=${_variableName}") + if (_variableName MATCHES ".+_INCLUDE_DIR$") + list(APPEND ALLINCDIRS "${${_variableName}}") + elseif (_variableName MATCHES ".+_INCLUDE_PATH$") + list(APPEND ALLINCDIRS "${${_variableName}}") + endif(_variableName MATCHES ".+_INCLUDE_DIR$") +endforeach() + +# get all Library variables +foreach (_variableName ${_variableNames}) + get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) + if (_variableName MATCHES "^CMAKE+") + elseif (_variableName MATCHES ".+_LIB$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + elseif (_variableName MATCHES ".+_LIBRARY$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + elseif (_variableName MATCHES ".+_LIBRARIES$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + endif() +endforeach() + +# Sometimes we add the same lib more than once (especially with LIBDIRS) +list(REMOVE_DUPLICATES ALLLIBDIRS) +list(REMOVE_DUPLICATES ALLLIBS) +list(REMOVE_DUPLICATES ALLINCDIRS) + #=============================================================================== #=============================================================================== + +# Set python bindings configuration and set target for generating C++ files +if(pybindings) + message("Configuring Python Bindings") + + if (NOT DEFINED PYINSTALL_DIR) + set(PYINSTALL_DIR ${PYTHON_SITE_PACKAGES_DIR}) + endif() + message("PYTHON BINDINGS INSTALL DIR: ${PYINSTALL_DIR}") + + # We need to get the locations for sip files, modules, etc. + set(ISIS_SIP_DIR "${CMAKE_SOURCE_DIR}/sipfiles") + set(ISIS_SIP_MODULE "${CMAKE_SOURCE_DIR}/sipfiles/master.sip") + set(SIP_BUILD_FILE "isispy.sbf") + set(ISIS_SIP_CODE_DIR ${CMAKE_BINARY_DIR}/sipsrc) + + # Create the output directory for the new .CPP files + execute_process(COMMAND mkdir -p "${ISIS_SIP_CODE_DIR}") + + # get list of output files exepected from sip + + # get the PYQT configuration based flags from Python + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c + "from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict;print(qtconfigdict['sip_flags'])" + OUTPUT_VARIABLE PYQT_SIP_FLAGS) + + # CMAKE doesn't handle spaces from python well when piping that into the + # command because of white space and a trailing new line, + # so we turn it into a list + string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS) + string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS}) + message("Generating C++ code from sip files") + execute_process(COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE}) + + # add target so users can run the command after initial configuration + add_custom_target(sipfiles + COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE} + COMMENT "Generating C++ code from sip files") + + file(GLOB SIP_GENERATED_SOURCE_FILES ${ISIS_SIP_CODE_DIR}/*.cpp) + add_library(isispy MODULE ${SIP_GENERATED_SOURCE_FILES}) + target_link_libraries(isispy ${ALLLIBS}) + target_link_libraries(isispy isis3) + set_target_properties(isispy PROPERTIES LINK_DEPENDS isis3) + add_dependencies(isispy sipfiles) + + install(TARGETS isispy DESTINATION ${PYINSTALL_DIR}) +endif() + + +#=============================================================================== +#=============================================================================== + # Start setting up the build # Add extension to find fortran until .so symlink can be added to /usr/lib64 list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5) @@ -306,10 +334,6 @@ list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5) include_directories(SYSTEM ${ALLINCDIRS}) link_directories(${ALLLIBDIRS}) -# inject ISISROOT -add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) -add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) - # add isis headers file(GLOB ISIS_HEADERS ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp) diff --git a/isis/sipfiles/BundleAdjust.sip b/isis/sipfiles/BundleAdjust.sip index 46753c4569..098d7cab9c 100644 --- a/isis/sipfiles/BundleAdjust.sip +++ b/isis/sipfiles/BundleAdjust.sip @@ -20,7 +20,7 @@ namespace Isis { try { sipCpp = new sipIsis_BundleAdjust(*wrappedSettings, *a1, *a2, a3); } - catch (Isis::IException &error) {Ã’ + catch (Isis::IException &error) { PyErr_SetString(sipException_Isis_IException, error.what()); return NULL; } diff --git a/isis/sipfiles/ControlNet.sip b/isis/sipfiles/ControlNet.sip index 51ae49eff3..73408334cf 100644 --- a/isis/sipfiles/ControlNet.sip +++ b/isis/sipfiles/ControlNet.sip @@ -11,7 +11,6 @@ namespace Isis { void Write(const QString &filename, bool pvl = false) throw(Isis::IException); - bool IsValid() const throw(Isis::IException); double GetMaximumResidual() throw(Isis::IException); QString GetNetworkId() const throw(Isis::IException); int GetNumEditLockMeasures() throw(Isis::IException); -- GitLab From abb5648215a7e0ec3b5d2bd2984f15d39cf0eab7 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 29 Mar 2018 02:04:33 -0700 Subject: [PATCH 153/620] updated comments --- isis/cmake/FindLibPython.py | 32 +------------------------------- isis/cmake/FindPython.cmake | 10 +--------- isis/cmake/FindSip.cmake | 15 +-------------- isis/cmake/FindSip.py | 33 ++------------------------------- 4 files changed, 5 insertions(+), 85 deletions(-) diff --git a/isis/cmake/FindLibPython.py b/isis/cmake/FindLibPython.py index 1a9b1460c9..38ae93fd3b 100644 --- a/isis/cmake/FindLibPython.py +++ b/isis/cmake/FindLibPython.py @@ -1,34 +1,4 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2007, Simon Edwards -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of the Simon Edwards nor the -# names of its contributors may be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# FindLibPython.py -# Copyright (c) 2007, Simon Edwards -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS import sys import distutils.sysconfig diff --git a/isis/cmake/FindPython.cmake b/isis/cmake/FindPython.cmake index 72ed11f5da..5f5a64a98d 100644 --- a/isis/cmake/FindPython.cmake +++ b/isis/cmake/FindPython.cmake @@ -1,8 +1,4 @@ -# Find Python -# ~~~~~~~~~~~ -# Find the Python interpreter and related Python directories. -# -# This file defines the following variables: +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS # # PYTHON_EXECUTABLE - The path and filename of the Python interpreter. # @@ -18,10 +14,6 @@ # # PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library. -# Copyright (c) 2007, Simon Edwards -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - INCLUDE(CMakeFindFrameworks) if(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") diff --git a/isis/cmake/FindSip.cmake b/isis/cmake/FindSip.cmake index cf5d73f2ca..ebb8c79370 100644 --- a/isis/cmake/FindSip.cmake +++ b/isis/cmake/FindSip.cmake @@ -1,13 +1,4 @@ - -# Find SIP -# ~~~~~~~~ -# -# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php -# -# Find the installed version of SIP. FindSIP should be called after Python -# has been found. -# -# This file defines the following variables: +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS # # SIP_VERSION - The version of SIP found expressed as a 6 digit hex number # suitable for comparison as a string. @@ -21,10 +12,6 @@ # SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed # into. -# Copyright (c) 2007, Simon Edwards -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - IF(SIP_VERSION) # Already in cache, be silent SET(SIP_FOUND TRUE) diff --git a/isis/cmake/FindSip.py b/isis/cmake/FindSip.py index 4fd4e37ac0..8cbb00fa5c 100644 --- a/isis/cmake/FindSip.py +++ b/isis/cmake/FindSip.py @@ -1,34 +1,5 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2007, Simon Edwards -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of the Simon Edwards nor the -# names of its contributors may be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# FindSIP.py -# Copyright (c) 2007, Simon Edwards -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS + import sipconfig -- GitLab From 578bcfa2291a6c55b75cda50fe9d6708c90d2b4e Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 29 Mar 2018 10:58:46 -0700 Subject: [PATCH 154/620] changed module to make isispy importable --- isis/sipfiles/master.sip | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/isis/sipfiles/master.sip b/isis/sipfiles/master.sip index 2d296cc1a6..2cdb950c9c 100644 --- a/isis/sipfiles/master.sip +++ b/isis/sipfiles/master.sip @@ -1,4 +1,4 @@ -%Module(name=bundle, +%Module(name=libisispy, version=0, keyword_arguments="Optional") @@ -23,7 +23,6 @@ return ret; } - // Loads library files which match the given regex. // All files matching regex are piped into QLibrary and Loaded. // @@ -60,13 +59,6 @@ } %End -%InitialisationCode - QString isis_root = QString::fromStdString(getenv("ISISROOT")); - - load_libs(isis_root + "/3rdParty/lib/lib*"); - load_libs(isis_root + "/lib/libisis*"); -%End - %Include type_conversions.sip %Include ControlPoint.sip -- GitLab From 948c7e3f44e3257bc88332888c625a590517fca6 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 29 Mar 2018 12:19:06 -0700 Subject: [PATCH 155/620] mac env is now py3 --- macos-spec.txt | 111 ++++++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 51 deletions(-) diff --git a/macos-spec.txt b/macos-spec.txt index 2af2397a2f..2fd059d08b 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,26 +2,61 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT +https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.10-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/clangdev-6.0.0-default_0.tar.bz2 +https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.6-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.8.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/future-0.16.0-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.55.0-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/graphite2-1.3.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gsl-2.4-blas_openblas_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.7.6-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.10.1-2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jsoncpp-1.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libcxx-6.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.34-0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/llvm-meta-6.0.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/llvmdev-6.0.0-default_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-0.tar.bz2 @@ -29,70 +64,44 @@ https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/ncurses-5.9-10.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/numpy-1.14.2-py36_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.20-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/opencv-3.4.1-py36_blas_openblas_200.tar.bz2 https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py36_1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.5.1-py36_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pyqt-5.6.0-py36_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/python-3.6.4-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/setuptools-39.0.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sip-4.18-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.6-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_202.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/vtk-8.1.0-py36h87a2a2b_201.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py36_2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/xz-5.2.3-0.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/zlib-1.2.11-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/certifi-2018.1.18-py27_0.tar.bz2 -https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/protobuf-3.2.0-py27_0.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/pip-9.0.1-py27_1.tar.bz2 -- GitLab From 41381caa2fd6720d9527335e00e248dd28cc3f89 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Thu, 29 Mar 2018 19:36:47 -0700 Subject: [PATCH 156/620] totally don't remember what I changed --- isis/CMakeLists.txt | 4 +++- isis/sipfiles/ControlPoint.sip | 4 ++-- isis/src/control/apps/seedgrid/tsts/errors/errors.txt | 1 + .../objs/BundleUtilities/BundleObservationSolveSettings.h | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 isis/src/control/apps/seedgrid/tsts/errors/errors.txt diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 075c2c8fd3..51ba788fab 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -57,6 +57,9 @@ message("Detected Operating System: ${osVersionString}") # as a static library using some specialized code in Utilities.cmake. set(BUILD_SHARED_LIBS ON) +# make sure to leave rpaths untouched on install +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) option(isis3TestData "Directory containing Isis3TestData" OFF ) @@ -349,7 +352,6 @@ if(APPLE) else() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};$ORIGIN/../lib;$ORIGIN/../3rdParty/lib") endif() -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # We will set up some links with these files at the end of the install process so # make sure they are cleared at the start of the install process. diff --git a/isis/sipfiles/ControlPoint.sip b/isis/sipfiles/ControlPoint.sip index 9efd2942e4..8dd80250aa 100644 --- a/isis/sipfiles/ControlPoint.sip +++ b/isis/sipfiles/ControlPoint.sip @@ -91,8 +91,8 @@ namespace Isis { // Status SetAprioriSurfacePointSource(SurfacePointSource::Source source) throw(Isis::IException); // Status SetAprioriSurfacePointSourceFile(QString sourceFile) throw(Isis::IException); -// Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon, -// const Distance &radius) throw(Isis::IException); + // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon, + // const Distance &radius) throw(Isis::IException); // Status ComputeApriori() throw(Isis::IException); // Status ComputeResiduals() throw(Isis::IException); diff --git a/isis/src/control/apps/seedgrid/tsts/errors/errors.txt b/isis/src/control/apps/seedgrid/tsts/errors/errors.txt new file mode 100644 index 0000000000..b375d4ea99 --- /dev/null +++ b/isis/src/control/apps/seedgrid/tsts/errors/errors.txt @@ -0,0 +1 @@ +[2018-03-21 14:12:04] Failed ... No truth folder or files diff --git a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h index fd570fee7c..fc69ebc8db 100644 --- a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h +++ b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h @@ -156,6 +156,7 @@ class BundleObservationSolveSettings { double positionAprioriSigma = -1.0, double velocityAprioriSigma = -1.0, double accelerationAprioriSigma = -1.0); + InstrumentPositionSolveOption instrumentPositionSolveOption() const; int spkDegree() const; int spkSolveDegree() const; -- GitLab From 96095768c06c4556893674af9ece8ddccd55e6c0 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 30 Mar 2018 11:37:59 -0700 Subject: [PATCH 157/620] updated env.yml --- environment.yml | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/environment.yml b/environment.yml index 543eb509e1..7aeb46e824 100644 --- a/environment.yml +++ b/environment.yml @@ -8,33 +8,33 @@ channels: - jlaura - defaults dependencies: - - ca-certificates==2017.08.26=h1d4fec5_0 + - ca-certificates==2017.08.26 - dbus==1.10.20=0 - - future==0.16.0=y27_1 - - gst-plugins-base=1.8.0=0 + - future==0.16.0 + - gst-plugins-base - gstreamer==1.8.0=0 - - jsoncpp==1.8.3=h3a67955_0 + - jsoncpp==1.8.3 - libgcc==4.8.5=1 - - libgcc-ng==7.2.0=h7cc24e2_2 + - libgcc-ng==7.2.0 - libgfortran==3.0=0 - - libstdcxx-ng==7.2.0=h7a57d05_2 + - libstdcxx-ng==7.2.0 - libxcb==1.12=1 - - mysql==5.7.20=h55eaa98_0 + - mysql==5.7.20 - ncurses==5.9=10 - ninja==1.7.2=0 - - patchelf==0.9=hf79760b_2 - - pip==9.0.1=py27_1 - - setuptools=38.5.1=py27_0 - - wheel==0.30.0=py27h2bc6bb2_1 + - patchelf==0.9 + - pip==9.0.1 + - setuptools=38.5.1 + - wheel==0.30.0 - xerces-c==3.1.4=0 - xz==5.2.3=0 - zlib==1.2.11=0 - blas==1.1=openblas - - boost==1.65.1=py27_0 - - boost-cpp==1.65.1=1 + - boost==1.65.1 + - boost-cpp==1.65.1 - bzip2==1.0.6=1 - cairo==1.14.6=4 - - certifi==2018.1.18=py27_0 + - certifi==2018.1.18 - cmake==3.9.1=0 - cspice==66=0 - curl==7.55.1=0 @@ -80,24 +80,24 @@ dependencies: - mysql-connector-c==6.1.6=0 - nanoflann==1.2.2=0 - nn==1.86.0=2 - - numpy==1.13.3=py27_blas_openblas_200 + - numpy==1.13.3=py36_blas_openblas_200 - openblas==0.2.19=2 - - opencv==3.2.0=np113py27_blas_openblas_203 + - opencv==3.2.0=np113py36_blas_openblas_203 - openssl==1.0.2n=0 - pcre==8.39=0 - pixman==0.34.0=1 - proj4==4.9.3=5 - pthread-stubs==0.3=1 - - python==2.7.14=2 + - python==3.6 - readline==6.2=0 - rhash==1.3.4=0 - - six==1.11.0=py27_1 + - six==1.11.0 - sqlite==3.13.0=1 - suitesparse==4.5.4=blas_openblas_200 - superlu==5.2.1=blas_openblas_201 - tbb==4.4_20160526=1 - tk==8.5.19=2 - - vtk==8.1.0=py27_mesalib_0 + - vtk==8.1.0 - x264==20131217=3 - xorg-kbproto==1.0.7=1 - xorg-libx11==1.6.4=6 @@ -106,13 +106,13 @@ dependencies: - xorg-libxrender==0.9.10=0 - xorg-renderproto==0.11.1=1 - xorg-xproto==7.0.31=6 - - bz2file==0.98=py27_0 + - bz2file==0.98 - cloog==0.18.0=0 - gcc==4.8.5=7 - isl==0.12.2=0 - - protobuf==2.6.1=py27_1 + - protobuf==3.5.1 - system==5.8=2 - - libprotobuf==2.6.1=0 + - libprotobuf==3.2.0=0 - bullet==2.86.1=0 - ds9==7.5=0 - gmm==5.0=0 -- GitLab From bd30d5db53752b681205b6325de7059f7da27094 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 30 Mar 2018 16:30:11 -0700 Subject: [PATCH 158/620] typo: FindSIP -> FindSip --- isis/cmake/FindSip.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/FindSip.cmake b/isis/cmake/FindSip.cmake index ebb8c79370..8ede37c8d7 100644 --- a/isis/cmake/FindSip.cmake +++ b/isis/cmake/FindSip.cmake @@ -17,7 +17,7 @@ IF(SIP_VERSION) SET(SIP_FOUND TRUE) ELSE(SIP_VERSION) - FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH}) + FIND_FILE(_find_sip_py FindSip.py PATHS ${CMAKE_MODULE_PATH}) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) IF(sip_config) -- GitLab From f0fa3fcb24e88891979d4cefc406aff53d5c56a9 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 30 Mar 2018 16:57:46 -0700 Subject: [PATCH 159/620] updated env --- environment.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 7aeb46e824..8514c23172 100644 --- a/environment.yml +++ b/environment.yml @@ -18,6 +18,9 @@ dependencies: - libgcc-ng==7.2.0 - libgfortran==3.0=0 - libstdcxx-ng==7.2.0 + - qwt=6.1.3 + - pyqt=5.6.0 + - sip=4.18 - libxcb==1.12=1 - mysql==5.7.20 - ncurses==5.9=10 @@ -36,7 +39,7 @@ dependencies: - cairo==1.14.6=4 - certifi==2018.1.18 - cmake==3.9.1=0 - - cspice==66=0 + - cspice==66-0 - curl==7.55.1=0 - doxygen==1.8.14=0 - eigen==3.3.3=0 -- GitLab From 1c7ea0a97c5e2677b5cf69835ba00706956bc33f Mon Sep 17 00:00:00 2001 From: Kelvinrr Date: Fri, 30 Mar 2018 19:57:39 -0700 Subject: [PATCH 160/620] updated env for linux, bullet libs sorted out --- environment.yml | 11 +++---- isis/CMakeLists.txt | 17 +++++----- linux-spec.txt | 77 ++++++++++++++++++++++++--------------------- 3 files changed, 56 insertions(+), 49 deletions(-) diff --git a/environment.yml b/environment.yml index 8514c23172..0df225c443 100644 --- a/environment.yml +++ b/environment.yml @@ -14,8 +14,6 @@ dependencies: - gst-plugins-base - gstreamer==1.8.0=0 - jsoncpp==1.8.3 - - libgcc==4.8.5=1 - - libgcc-ng==7.2.0 - libgfortran==3.0=0 - libstdcxx-ng==7.2.0 - qwt=6.1.3 @@ -51,7 +49,7 @@ dependencies: - freeglut==3.0.0=4 - freetype==2.7=1 - geos==3.5.1=1 - - geotiff==1.4.2=1 + - geotiff==1.4.2 - gettext==0.19.8.1=0 - giflib==5.1.4=0 - glib==2.51.4=0 @@ -59,7 +57,7 @@ dependencies: - gsl==2.2.1=blas_openblas_3 - harfbuzz==1.3.4=2 - hdf5==1.8.18=2 - - icu==58.2=0 + - icu==58.2 - jasper==1.900.1=1 - jbig==2.1=0 - jpeg==9b=2 @@ -111,7 +109,6 @@ dependencies: - xorg-xproto==7.0.31=6 - bz2file==0.98 - cloog==0.18.0=0 - - gcc==4.8.5=7 - isl==0.12.2=0 - protobuf==3.5.1 - system==5.8=2 @@ -122,8 +119,8 @@ dependencies: - jama==125=0 - pcl==1.8.1=0 - qhull==7.2.0=0 - - qt==5.7.1=0 - - qwt==6.1.3=0 + - qt==5.6.2 + - qwt==6.1.3 - tnt==126=0 - xalan-c==1.11=0 prefix: /scratch/anaconda3/envs/isis diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 51ba788fab..7fa0c88cff 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -141,11 +141,16 @@ if(JP2KFLAG) set(JP2KFLAG 1) endif() + # Set up the ctest tool which is used to run all of the tests. + enable_testing() + include(CTest) + # Specify flags used # on linux, add the conda prefix to handle possible issues with rpaths at link time # sometimes third parties do not set their rpaths correctly set(thirdPartyCppFlags -Wall -std=c++11 + -fPIC -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual @@ -153,19 +158,17 @@ set(thirdPartyCppFlags -Wall -DENABLEJP2K=${JP2KFLAG} ) - # Append CPP flags set in the third party lib file to the string set in this file. - string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) - # Set up the ctest tool which is used to run all of the tests. - enable_testing() - include(CTest) - # Flag to fix numeric literals problem with boost on linux if(NOT APPLE) set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) endif() + # Append CPP flags set in the third party lib file to the string set in this file. + string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) + + # Paths to required executables find_program(XALAN Xalan REQUIRED) find_program(LATEX latex) diff --git a/linux-spec.txt b/linux-spec.txt index 07f700f8dd..9803f9d82f 100644 --- a/linux-spec.txt +++ b/linux-spec.txt @@ -2,13 +2,14 @@ # $ conda create --name --file # platform: linux-64 @EXPLICIT -https://conda.anaconda.org/usgs-astrogeology/linux-64/bullet-2.86.1-0.tar.bz2 +https://conda.anaconda.org/krodriguez/linux-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/ds9-7.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/flann-1.8.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.0.0-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geos-3.5.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.19.8.1-0.tar.bz2 @@ -21,39 +22,40 @@ https://conda.anaconda.org/conda-forge/linux-64/jbig-2.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jpeg-9b-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.14.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-3.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgcc-4.8.5-1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-hdf63c60_3.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgfortran-3.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/probcomp/linux-64/libprotobuf-2.6.1-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-hdf63c60_3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libuv-1.11.0-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.6-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nanoflann-1.2.2-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/ncurses-5.9-10.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/patchelf-0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pcre-8.39-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/proj4-4.9.3-5.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.3-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/rhash-1.3.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.13.0-1.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/system-5.8-2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/system-5.8-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tbb-4.4_20160526-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tk-8.5.19-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/tnt-126-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/x264-20131217-3.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/xerces-c-3.1.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-6.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/xz-5.2.3-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.1.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.11-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cspice-66-0.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/dbus-1.10.20-0.tar.bz2 @@ -61,56 +63,61 @@ https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-3.2.4-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/glib-2.51.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.8.18-2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/isl-0.12.2-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/isl-0.12.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jasper-1.900.1-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/jsoncpp-1.8.3-h3a67955_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20170329-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libprotobuf-3.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.7-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/llvmdev-5.0.0-default_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mpfr-3.1.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/openblas-0.2.19-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/qhull-7.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/readline-6.2-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/blas-1.1-openblas.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cloog-0.18.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/cloog-0.18.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.4.2-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/gstreamer-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.8.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.0-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libwebp-0.5.2-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mesalib-17.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mpc-1.0.3-4.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/mysql-5.7.20-h55eaa98_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python-2.7.14-2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/bz2file-0.98-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mysql-5.7.20-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python-3.6.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/bz2file-0.98-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/future-0.16.0-py36_0.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/protobuf-2.6.1-py27_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py36_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/sip-4.18-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py36_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/superlu-5.2.1-blas_openblas_201.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.14.6-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cmake-3.9.1-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qt-5.7.1-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py27_mesalib_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/qt-5.6.2-6.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/setuptools-38.5.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py36_mesalib_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xerces-c-3.1.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-1.3.4-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/pcl-1.8.1-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qwt-6.1.3-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/wheel-0.30.0-py27h2bc6bb2_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py27_blas_openblas_203.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/pip-9.0.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/protobuf-3.5.1-py36_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.6.0-py36_4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/wheel-0.30.0-py36_2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py36_blas_openblas_203.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pip-9.0.1-py36_1.tar.bz2 -- GitLab From 34d99c7f50444d9766c843f2e918110a861da2b9 Mon Sep 17 00:00:00 2001 From: jlaura Date: Wed, 4 Apr 2018 06:19:35 -0700 Subject: [PATCH 161/620] Revert "Adding support for libisis python bindings" --- .gitignore | 160 ---------- configure.py | 88 ----- environment.yml | 58 ++-- isis/CMakeLists.txt | 287 +++-------------- Jenkinsfile => isis/Jenkinsfile | 0 isis/cmake/AddIsisModule.cmake | 2 + isis/cmake/CMakeLists.txt | 4 + isis/cmake/FindAllDependencies.cmake | 122 +++++++ isis/cmake/FindBullet.cmake | 22 +- isis/cmake/FindCSPICE.cmake | 4 +- isis/cmake/FindCholmod.cmake | 18 +- isis/cmake/FindEigen.cmake | 2 +- isis/cmake/FindEmbree.cmake | 4 +- isis/cmake/FindGMM.cmake | 2 +- isis/cmake/FindGSL.cmake | 6 +- isis/cmake/FindGeoTIFF.cmake | 4 +- isis/cmake/FindGeos.cmake | 6 +- isis/cmake/FindHDF5.cmake | 10 +- isis/cmake/FindJama.cmake | 2 +- isis/cmake/FindKakadu.cmake | 8 +- isis/cmake/FindLibPython.py | 10 - isis/cmake/FindNN.cmake | 4 +- isis/cmake/FindOpenCV.cmake | 28 +- isis/cmake/FindPCL.cmake | 8 +- isis/cmake/FindPNG.cmake | 4 +- isis/cmake/FindProtobuf.cmake | 4 +- isis/cmake/FindPython.cmake | 108 ------- isis/cmake/FindQwt.cmake | 4 +- isis/cmake/FindSip.cmake | 44 --- isis/cmake/FindSip.py | 13 - isis/cmake/FindSuperLU.cmake | 4 +- isis/cmake/FindTIFF.cmake | 4 +- isis/cmake/FindTNT.cmake | 2 +- isis/cmake/FindX11.cmake | 2 +- isis/cmake/FindXercesC.cmake | 4 +- isis/cmake/Findnanoflann.cmake | 2 +- isis/sipfiles/BundleAdjust.sip | 31 -- isis/sipfiles/BundleControlPoint.sip | 68 ---- isis/sipfiles/BundleImage.sip | 16 - isis/sipfiles/BundleMeasure.sip | 30 -- .../BundleObservationSolveSettings.sip | 59 ---- isis/sipfiles/BundleResults.sip | 125 -------- isis/sipfiles/BundleSettings.sip | 113 ------- isis/sipfiles/BundleSolutionInfo.sip | 28 -- isis/sipfiles/ControlNet.sip | 31 -- isis/sipfiles/ControlPoint.sip | 302 ------------------ isis/sipfiles/MaximumLikelihoodWFunctions.sip | 52 --- isis/sipfiles/Statistics.sip | 41 --- isis/sipfiles/master.sip | 75 ----- isis/sipfiles/type_conversions.sip | 292 ----------------- .../apps/seedgrid/tsts/errors/errors.txt | 1 - .../BundleObservationSolveSettings.h | 1 - linux-spec.txt | 76 +++-- macos-spec.txt | 111 +++---- 54 files changed, 376 insertions(+), 2130 deletions(-) delete mode 100644 configure.py rename Jenkinsfile => isis/Jenkinsfile (100%) create mode 100644 isis/cmake/FindAllDependencies.cmake delete mode 100644 isis/cmake/FindLibPython.py delete mode 100644 isis/cmake/FindPython.cmake delete mode 100644 isis/cmake/FindSip.cmake delete mode 100644 isis/cmake/FindSip.py delete mode 100644 isis/sipfiles/BundleAdjust.sip delete mode 100644 isis/sipfiles/BundleControlPoint.sip delete mode 100644 isis/sipfiles/BundleImage.sip delete mode 100644 isis/sipfiles/BundleMeasure.sip delete mode 100644 isis/sipfiles/BundleObservationSolveSettings.sip delete mode 100644 isis/sipfiles/BundleResults.sip delete mode 100644 isis/sipfiles/BundleSettings.sip delete mode 100644 isis/sipfiles/BundleSolutionInfo.sip delete mode 100644 isis/sipfiles/ControlNet.sip delete mode 100644 isis/sipfiles/ControlPoint.sip delete mode 100644 isis/sipfiles/MaximumLikelihoodWFunctions.sip delete mode 100644 isis/sipfiles/Statistics.sip delete mode 100644 isis/sipfiles/master.sip delete mode 100644 isis/sipfiles/type_conversions.sip delete mode 100644 isis/src/control/apps/seedgrid/tsts/errors/errors.txt diff --git a/.gitignore b/.gitignore index fdd6c6484c..789cc4093c 100644 --- a/.gitignore +++ b/.gitignore @@ -43,163 +43,3 @@ print.prt */tsts/*/output/* */build/ */install/ - -# Created by https://www.gitignore.io/api/c++ - -### C++ ### -# Prerequisites -*.d -*.hpp -*.sbf - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - - -# Created by https://www.gitignore.io/api/osx - -### OSX ### -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon -# Thumbnails -._* -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -# Created by https://www.gitignore.io/api/python - -### Python ### -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# dotenv -.env - -# virtualenv -.venv/ -venv/ -ENV/ - -# Spyder project settings -.spyderproject - -# Rope project settings -.ropeproject diff --git a/configure.py b/configure.py deleted file mode 100644 index 4a3c84d735..0000000000 --- a/configure.py +++ /dev/null @@ -1,88 +0,0 @@ -import os -import sys -import sipconfig -import sipdistutils -import PyQt5 -import subprocess -import argparse - -from os.path import splitext -from os.path import dirname -from glob import glob -from distutils.spawn import find_executable - -from PyQt5.QtCore import PYQT_CONFIGURATION -from plio.utils.utils import find_in_dict -from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict -from sipconfig import ModuleMakefile - -def main (module): - # The name of the SIP build file generated by SIP and used by the build - # system. - sipy_sip_dir = "sipfiles/" - module = sipy_sip_dir+module + '.sip' - build_file = "bundle"+".sbf" - target = module+".so" - - # Get the extra SIP flags needed by the imported qt module. Note that - # this normally only includes those flags (-x and -t) that relate to SIP's - # versioning system. - qt_sip_flags = qtconfigdict["sip_flags"] - - # sip_bin = current_env_path + "/bin/sip" - sip_bin = find_executable('sip') - pyqt_sip_dir = dirname(dirname(sip_bin)) + "/share/sip/PyQt5" - - # Get the PyQt configuration information. - config = sipconfig.Configuration() - - # Run SIP to generate the code. Note that we tell SIP where to find the qt - # module's specification files using the -I flag. - - errcode = os.system(" ".join([sip_bin, "-e","-c", ".", "-b", build_file, "-I", - pyqt_sip_dir, qt_sip_flags, module])) - - if errcode != 0: - print('sip exited with non zero error code: {}'.format(errcode)) - - # We are going to install the SIP specification file for this module and - # its configuration module. - installs = [] - installs.append([module, os.path.join(pyqt_sip_dir, "isis3")]) - - isis_root = os.getenv("ISISROOT") - if not isis_root: - raise("Please set ISIS") - - extra_libs = ["$(ALLLIBS)", "-Wl,-rpath,"+isis_root+"/lib", "-Wl,-rpath,"+isis_root+"/3rdParty/lib"] - - makefile = ModuleMakefile(configuration=config, build_file=build_file, installs=installs) - makefile.extra_cxxflags = ["$(ALLINCDIRS)", "-Wstrict-aliasing=0", "-Wno-unused-variable"] - makefile.extra_lflags = ["$(ALLLIBDIRS)"] - makefile.extra_include_dirs = [x[0] for x in os.walk('incs/')] - makefile.extra_lib_dirs = [isis_root + '/3rdParty/lib', isis_root + 'lib'] - makefile.generate() - - # add import line for isismake.os - isis_makefile = "include " + isis_root + "/make/isismake.os" - - with open("Makefile", 'r+') as f: - content = f.read() - content = content.replace("LIBS =", "LIBS = " + ' '.join(extra_libs)) - f.seek(0, 0) - f.write(isis_makefile + '\n\n' + content) - -if __name__ == "__main__": - clean = ['cpp', 'c', 'h', 'hpp', 'o', 'sbf'] - - # If clean is passed in, clear up all the files genreated by the scripts - if len(sys.argv) > 1 and sys.argv[1] == 'clean': - files = [] - for filetype in clean: - files.extend(glob('*.{}'.format(filetype))) - - for f in files: - os.remove(f) - exit() - - main('master') diff --git a/environment.yml b/environment.yml index 0df225c443..543eb509e1 100644 --- a/environment.yml +++ b/environment.yml @@ -8,36 +8,35 @@ channels: - jlaura - defaults dependencies: - - ca-certificates==2017.08.26 + - ca-certificates==2017.08.26=h1d4fec5_0 - dbus==1.10.20=0 - - future==0.16.0 - - gst-plugins-base + - future==0.16.0=y27_1 + - gst-plugins-base=1.8.0=0 - gstreamer==1.8.0=0 - - jsoncpp==1.8.3 + - jsoncpp==1.8.3=h3a67955_0 + - libgcc==4.8.5=1 + - libgcc-ng==7.2.0=h7cc24e2_2 - libgfortran==3.0=0 - - libstdcxx-ng==7.2.0 - - qwt=6.1.3 - - pyqt=5.6.0 - - sip=4.18 + - libstdcxx-ng==7.2.0=h7a57d05_2 - libxcb==1.12=1 - - mysql==5.7.20 + - mysql==5.7.20=h55eaa98_0 - ncurses==5.9=10 - ninja==1.7.2=0 - - patchelf==0.9 - - pip==9.0.1 - - setuptools=38.5.1 - - wheel==0.30.0 + - patchelf==0.9=hf79760b_2 + - pip==9.0.1=py27_1 + - setuptools=38.5.1=py27_0 + - wheel==0.30.0=py27h2bc6bb2_1 - xerces-c==3.1.4=0 - xz==5.2.3=0 - zlib==1.2.11=0 - blas==1.1=openblas - - boost==1.65.1 - - boost-cpp==1.65.1 + - boost==1.65.1=py27_0 + - boost-cpp==1.65.1=1 - bzip2==1.0.6=1 - cairo==1.14.6=4 - - certifi==2018.1.18 + - certifi==2018.1.18=py27_0 - cmake==3.9.1=0 - - cspice==66-0 + - cspice==66=0 - curl==7.55.1=0 - doxygen==1.8.14=0 - eigen==3.3.3=0 @@ -49,7 +48,7 @@ dependencies: - freeglut==3.0.0=4 - freetype==2.7=1 - geos==3.5.1=1 - - geotiff==1.4.2 + - geotiff==1.4.2=1 - gettext==0.19.8.1=0 - giflib==5.1.4=0 - glib==2.51.4=0 @@ -57,7 +56,7 @@ dependencies: - gsl==2.2.1=blas_openblas_3 - harfbuzz==1.3.4=2 - hdf5==1.8.18=2 - - icu==58.2 + - icu==58.2=0 - jasper==1.900.1=1 - jbig==2.1=0 - jpeg==9b=2 @@ -81,24 +80,24 @@ dependencies: - mysql-connector-c==6.1.6=0 - nanoflann==1.2.2=0 - nn==1.86.0=2 - - numpy==1.13.3=py36_blas_openblas_200 + - numpy==1.13.3=py27_blas_openblas_200 - openblas==0.2.19=2 - - opencv==3.2.0=np113py36_blas_openblas_203 + - opencv==3.2.0=np113py27_blas_openblas_203 - openssl==1.0.2n=0 - pcre==8.39=0 - pixman==0.34.0=1 - proj4==4.9.3=5 - pthread-stubs==0.3=1 - - python==3.6 + - python==2.7.14=2 - readline==6.2=0 - rhash==1.3.4=0 - - six==1.11.0 + - six==1.11.0=py27_1 - sqlite==3.13.0=1 - suitesparse==4.5.4=blas_openblas_200 - superlu==5.2.1=blas_openblas_201 - tbb==4.4_20160526=1 - tk==8.5.19=2 - - vtk==8.1.0 + - vtk==8.1.0=py27_mesalib_0 - x264==20131217=3 - xorg-kbproto==1.0.7=1 - xorg-libx11==1.6.4=6 @@ -107,20 +106,21 @@ dependencies: - xorg-libxrender==0.9.10=0 - xorg-renderproto==0.11.1=1 - xorg-xproto==7.0.31=6 - - bz2file==0.98 + - bz2file==0.98=py27_0 - cloog==0.18.0=0 + - gcc==4.8.5=7 - isl==0.12.2=0 - - protobuf==3.5.1 + - protobuf==2.6.1=py27_1 - system==5.8=2 - - libprotobuf==3.2.0=0 + - libprotobuf==2.6.1=0 - bullet==2.86.1=0 - ds9==7.5=0 - gmm==5.0=0 - jama==125=0 - pcl==1.8.1=0 - qhull==7.2.0=0 - - qt==5.6.2 - - qwt==6.1.3 + - qt==5.7.1=0 + - qwt==6.1.3=0 - tnt==126=0 - xalan-c==1.11=0 prefix: /scratch/anaconda3/envs/isis diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 7fa0c88cff..47d86789a1 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -57,8 +57,10 @@ message("Detected Operating System: ${osVersionString}") # as a static library using some specialized code in Utilities.cmake. set(BUILD_SHARED_LIBS ON) -# make sure to leave rpaths untouched on install -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +# Specify flags used +# on linux, add the conda prefix to handle possible issues with rpaths at link time +# sometimes third parties do not set their rpaths correctly +set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) @@ -69,283 +71,92 @@ option(buildMissions "Build the mission specific modules" ON ) option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) option(buildTests "Set up unit, application, and module tests." ON ) option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) -option(pybindings "Turn on to build Python bindings" ON ) +option(develop "Use a devleopment configuration" ON ) # if cmake install prefix is not set, and conda env is activated, use the # conda env as the install directory if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") - set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) + set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) +endif() + +message("Installing in: ${CMAKE_INSTALL_PREFIX}") + +# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K +# needs to be either 1 or 0 for C style true false +if(JP2KFLAG) + set(JP2KFLAG 1) endif() # Prioritize passed in variables over env vars, probably a better way to do this if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data) - set(isis3Data $ENV{ISIS3DATA}) + set(isis3Data $ENV{ISIS3DATA}) + set(isis3Data ON) endif() if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData) - set(isis3TestData $ENV{ISIS3TESTDATA}) + set(isis3TestData $ENV{ISIS3TESTDATA}) + set(isis3TestData ON) endif() if(EXISTS ${isis3Data}) - set(ENV{ISIS3DATA} "${isis3Data}") + set(ENV{ISIS3DATA} "${isis3Data}") + message("Using ISIS3DATA = $ENV{ISIS3DATA}") else() - message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") - set(isis3Data OFF) + message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") endif() if(EXISTS ${isis3TestData}) - set(ENV{ISIS3TESTDATA} "${isis3TestData}") + set(ENV{ISIS3TESTDATA} "${isis3TestData}") + message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") else() - message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") - set(isis3TestData OFF) + message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") endif() -if(${testOutputDir} STREQUAL "OFF") - message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") - set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") - execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) -else() - # User specified a test output folder, make sure it exists. - message("Writing test data folders to = ${testOutputDir}") - execute_process(COMMAND mkdir -p ${testOutputDir}) -endif() +if(develop) -# inject ISISROOT -add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) -add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) - -message("CONFIGURATION") -message("\tBUILD STATIC CORE: ${buildStaticCore}") -message("\tBUILD TESTS: ${buildTests}") -message("\tBUILD CORE: ${buildCore}") -message("\tBUILD MISSIONS: ${buildMissions}") -message("\tJP2K SUPPORT: ${JP2KFLAG}") -message("\tPYTHON BINDINGS: ${pybindings}") -message("\tISIS3DATA: ${isis3Data}") -message("\tISISTESTDATA: ${isis3TestData}") -message("\tTEST OUTPUT DIR: ${testOutputDir}") -message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") - -#=============================================================================== -#=============================================================================== - -# Set up Anaconda prefix in the case with a non-default conda env is activated -if(EXISTS $ENV{CONDA_PREFIX}) - message("CONDA PREFIX: $ENV{CONDA_PREFIX}") - list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} - $ENV{CONDA_PREFIX}/lib/cmake/Qt5) endif() -# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K -# needs to be either 1 or 0 for C style true false -if(JP2KFLAG) - set(JP2KFLAG 1) -endif() - - # Set up the ctest tool which is used to run all of the tests. - enable_testing() - include(CTest) - -# Specify flags used -# on linux, add the conda prefix to handle possible issues with rpaths at link time -# sometimes third parties do not set their rpaths correctly -set(thirdPartyCppFlags -Wall - -std=c++11 - -fPIC - -DISIS_LITTLE_ENDIAN=1 - -fPIC -Wno-unused-parameter - -Wno-overloaded-virtual - -DGMM_USES_SUPERLU - -DENABLEJP2K=${JP2KFLAG} - ) - -# Flag to fix numeric literals problem with boost on linux -if(NOT APPLE) - set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals - -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) +if(${testOutputDir} STREQUAL "OFF") + message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") + set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") + execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) +else() + # User specified a test output folder, make sure it exists. + message("Writing test data folders to = ${testOutputDir}") + execute_process(COMMAND mkdir -p ${testOutputDir}) endif() - # Append CPP flags set in the third party lib file to the string set in this file. - string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) - - -# Paths to required executables -find_program(XALAN Xalan REQUIRED) -find_program(LATEX latex) -find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED) -find_program(UIC uic REQUIRED) -find_program(MOC moc REQUIRED) -find_program(RCC rcc REQUIRED) -find_program(PROTOC protoc REQUIRED) - -find_package(Qt5 COMPONENTS - Core - Concurrent - Gui - Multimedia - MultimediaWidgets - Network - OpenGL # Needed to install mesa-common-dev for this! - PrintSupport - Qml - Quick - Script - ScriptTools - Sql - Svg - Test - WebChannel - Widgets - Xml - XmlPatterns REQUIRED) - -# Some of these will have non-traditional installs with version numbers in the paths in v007 -# For these, we pass in a version number, and use it in the path suffix -# This only applies to v007, and outside of the building, we should only expect standard installs -# The v007-specific installs are listed beside their find_package calls below: -find_package(Boost 1.59.0 REQUIRED) -find_package(Bullet 2.86 REQUIRED) -find_package(Cholmod 4.4.5 REQUIRED) -find_package(CSPICE 65 REQUIRED) -find_package(Eigen REQUIRED) -find_package(Embree 2.15.0 REQUIRED) -find_package(GeoTIFF 2 REQUIRED) -find_package(GMM 5.0 REQUIRED) -find_package(GSL 19 REQUIRED) -find_package(HDF5 1.8.15 REQUIRED) -find_package(Jama 125 REQUIRED) -find_package(NN REQUIRED) -find_package(OpenCV 3.1.0 REQUIRED) -find_package(PCL 1.8 REQUIRED) -find_package(Protobuf 2.6.1 REQUIRED) -find_package(Qwt 6 REQUIRED) -find_package(SuperLU 4.3 REQUIRED) -find_package(TIFF 4.0.5 REQUIRED) -find_package(TNT 126 REQUIRED) -find_package(XercesC 3.1.2 REQUIRED) -find_package(X11 6 REQUIRED) -find_package(nanoflann REQUIRED) -find_package(PNG REQUIRED) -find_package(Kakadu) -find_package(Geos 3.5.0 REQUIRED) - -# Im this case, we specify the version numbers being searched for in the non-traditional installs. +# Set the default library extension based on the platform if(APPLE) - find_package(OpenGL REQUIRED) -endif(APPLE) - -if(pybindings) - find_package(Python REQUIRED) - find_package(Sip REQUIRED) -endif() - -# Iterate through all variables and extract the libraries and include directories -get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES - -set(ALLLIBDIRS "") -set(ALLLIBS "") -set(ALLINCDIRS "") - -# Get all include dir variables -foreach (_variableName ${_variableNames}) -#message("VAR=${_variableName}") - if (_variableName MATCHES ".+_INCLUDE_DIR$") - list(APPEND ALLINCDIRS "${${_variableName}}") - elseif (_variableName MATCHES ".+_INCLUDE_PATH$") - list(APPEND ALLINCDIRS "${${_variableName}}") - endif(_variableName MATCHES ".+_INCLUDE_DIR$") -endforeach() - -# get all Library variables -foreach (_variableName ${_variableNames}) - get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) - if (_variableName MATCHES "^CMAKE+") - elseif (_variableName MATCHES ".+_LIB$") - list(APPEND ALLLIBDIRS "${LIBDIR}") - list(APPEND ALLLIBS "${${_variableName}}") - elseif (_variableName MATCHES ".+_LIBRARY$") - list(APPEND ALLLIBDIRS "${LIBDIR}") - list(APPEND ALLLIBS "${${_variableName}}") - elseif (_variableName MATCHES ".+_LIBRARIES$") - list(APPEND ALLLIBDIRS "${LIBDIR}") - list(APPEND ALLLIBS "${${_variableName}}") - endif() -endforeach() - -# Sometimes we add the same lib more than once (especially with LIBDIRS) -list(REMOVE_DUPLICATES ALLLIBDIRS) -list(REMOVE_DUPLICATES ALLLIBS) -list(REMOVE_DUPLICATES ALLINCDIRS) - -#=============================================================================== -#=============================================================================== - -# Set python bindings configuration and set target for generating C++ files -if(pybindings) - message("Configuring Python Bindings") - - if (NOT DEFINED PYINSTALL_DIR) - set(PYINSTALL_DIR ${PYTHON_SITE_PACKAGES_DIR}) - endif() - message("PYTHON BINDINGS INSTALL DIR: ${PYINSTALL_DIR}") - - # We need to get the locations for sip files, modules, etc. - set(ISIS_SIP_DIR "${CMAKE_SOURCE_DIR}/sipfiles") - set(ISIS_SIP_MODULE "${CMAKE_SOURCE_DIR}/sipfiles/master.sip") - set(SIP_BUILD_FILE "isispy.sbf") - set(ISIS_SIP_CODE_DIR ${CMAKE_BINARY_DIR}/sipsrc) - - # Create the output directory for the new .CPP files - execute_process(COMMAND mkdir -p "${ISIS_SIP_CODE_DIR}") - - # get list of output files exepected from sip - - # get the PYQT configuration based flags from Python - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c - "from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict;print(qtconfigdict['sip_flags'])" - OUTPUT_VARIABLE PYQT_SIP_FLAGS) - - # CMAKE doesn't handle spaces from python well when piping that into the - # command because of white space and a trailing new line, - # so we turn it into a list - string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS) - string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS}) - message("Generating C++ code from sip files") - execute_process(COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE}) - - # add target so users can run the command after initial configuration - add_custom_target(sipfiles - COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE} - COMMENT "Generating C++ code from sip files") - - file(GLOB SIP_GENERATED_SOURCE_FILES ${ISIS_SIP_CODE_DIR}/*.cpp) - add_library(isispy MODULE ${SIP_GENERATED_SOURCE_FILES}) - target_link_libraries(isispy ${ALLLIBS}) - target_link_libraries(isispy isis3) - set_target_properties(isispy PROPERTIES LINK_DEPENDS isis3) - add_dependencies(isispy sipfiles) - - install(TARGETS isispy DESTINATION ${PYINSTALL_DIR}) + set(SO ".dylib") +else() + set(SO ".so") endif() #=============================================================================== #=============================================================================== - # Start setting up the build # Add extension to find fortran until .so symlink can be added to /usr/lib64 list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5) +# Set up all the third party library dependencies. +include(FindAllDependencies) + # Allow everything to include the 3rd party libraries include_directories(SYSTEM ${ALLINCDIRS}) link_directories(${ALLLIBDIRS}) +# inject ISISROOT +add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) +add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) + # add isis headers file(GLOB ISIS_HEADERS ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp) file(COPY ${ISIS_HEADERS} DESTINATION ${CMAKE_BINARY_DIR}/inc) include_directories(${CMAKE_BINARY_DIR}/inc) + set(CORE_LIB_NAME isis3) # Specify relative library include paths which will be set up on @@ -355,6 +166,7 @@ if(APPLE) else() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};$ORIGIN/../lib;$ORIGIN/../3rdParty/lib") endif() +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # We will set up some links with these files at the end of the install process so # make sure they are cleared at the start of the install process. @@ -365,6 +177,13 @@ EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestP install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") +# Append CPP flags set in the third party lib file to the string set in this file. +string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) +# Set up the ctest tool which is used to run all of the tests. +enable_testing() +include(CTest) + # Delete any existing plugin files in the build folder so they # don't get filled with duplicate entries. file(GLOB existingPlugins "${CMAKE_BINARY_DIR}/plugins/*.plugin") diff --git a/Jenkinsfile b/isis/Jenkinsfile similarity index 100% rename from Jenkinsfile rename to isis/Jenkinsfile diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index f4a87169d2..aa403db34f 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -4,6 +4,7 @@ include(CodeGeneration) + # Incorporate an application folder function(add_isis_app folder libDependencies) @@ -57,6 +58,7 @@ function(add_isis_app folder libDependencies) add_makefile_test_folder(${f} ${appName}_app) endforeach() endif() + endfunction(add_isis_app) diff --git a/isis/cmake/CMakeLists.txt b/isis/cmake/CMakeLists.txt index 8b1df97398..4bb9e778d4 100644 --- a/isis/cmake/CMakeLists.txt +++ b/isis/cmake/CMakeLists.txt @@ -1,3 +1,4 @@ + # This file contains everything that should be exectuted AFTER the installation # step has completed. @@ -9,6 +10,8 @@ install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0${SO} ${CMAKE_INSTALL_P install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3${SO})") install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis${SO})") + + # On OSX, need to correct all the paths encoded in each of the distributed library files so # that they properly find the distruted files using relative paths. if (APPLE) @@ -23,4 +26,5 @@ if (APPLE) get_filename_component(name ${f} NAME) install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/plugins/${name} resetRpath)") endforeach() + endif() diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake new file mode 100644 index 0000000000..6440e2d679 --- /dev/null +++ b/isis/cmake/FindAllDependencies.cmake @@ -0,0 +1,122 @@ +#============================================================================== +# 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? +#=============================================================================== + +message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") +list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) + +# Add thirdPartyCppFlags +set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) +set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") + +# Flag to fix numeric literals problem with boost on linux +if(NOT APPLE) + set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) +endif() + +# Paths to required executables +find_program(XALAN Xalan REQUIRED) +find_program(LATEX latex) +find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED) +find_program(UIC uic REQUIRED) +find_program(MOC moc REQUIRED) +find_program(RCC rcc REQUIRED) +find_program(PROTOC protoc REQUIRED) + +find_package(Qt5 COMPONENTS + Core + Concurrent + Gui + Multimedia + MultimediaWidgets + Network + OpenGL # Needed to install mesa-common-dev for this! + PrintSupport + Qml + Quick + Script + ScriptTools + Sql + Svg + Test + WebChannel + #WebKit + #WebKitWidgets + Widgets + Xml + XmlPatterns REQUIRED) + +# Some of these will have non-traditional installs with version numbers in the paths in v007 +# For these, we pass in a version number, and use it in the path suffix +# This only applies to v007, and outside of the building, we should only expect standard installs +# The v007-specific installs are listed beside their find_package calls below: +find_package(Boost 1.59.0 REQUIRED) +find_package(Bullet 2.86 REQUIRED) +find_package(Cholmod 4.4.5 REQUIRED) +find_package(CSPICE 65 REQUIRED) +find_package(Eigen REQUIRED) +find_package(Embree 2.15.0 REQUIRED) +find_package(GeoTIFF 2 REQUIRED) +find_package(GMM 5.0 REQUIRED) +find_package(GSL 19 REQUIRED) +find_package(HDF5 1.8.15 REQUIRED) +find_package(Jama 125 REQUIRED) +find_package(NN REQUIRED) +find_package(OpenCV 3.1.0 REQUIRED) +find_package(PCL 1.8 REQUIRED) +find_package(Protobuf 2.6.1 REQUIRED) +find_package(Qwt 6 REQUIRED) +find_package(SuperLU 4.3 REQUIRED) +find_package(TIFF 4.0.5 REQUIRED) +find_package(TNT 126 REQUIRED) +find_package(XercesC 3.1.2 REQUIRED) +find_package(X11 6 REQUIRED) +find_package(nanoflann REQUIRED) +find_package(PNG REQUIRED) +find_package(Kakadu) +find_package(Geos 3.5.0 REQUIRED) + + +# Im this case, we specify the version numbers being searched for in the non-traditional installs. +if(APPLE) + find_package(OpenGL REQUIRED) +endif(APPLE) + +get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES +foreach (_variableName ${_variableNames}) +#message("VAR=${_variableName}") + if (_variableName MATCHES ".+_INCLUDE_DIR$") + list(APPEND ALLINCDIRS "${${_variableName}}") + elseif (_variableName MATCHES ".+_INCLUDE_PATH$") + list(APPEND ALLINCDIRS "${${_variableName}}") + endif(_variableName MATCHES ".+_INCLUDE_DIR$") +endforeach() + +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() +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() + +list(REMOVE_DUPLICATES ALLLIBDIRS) +list(REMOVE_DUPLICATES ALLLIBS) +list(REMOVE_DUPLICATES ALLINCDIRS) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index 8b7b117683..dcc984c2b9 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -23,14 +23,14 @@ find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) -message(STATUS "BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) -message(STATUS "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) -message(STATUS "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) -message(STATUS "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) -message(STATUS "BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) -message(STATUS "BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) -message(STATUS "BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) -message(STATUS "BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) -message(STATUS "BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) -message(STATUS "BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) -message(STATUS "BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) +message( "-- BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) +message( "-- BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) +message( "-- BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) +message( "-- BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) +message( "-- BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) +message( "-- BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) +message( "-- BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) +message( "-- BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) +message( "-- BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) +message( "-- BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) +message( "-- BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index 3df2e1ff87..78f1af260b 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -14,5 +14,5 @@ find_library(CSPICE_LIBRARY NAMES cspice ) -message(STATUS "CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) -message(STATUS "CSPICE LIB: " ${CSPICE_LIBRARY} ) +message( "-- CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) +message( "-- CSPICE LIB: " ${CSPICE_LIBRARY} ) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index a46f6d9c36..c8119a296d 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -36,15 +36,15 @@ endif() get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) -message(STATUS "CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) -message(STATUS "CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) -message(STATUS "CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) -message(STATUS "CAMD LIB: " ${CAMD_LIBRARY} ) -message(STATUS "AMD LIB: " ${AMD_LIBRARY} ) -message(STATUS "SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) -message(STATUS "FORTRAN LIB: " ${FORTRAN_LIBRARY} ) -message(STATUS "BLAS LIB: " ${BLAS_LIBRARY} ) +message( "-- CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) +message( "-- CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) +message( "-- CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) +message( "-- CAMD LIB: " ${CAMD_LIBRARY} ) +message( "-- AMD LIB: " ${AMD_LIBRARY} ) +message( "-- SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) +message( "-- FORTRAN LIB: " ${FORTRAN_LIBRARY} ) +message( "-- BLAS LIB: " ${BLAS_LIBRARY} ) if(NOT APPLE) - message(STATUS "LAPACK LIB: " ${LAPACK_LIBRARY}) + message("-- LAPACK LIB: " ${LAPACK_LIBRARY}) endif() diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake index 154a23cd59..ef0829284e 100644 --- a/isis/cmake/FindEigen.cmake +++ b/isis/cmake/FindEigen.cmake @@ -14,4 +14,4 @@ find_path(EIGEN_ROOT_INCLUDE_DIR PATH_SUFFIXES eigen eigen3 ) -message(STATUS "EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) +message( "-- EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake index d7af1d78d6..786e3307f6 100644 --- a/isis/cmake/FindEmbree.cmake +++ b/isis/cmake/FindEmbree.cmake @@ -16,5 +16,5 @@ find_library(EMBREE_LIBRARY get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY) -message(STATUS "EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) -message(STATUS "EMBREE LIB: " ${EMBREE_LIBRARY}) +message( "-- EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) +message( "-- EMBREE LIB: " ${EMBREE_LIBRARY}) diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake index 3787fa9534..e2a7d8da50 100644 --- a/isis/cmake/FindGMM.cmake +++ b/isis/cmake/FindGMM.cmake @@ -11,4 +11,4 @@ find_path(GMM_INCLUDE_DIR get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) -message(STATUS "GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") +message( "-- GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake index 105dad800e..cd38cf470f 100644 --- a/isis/cmake/FindGSL.cmake +++ b/isis/cmake/FindGSL.cmake @@ -20,6 +20,6 @@ find_library(GSL_CBLAS_LIBRARY get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY) -message(STATUS "GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") -message(STATUS "GSL LIB: ${GSL_LIBRARY}") -message(STATUS "GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") +message( "-- GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") +message( "-- GSL LIB: ${GSL_LIBRARY}") +message( "-- GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index 9bfbb68cac..fce2108576 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -16,5 +16,5 @@ find_library(GEOTIFF_LIBRARY get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) -message(STATUS "GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") -message(STATUS "GEOTIFF LIB: ${GEOTIFF_LIBRARY}") +message( "-- GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") +message( "-- GEOTIFF LIB: ${GEOTIFF_LIBRARY}") diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake index dc2df58ec2..8f4cf44249 100644 --- a/isis/cmake/FindGeos.cmake +++ b/isis/cmake/FindGeos.cmake @@ -17,8 +17,8 @@ find_library(GEOS_C_LIBRARY NAMES geos_c ) -message(STATUS "GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) -message(STATUS "GEOS LIB: " ${GEOS_LIBRARY} ) -message(STATUS "GEOS C LIB: " ${GEOS_C_LIBRARY} ) +message( "-- GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) +message( "-- GEOS LIB: " ${GEOS_LIBRARY} ) +message( "-- GEOS C LIB: " ${GEOS_C_LIBRARY} ) get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindHDF5.cmake b/isis/cmake/FindHDF5.cmake index 1ebf7edcd3..e9abbc72b8 100644 --- a/isis/cmake/FindHDF5.cmake +++ b/isis/cmake/FindHDF5.cmake @@ -17,8 +17,8 @@ find_library(HDF5_HLCPP_LIBRARY NAMES hdf5_hl_cpp) get_filename_component(HDF5_ROOT_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" DIRECTORY) -message(STATUS "HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") -message(STATUS "HDF5 LIB: ${HDF5_LIBRARY}") -message(STATUS "HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") -message(STATUS "HDF5 HL LIB: ${HDF5_HL_LIBRARY}") -message(STATUS "HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") +message( "-- HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") +message( "-- HDF5 LIB: ${HDF5_LIBRARY}") +message( "-- HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") +message( "-- HDF5 HL LIB: ${HDF5_HL_LIBRARY}") +message( "-- HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake index c547d3b27d..71de34db60 100644 --- a/isis/cmake/FindJama.cmake +++ b/isis/cmake/FindJama.cmake @@ -11,4 +11,4 @@ find_path(JAMA_INCLUDE_DIR get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY) -message(STATUS "JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") +message( "-- JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake index ed637a0e6f..a6edd15542 100644 --- a/isis/cmake/FindKakadu.cmake +++ b/isis/cmake/FindKakadu.cmake @@ -23,9 +23,9 @@ if(JP2KFLAG) get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) - message(STATUS "KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") - message(STATUS "KAKADU A LIB: ${KAKADU_A_LIBRARY}") - message(STATUS "KAKADU V LIB: ${KAKADU_V_LIBRARY}") + message( "-- KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") + message( "-- KAKADU A LIB: ${KAKADU_A_LIBRARY}") + message( "-- KAKADU V LIB: ${KAKADU_V_LIBRARY}") else() - message(STATUS "KAKADU DISABLED") + message("-- KAKADU DISABLED") endif() diff --git a/isis/cmake/FindLibPython.py b/isis/cmake/FindLibPython.py deleted file mode 100644 index 38ae93fd3b..0000000000 --- a/isis/cmake/FindLibPython.py +++ /dev/null @@ -1,10 +0,0 @@ -# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS - -import sys -import distutils.sysconfig - -print("exec_prefix:%s" % sys.exec_prefix) -print("short_version:%s" % sys.version[:3]) -print("long_version:%s" % sys.version.split()[0]) -print("py_inc_dir:%s" % distutils.sysconfig.get_python_inc()) -print("site_packages_dir:%s" % distutils.sysconfig.get_python_lib(plat_specific=1)) diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake index fa2b596278..17c030e282 100644 --- a/isis/cmake/FindNN.cmake +++ b/isis/cmake/FindNN.cmake @@ -15,5 +15,5 @@ find_library(NN_LIBRARY get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) -message(STATUS "NN INCLUDE DIR: ${NN_INCLUDE_DIR}") -message(STATUS "NN LIB: ${NN_LIBRARY}") +message( "-- NN INCLUDE DIR: ${NN_INCLUDE_DIR}") +message( "-- NN LIB: ${NN_LIBRARY}") diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake index 0450572ef0..0984686d94 100644 --- a/isis/cmake/FindOpenCV.cmake +++ b/isis/cmake/FindOpenCV.cmake @@ -28,17 +28,17 @@ find_library(OPENCV_FLANN_LIBRARY NAMES opencv_flann) get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY) -message(STATUS "OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") -message(STATUS "OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") -message(STATUS "OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") -message(STATUS "OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") -message(STATUS "OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") -message(STATUS "OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") -message(STATUS "OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") -message(STATUS "OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") -message(STATUS "OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") -message(STATUS "OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") -message(STATUS "OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") -message(STATUS "OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") -message(STATUS "OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") -message(STATUS "OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") +message( "-- OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") +message( "-- OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") +message( "-- OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") +message( "-- OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") +message( "-- OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") +message( "-- OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") +message( "-- OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") +message( "-- OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") +message( "-- OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") +message( "-- OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") +message( "-- OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") +message( "-- OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") +message( "-- OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") +message( "-- OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index 902b5b6b1c..625a6126d7 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -21,7 +21,7 @@ find_library(PCL_IO_LIBRARY NAMES pcl_io) get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) -message(STATUS "PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") -message(STATUS "PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") -message(STATUS "PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") -message(STATUS "PCL IO LIB: ${PCL_IO_LIBRARY}") +message( "-- PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") +message( "-- PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") +message( "-- PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") +message( "-- PCL IO LIB: ${PCL_IO_LIBRARY}") diff --git a/isis/cmake/FindPNG.cmake b/isis/cmake/FindPNG.cmake index 6c2439f113..bc11004ec1 100644 --- a/isis/cmake/FindPNG.cmake +++ b/isis/cmake/FindPNG.cmake @@ -13,5 +13,5 @@ find_library(PNG_LIBRARY NAMES png ) -message(STATUS "PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") -message(STATUS "PNG LIB: ${PNG_LIBRARY}") +message( "-- PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") +message( "-- PNG LIB: ${PNG_LIBRARY}") diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake index 74db9e4342..5374cb50e8 100644 --- a/isis/cmake/FindProtobuf.cmake +++ b/isis/cmake/FindProtobuf.cmake @@ -7,5 +7,5 @@ find_library(PROTOBUF_LIBRARY NAMES protobuf) get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) -message(STATUS "PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") -message(STATUS "PROTOBUF LIB: ${PROTOBUF_LIBRARY}") +message( "-- PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") +message( "-- PROTOBUF LIB: ${PROTOBUF_LIBRARY}") diff --git a/isis/cmake/FindPython.cmake b/isis/cmake/FindPython.cmake deleted file mode 100644 index 5f5a64a98d..0000000000 --- a/isis/cmake/FindPython.cmake +++ /dev/null @@ -1,108 +0,0 @@ -# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS -# -# PYTHON_EXECUTABLE - The path and filename of the Python interpreter. -# -# PYTHON_SHORT_VERSION - The version of the Python interpreter found, -# excluding the patch version number. (e.g. 2.5 and not 2.5.1)) -# -# PYTHON_LONG_VERSION - The version of the Python interpreter found as a human -# readable string. -# -# PYTHON_SITE_PACKAGES_DIR - Location of the Python site-packages directory. -# -# PYTHON_INCLUDE_PATH - Directory holding the python.h include file. -# -# PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library. - -INCLUDE(CMakeFindFrameworks) - -if(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") - # Already in cache, be silent - set(PYTHONLIBRARY_FOUND TRUE) -else(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") - - FIND_PACKAGE(PythonInterp 3) - - if(PYTHONINTERP_FOUND) - FIND_FILE(_find_lib_python_py FindLibPython.py PATHS ${CMAKE_MODULE_PATH}) - - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_lib_python_py} OUTPUT_VARIABLE python_config) - if(python_config) - STRING(REGEX REPLACE ".*exec_prefix:([^\n]+).*$" "\\1" PYTHON_PREFIX ${python_config}) - STRING(REGEX REPLACE ".*\nshort_version:([^\n]+).*$" "\\1" PYTHON_SHORT_VERSION ${python_config}) - STRING(REGEX REPLACE ".*\nlong_version:([^\n]+).*$" "\\1" PYTHON_LONG_VERSION ${python_config}) - STRING(REGEX REPLACE ".*\npy_inc_dir:([^\n]+).*$" "\\1" PYTHON_INCLUDE_PATH ${python_config}) - if(NOT PYTHON_SITE_PACKAGES_DIR) - if(NOT PYTHON_LIBS_WITH_KDE_LIBS) - STRING(REGEX REPLACE ".*\nsite_packages_dir:([^\n]+).*$" "\\1" PYTHON_SITE_PACKAGES_DIR ${python_config}) - else(NOT PYTHON_LIBS_WITH_KDE_LIBS) - set(PYTHON_SITE_PACKAGES_DIR ${KDE4_LIB_INSTALL_DIR}/python${PYTHON_SHORT_VERSION}/site-packages) - endif(NOT PYTHON_LIBS_WITH_KDE_LIBS) - endif(NOT PYTHON_SITE_PACKAGES_DIR) - STRING(REGEX REPLACE "([0-9]+).([0-9]+)" "\\1\\2" PYTHON_SHORT_VERSION_NO_DOT ${PYTHON_SHORT_VERSION}) - set(PYTHON_LIBRARY_NAMES python${PYTHON_SHORT_VERSION} python${PYTHON_SHORT_VERSION_NO_DOT} python${PYTHON_SHORT_VERSION}m python${PYTHON_SHORT_VERSION_NO_DOT}m) - if(WIN32) - STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR}) - FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs) - endif(WIN32) - FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES}) - set(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH} CACHE FILEPATH "Directory holding the python.h include file" FORCE) - set(PYTHONLIBRARY_FOUND TRUE) - endif(python_config) - - # adapted from cmake's builtin FindPythonLibs - if(APPLE) - # If a framework has been detected in the include path, make sure - # framework's versioned library (not any .dylib) is used for linking - # NOTE: don't rely upon Python.framework/Versions/Current, since that may be 2.7 - if("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") - set(PYTHON_LIBRARY "") - set(PYTHON_DEBUG_LIBRARY "") - # get clean path to just framework - STRING(REGEX REPLACE "^(.*/Python\\.framework).*$" "\\1" _py_fw "${PYTHON_INCLUDE_PATH}") - if("${_py_fw}" MATCHES "Cellar/python") - # Appears to be a Homebrew Python install; do specific fix ups - # get Homebrew prefix (may not be /usr/local) - STRING(REGEX REPLACE "^(.+)/Cellar.*$" "\\1" _hb_prefix "${_py_fw}") - # prefer the Homebrew prefix framework over only versioned Python keg - set(_py_fw "${_hb_prefix}/Frameworks/Python.framework") - # prefer the symlinked-to Homebrew site-packages over only versioned Python keg - set(PYTHON_SITE_PACKAGES_DIR "${_hb_prefix}/lib/python${PYTHON_SHORT_VERSION}/site-packages") - endif("${_py_fw}" MATCHES "Cellar/python") - # prefer the Headers subdirectory for includes - if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") - set(PYTHON_INCLUDE_PATH "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers" CACHE FILEPATH "Directory holding the python.h include file" FORCE) - endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") - endif("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") - if(NOT PYTHON_LIBRARY) - # ensure the versioned framework's library is defined, instead of relying upon -F search paths - if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") - set(PYTHON_LIBRARY "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python" CACHE FILEPATH "Python framework library" FORCE) - endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") - endif(NOT PYTHON_LIBRARY) - if(PYTHON_LIBRARY) - set(PYTHONLIBRARY_FOUND TRUE) - endif(PYTHON_LIBRARY) - endif(APPLE) - endif(PYTHONINTERP_FOUND) - - if(PYTHONLIBRARY_FOUND) - if(APPLE) - # keep reference to system or custom python site-packages - # useful during app-bundling operations - set(PYTHON_SITE_PACKAGES_SYS ${PYTHON_SITE_PACKAGES_DIR}) - endif(APPLE) - set(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) - if(NOT PYTHONLIBRARY_FIND_QUIETLY) - message(STATUS "Found Python executable: ${PYTHON_EXECUTABLE}") - message(STATUS "Found Python version: ${PYTHON_LONG_VERSION}") - message(STATUS "Found Python library: ${PYTHON_LIBRARY}") - message(STATUS "Found Python site-packages: ${PYTHON_SITE_PACKAGES_DIR}") - endif(NOT PYTHONLIBRARY_FIND_QUIETLY) - else(PYTHONLIBRARY_FOUND) - if(PYTHONLIBRARY_FIND_REQUIRED) - message(FATAL_ERROR "Could not find Python") - endif(PYTHONLIBRARY_FIND_REQUIRED) - endif(PYTHONLIBRARY_FOUND) - -endif (EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 8262a57b69..8b52467945 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -16,5 +16,5 @@ find_library(QWT_LIBRARY get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) -message(STATUS "QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") -message(STATUS "QWT LIB: ${QWT_LIBRARY}") +message( "-- QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") +message( "-- QWT LIB: ${QWT_LIBRARY}") diff --git a/isis/cmake/FindSip.cmake b/isis/cmake/FindSip.cmake deleted file mode 100644 index 8ede37c8d7..0000000000 --- a/isis/cmake/FindSip.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS -# -# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number -# suitable for comparison as a string. -# -# SIP_VERSION_STR - The version of SIP found as a human readable string. -# -# SIP_BINARY_PATH - Path and filename of the SIP command line executable. -# -# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. -# -# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed -# into. - -IF(SIP_VERSION) - # Already in cache, be silent - SET(SIP_FOUND TRUE) -ELSE(SIP_VERSION) - - FIND_FILE(_find_sip_py FindSip.py PATHS ${CMAKE_MODULE_PATH}) - - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) - IF(sip_config) - STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) - STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_mod_dir:([^\n]+).*$" "\\1" SIP_MOD_DIR ${sip_config}) - SET(SIP_FOUND TRUE) - ENDIF(sip_config) - - IF(SIP_FOUND) - IF(NOT SIP_FIND_QUIETLY) - MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") - ENDIF(NOT SIP_FIND_QUIETLY) - ELSE(SIP_FOUND) - IF(SIP_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find SIP") - ENDIF(SIP_FIND_REQUIRED) - ENDIF(SIP_FOUND) - -ENDIF(SIP_VERSION) diff --git a/isis/cmake/FindSip.py b/isis/cmake/FindSip.py deleted file mode 100644 index 8cbb00fa5c..0000000000 --- a/isis/cmake/FindSip.py +++ /dev/null @@ -1,13 +0,0 @@ -# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS - - -import sipconfig - -sipcfg = sipconfig.Configuration() -print("sip_version:%06.0x" % sipcfg.sip_version) -print("sip_version_num:%d" % sipcfg.sip_version) -print("sip_version_str:%s" % sipcfg.sip_version_str) -print("sip_bin:%s" % sipcfg.sip_bin) -print("default_sip_dir:%s" % sipcfg.default_sip_dir) -print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) -print("sip_mod_dir:%s" % sipcfg.sip_mod_dir) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 2c588bd138..7462e6dc9a 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -17,5 +17,5 @@ find_library(SUPERLU_LIBRARY get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) -message(STATUS "SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") -message(STATUS "SUPERLU LIB: ${SUPERLU_LIBRARY}") +message( "-- SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") +message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake index f483f58778..6b7149b687 100644 --- a/isis/cmake/FindTIFF.cmake +++ b/isis/cmake/FindTIFF.cmake @@ -5,5 +5,5 @@ find_path(TIFF_INCLUDE_DIR find_library(TIFF_LIBRARY NAMES tiff) -message(STATUS "TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") -message(STATUS "TIFF LIB: ${TIFF_LIBRARY}") +message( "-- TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") +message( "-- TIFF LIB: ${TIFF_LIBRARY}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake index 0bbfb154c0..aea3a60d36 100644 --- a/isis/cmake/FindTNT.cmake +++ b/isis/cmake/FindTNT.cmake @@ -11,4 +11,4 @@ find_path(TNT_INCLUDE_DIR get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) -message(STATUS "TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) +message("-- TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake index fe25ac1315..a1714cb526 100644 --- a/isis/cmake/FindX11.cmake +++ b/isis/cmake/FindX11.cmake @@ -8,4 +8,4 @@ find_library(X11_LIBRARY NAMES X11 ) -message(STATUS "X11 LIB: " ${X11_LIBRARY} ) +message( "-- X11 LIB: " ${X11_LIBRARY} ) diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake index 335dca4fda..6e72e533aa 100644 --- a/isis/cmake/FindXercesC.cmake +++ b/isis/cmake/FindXercesC.cmake @@ -6,5 +6,5 @@ find_path(XERCESC_INCLUDE_DIR find_library(XercesC_LIBRARY NAMES xerces-c) -message(STATUS "XERCES LIB: " ${XercesC_LIBRARY} ) -message(STATUS "XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) +message( "-- XERCES LIB: " ${XercesC_LIBRARY} ) +message( "-- XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) diff --git a/isis/cmake/Findnanoflann.cmake b/isis/cmake/Findnanoflann.cmake index 3c05e57013..3562e074d8 100644 --- a/isis/cmake/Findnanoflann.cmake +++ b/isis/cmake/Findnanoflann.cmake @@ -12,4 +12,4 @@ find_path(NANOFLANN_INCLUDE_DIR get_filename_component(NANOFLANN_ROOT_INCLUDE_DIR "${NANOFLANN_INCLUDE_DIR}" DIRECTORY) -message(STATUS "NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") +message( "-- NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") diff --git a/isis/sipfiles/BundleAdjust.sip b/isis/sipfiles/BundleAdjust.sip deleted file mode 100644 index 098d7cab9c..0000000000 --- a/isis/sipfiles/BundleAdjust.sip +++ /dev/null @@ -1,31 +0,0 @@ -// SIP Wrapper to the ISIS3 bundle class -%Include type_conversions.sip - - -namespace Isis { - class BundleAdjust : public QObject { - %TypeHeaderCode - #include "BundleAdjust.h" - #include "IException.h" - %End - - public: - BundleAdjust(PyObject* settings, const QString &cnetFile, const QString &cubeList, bool printSummary = true) throw(Isis::IException) [(QSharedPointer, QString, QString, bool)]; - %MethodCode - int sipErr = 0; - QSharedPointer *wrappedSettings = new QSharedPointer(); - - Isis::BundleSettings *settings = (Isis::BundleSettings*) sipConvertToType(a0, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); - wrappedSettings->reset(settings); - try { - sipCpp = new sipIsis_BundleAdjust(*wrappedSettings, *a1, *a2, a3); - } - catch (Isis::IException &error) { - PyErr_SetString(sipException_Isis_IException, error.what()); - return NULL; - } - %End - - Isis::BundleSolutionInfo solveCholeskyBR() throw(Isis::IException) ; - }; -}; diff --git a/isis/sipfiles/BundleControlPoint.sip b/isis/sipfiles/BundleControlPoint.sip deleted file mode 100644 index 934b00bc94..0000000000 --- a/isis/sipfiles/BundleControlPoint.sip +++ /dev/null @@ -1,68 +0,0 @@ -namespace Isis { - class BundleControlPoint { - - %TypeHeaderCode - #include "BundleControlPoint.h" - #include - %End - - public: - - SIP_PYTYPE measures() throw(Isis::IException); - %MethodCode - size_t size = sipCpp->size(); - - PyObject *l = PyList_New(size); - for (size_t i = 0; i < size; ++i) { - Isis::BundleMeasure* cppMeasure = sipCpp->at(i).data(); - - PyObject *pyMeasure = sipConvertFromType((void*)(cppMeasure), sipType_Isis_BundleMeasure, NULL); - PyList_SetItem(l, i, pyMeasure); - } - - return l; - - %End - - // BundleControlPoint(ControlPoint *point); // default constructor - BundleControlPoint(const Isis::BundleControlPoint &src) throw(Isis::IException); - ~BundleControlPoint(); - - // copy - void copy(const Isis::BundleControlPoint &src) throw(Isis::IException); - - // mutators - // QSharedPointer addMeasure(ControlMeasure *controlMeasure); - void computeResiduals() throw(Isis::IException); - void setNumberOfRejectedMeasures(int numRejected) throw(Isis::IException); - void setRejected(bool reject) throw(Isis::IException); - void setWeights(const QSharedPointer settings, double metersToRadians) throw(Isis::IException); - void zeroNumberOfRejectedMeasures() throw(Isis::IException); - - // accessors - bool isRejected() const throw(Isis::IException); - int numberOfMeasures() const throw(Isis::IException); - int numberOfRejectedMeasures() const throw(Isis::IException); - double residualRms() const throw(Isis::IException); - QString id() const throw(Isis::IException); - Isis::ControlPoint::PointType type() const throw(Isis::IException); - - // string format methods - QString formatBundleOutputSummaryString(bool errorPropagation) const throw(Isis::IException); - QString formatBundleOutputDetailString(bool errorPropagation, double RTM, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; - QString formatValue(double value, int fieldWidth, int precision) throw(Isis::IException); - QString formatAprioriSigmaString(int type, int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; - QString formatLatitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException); - QString formatLongitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException); - QString formatRadiusAprioriSigmaString(int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; - QString formatAdjustedSigmaString(int type, int fieldWidth, int precision, - bool errorPropagation) const throw(Isis::IException); - QString formatLatitudeAdjustedSigmaString(int fieldWidth, int precision, - bool errorPropagation) const throw(Isis::IException); - QString formatLongitudeAdjustedSigmaString(int fieldWidth, int precision, - bool errorPropagation) const throw(Isis::IException); - QString formatRadiusAdjustedSigmaString(int fieldWidth, int precision, - bool errorPropagation) const throw(Isis::IException); - - }; -}; diff --git a/isis/sipfiles/BundleImage.sip b/isis/sipfiles/BundleImage.sip deleted file mode 100644 index bf8d975d4c..0000000000 --- a/isis/sipfiles/BundleImage.sip +++ /dev/null @@ -1,16 +0,0 @@ -namespace Isis { - class BundleImage /NoDefaultCtors/ { - %TypeHeaderCode - #include "BundleImage.h" - %End - %InstanceCode - sipCpp = new Isis::BundleImage(NULL, "", ""); - %End - public: - - - // QSharedPointer parentObservation(); - QString serialNumber() throw(Isis::IException); - QString fileName() throw(Isis::IException); - }; -}; diff --git a/isis/sipfiles/BundleMeasure.sip b/isis/sipfiles/BundleMeasure.sip deleted file mode 100644 index fd2a02942c..0000000000 --- a/isis/sipfiles/BundleMeasure.sip +++ /dev/null @@ -1,30 +0,0 @@ -%Include type_conversions.sip - -namespace Isis { - class BundleMeasure /NoDefaultCtors/ { - %TypeHeaderCode - #include "BundleMeasure.h" - %End - - public: - - bool isRejected() const throw(Isis::IException); - // Camera *camera() const; - // Isis::BundleControlPoint *parentControlPoint(); - QSharedPointer parentBundleImage() throw(Isis::IException); - // QSharedPointer parentBundleObservation(); - // const QSharedPointer observationSolveSettings(); - - double sample() const throw(Isis::IException); - double sampleResidual() const throw(Isis::IException); - double line() const throw(Isis::IException); - double lineResidual() const throw(Isis::IException); - double residualMagnitude() const throw(Isis::IException); - QString cubeSerialNumber() const throw(Isis::IException); - double focalPlaneComputedX() const throw(Isis::IException); - double focalPlaneComputedY() const throw(Isis::IException); - double focalPlaneMeasuredX() const throw(Isis::IException); - double focalPlaneMeasuredY() const throw(Isis::IException); - int observationIndex() const throw(Isis::IException); - }; -}; diff --git a/isis/sipfiles/BundleObservationSolveSettings.sip b/isis/sipfiles/BundleObservationSolveSettings.sip deleted file mode 100644 index 89b28277c0..0000000000 --- a/isis/sipfiles/BundleObservationSolveSettings.sip +++ /dev/null @@ -1,59 +0,0 @@ - -%Import QtCore/QtCoremod.sip -%Import QtXml/QtXmlmod.sip - -namespace Isis{ - class BundleObservationSolveSettings { - %TypeHeaderCode - #include "BundleObservationSolveSettings.h" - %End - public: - - enum InstrumentPointingSolveOption { - NoPointingFactors = 0, /**< Solve for none of the pointing factors.*/ - AnglesOnly = 1, /**< Solve for pointing angles: right ascension, declination - and, optionally, twist.*/ - AnglesVelocity = 2, //!< Solve for pointing angles and their angular velocities. - AnglesVelocityAcceleration = 3, /**< Solve for pointing angles, their velocities and their - accelerations.*/ - AllPointingCoefficients = 4 /**< Solve for all coefficients in the polynomials fit to - the pointing angles.*/ - }; - - //! Options for how to solve for instrument position - enum InstrumentPositionSolveOption { - NoPositionFactors = 0, /**< Solve for none of the position factors.*/ - PositionOnly = 1, /**< Solve for instrument positions only.*/ - PositionVelocity = 2, /**< Solve for instrument positions and velocities.*/ - PositionVelocityAcceleration = 3, /**< Solve for instrument positions, velocities, and - accelerations.*/ - AllPositionCoefficients = 4 /**< Solve for all coefficients in the polynomials fit to - the instrument positions.*/ - }; - - BundleObservationSolveSettings() throw(Isis::IException); - InstrumentPositionSolveOption stringToInstrumentPositionSolveOption(QString option) throw(Isis::IException); - InstrumentPointingSolveOption stringToInstrumentPointingSolveOption(QString option) throw(Isis::IException); - - void setInstrumentPositionSettings(InstrumentPositionSolveOption option, - int spkDegree = 2, - int spkSolveDegree = 2, - bool positionOverHermite = false, - double positionAprioriSigma = -1.0, - double velocityAprioriSigma = -1.0, - double accelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/; - - - void setInstrumentPointingSettings(InstrumentPointingSolveOption option, - bool solveTwist, - int ckDegree = 2, - int ckSolveDegree = 2, - bool solvePolynomialOverExisting = false, - double anglesAprioriSigma = -1.0, - double angularVelocityAprioriSigma = -1.0, - double angularAccelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/; - - - - }; -}; diff --git a/isis/sipfiles/BundleResults.sip b/isis/sipfiles/BundleResults.sip deleted file mode 100644 index 777ae54aed..0000000000 --- a/isis/sipfiles/BundleResults.sip +++ /dev/null @@ -1,125 +0,0 @@ -%Include Statistics.sip -%Include type_conversions.sip - - -namespace Isis { - class BundleResults : public QObject { - %TypeHeaderCode - #include "BundleResults.h" - %End - - public: - BundleResults(const Isis::BundleResults &src); - void initialize(); - - void resizeSigmaStatisticsVectors(int numberImages); - // void setRmsImageResidualLists(QList rmsImageLineResiduals, - // QList rmsImageSampleResiduals, - // QList rmsImageResiduals); - // void setRmsImageResidualLists(QVector rmsImageLineResiduals, - // QVector rmsImageSampleResiduals, - // QVector rmsImageResiduals); - // void setSigmaLatitudeRange(Distance minLatDist, Distance maxLatDist, - // QString minLatPointId, QString maxLatPointId); - // void setSigmaLongitudeRange(Distance minLonDist, Distance maxLonDist, - // QString minLonPointId, QString maxLonPointId); - // void setSigmaRadiusRange(Distance minRadDist, Distance maxRadDist, - // QString minRadPointId, QString maxRadPointId); - void setRmsFromSigmaStatistics(double rmsFromSigmaLatStats, - double rmsFromSigmaLonStats, - double rmsFromSigmaRadStats); - - void printMaximumLikelihoodTierInformation() throw(Isis::IException); - void incrementMaximumLikelihoodModelIndex() throw(Isis::IException); - - void incrementFixedPoints() throw(Isis::IException); - int numberFixedPoints() const throw(Isis::IException); - void incrementHeldImages() throw(Isis::IException); - int numberHeldImages() const throw(Isis::IException); - void incrementIgnoredPoints() throw(Isis::IException); - int numberIgnoredPoints() const throw(Isis::IException); // currently unused ??? - void setRejectionLimit(double rejectionLimit) throw(Isis::IException); - void setRmsXYResiduals(double rx, double ry, double rxy) throw(Isis::IException); - - void setNumberRejectedObservations(int numberObservations) throw(Isis::IException); - void setNumberObservations(int numberObservations) throw(Isis::IException); - void setNumberImageParameters(int numberParameters) throw(Isis::IException); // ??? this is the same value an m_nRank - void resetNumberConstrainedPointParameters() throw(Isis::IException); - void incrementNumberConstrainedPointParameters(int incrementAmount) throw(Isis::IException); - void resetNumberConstrainedImageParameters() throw(Isis::IException); - void incrementNumberConstrainedImageParameters(int incrementAmount) throw(Isis::IException); - void resetNumberConstrainedTargetParameters() throw(Isis::IException); - void incrementNumberConstrainedTargetParameters(int incrementAmount) throw(Isis::IException); - void setNumberUnknownParameters(int numberParameters) throw(Isis::IException); - void computeDegreesOfFreedom() throw(Isis::IException); - - void computeSigma0(double dvtpv, Isis::BundleSettings::ConvergenceCriteria criteria) throw(Isis::IException); - void setDegreesOfFreedom(double degreesOfFreedom) throw(Isis::IException); - void setSigma0(double sigma0) throw(Isis::IException); - void setElapsedTime(double time) throw(Isis::IException); - void setElapsedTimeErrorProp(double time) throw(Isis::IException); - void setRadiansToMeters(double rtm) throw(Isis::IException); - void setConverged(bool converged) throw(Isis::IException); // or initialze method - // void setBundleControlPoints(QVector controlPoints); - // void setOutputControlNet(QSharedPointer outNet); - void setIterations(int iterations) throw(Isis::IException); - // void setObservations(BundleObservationVector observations) throw(Isis::IException); - - QList rmsImageSampleResiduals() const throw(Isis::IException); - QList rmsImageLineResiduals() const throw(Isis::IException); - QList rmsImageResiduals() const throw(Isis::IException); - QVector rmsImageXSigmas() const throw(Isis::IException); // currently unused ??? - QVector rmsImageYSigmas() const throw(Isis::IException); // currently unused ??? - QVector rmsImageZSigmas() const throw(Isis::IException); // currently unused ??? - QVector rmsImageRASigmas() const throw(Isis::IException); // currently unused ??? - QVector rmsImageDECSigmas() const throw(Isis::IException); // currently unused ??? - QVector rmsImageTWISTSigmas() const throw(Isis::IException); // currently unused ??? - - // Distance minSigmaLatitudeDistance() const throw(Isis::IException); - // Distance maxSigmaLatitudeDistance() const throw(Isis::IException); - // Distance minSigmaLongitudeDistance() const throw(Isis::IException); - // Distance maxSigmaLongitudeDistance() const throw(Isis::IException); - // Distance minSigmaRadiusDistance() const throw(Isis::IException); - // Distance maxSigmaRadiusDistance() const throw(Isis::IException); - - QString maxSigmaLatitudePointId() const throw(Isis::IException); - QString minSigmaLatitudePointId() const throw(Isis::IException); - QString minSigmaLongitudePointId() const throw(Isis::IException); - QString maxSigmaLongitudePointId() const throw(Isis::IException); - QString minSigmaRadiusPointId() const throw(Isis::IException); - QString maxSigmaRadiusPointId() const throw(Isis::IException); - double sigmaLatitudeStatisticsRms() const throw(Isis::IException); - double sigmaLongitudeStatisticsRms() const throw(Isis::IException); - double sigmaRadiusStatisticsRms() const throw(Isis::IException); - double rmsRx() const throw(Isis::IException); // currently unused ??? - double rmsRy() const throw(Isis::IException); // currently unused ??? - double rmsRxy() const throw(Isis::IException); // currently unused ??? - double rejectionLimit() const throw(Isis::IException); - double radiansToMeters() const throw(Isis::IException); - int numberRejectedObservations() const throw(Isis::IException); - int numberObservations() const throw(Isis::IException); - - int numberImageParameters() const throw(Isis::IException); // ??? this is the same value an m_nRank - int numberConstrainedPointParameters() const throw(Isis::IException); - int numberConstrainedImageParameters() const throw(Isis::IException); - int numberConstrainedTargetParameters() const throw(Isis::IException); - int numberUnknownParameters() const throw(Isis::IException); - int degreesOfFreedom() const throw(Isis::IException); - double sigma0() const throw(Isis::IException); - double elapsedTime() const throw(Isis::IException); - double elapsedTimeErrorProp() const throw(Isis::IException); - bool converged() const throw(Isis::IException); // or initialze method - - QVector > &bundleControlPoints(); - QSharedPointer outputControlNet() const throw(Isis::IException); - - int iterations() const throw(Isis::IException); - - int numberMaximumLikelihoodModels() const throw(Isis::IException); - int maximumLikelihoodModelIndex() const throw(Isis::IException); - double maximumLikelihoodMedianR2Residuals() const throw(Isis::IException); - double maximumLikelihoodModelQuantile(int modelIndex) const throw(Isis::IException); - - }; - -}; diff --git a/isis/sipfiles/BundleSettings.sip b/isis/sipfiles/BundleSettings.sip deleted file mode 100644 index b6f9799ab4..0000000000 --- a/isis/sipfiles/BundleSettings.sip +++ /dev/null @@ -1,113 +0,0 @@ -%Include BundleObservationSolveSettings.sip -%Include MaximumLikelihoodWFunctions.sip - -%Include type_conversions.sip - -namespace Isis { - - class BundleSettings { - %TypeHeaderCode - #include "BundleSettings.h" - #include "BundleObservationSolveSettings.h" - #include - %End - public: - - enum ConvergenceCriteria { - Sigma0, /**< The value of sigma0 will be used to determine that the bundle - adjustment has converged.*/ - ParameterCorrections /**< All parameter corrections will be used to determine that the - bundle adjustment has converged.*/ - }; - - // enum MaximumLikelihoodModel { - // NoMaximumLikelihoodEstimator, - // Huber, - // ModifiedHuber, - // Welsch, - // Chen - // }; - - BundleSettings() throw(Isis::IException); - - void setValidateNetwork(bool) throw(Isis::IException); - - void setSolveOptions(bool solveObservationMode = false, - bool updateCubeLabel = false, - bool errorPropagation = false, - bool solveRadius = false, - double globalLatitudeAprioriSigma = Isis::Null, - double globalLongitudeAprioriSigma = Isis::Null, - double globalRadiusAprioriSigma = Isis::Null) throw(Isis::IException) /KeywordArgs="Optional"/; - - void setOutlierRejection(bool outlierRejection, - double multiplier = 1.0) throw(Isis::IException); - - bool solveObservationMode() const throw(Isis::IException); - bool solveRadius() const throw(Isis::IException); - bool updateCubeLabel() const throw(Isis::IException); - bool errorPropagation() const throw(Isis::IException); - bool outlierRejection() const throw(Isis::IException); - double outlierRejectionMultiplier() const throw(Isis::IException); - double globalLatitudeAprioriSigma() const throw(Isis::IException); - double globalLongitudeAprioriSigma() const throw(Isis::IException); - double globalRadiusAprioriSigma() const throw(Isis::IException); - - int numberSolveSettings() const throw(Isis::IException); - Isis::BundleObservationSolveSettings observationSolveSettings(QString instrumentId) const throw(Isis::IException); - Isis::BundleObservationSolveSettings observationSolveSettings(int n) const throw(Isis::IException); - - void setObservationSolveOptions(QList); - // %MethodCode - // Py_ssize_t size = PyList_Size(a0); - // QList *cppSettingsList = new QList(); - // int sipErr = 0; - // for(int i = 0; i < size; i++) { - // PyObject *pyStat = PyList_GET_ITEM(a0, i); - // Isis::BundleObservationSolveSettings *settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pyStat, sipType_Isis_BundleObservationSolveSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); - // cppSettingsList->append(*settings); - // } - // - // sipCpp->setObservationSolveOptions(*cppSettingsList); - // %End - - SIP_PYLIST maximumLikelihoodEstimatorModels() const throw(Isis::IException); - %MethodCode // convert QList to Python list if tuples - typedef Isis::MaximumLikelihoodWFunctions::Model Model; - size_t size = sipCpp->maximumLikelihoodEstimatorModels().size(); - PyObject *l = PyList_New(size); - for (size_t i = 0; i < size; ++i) { - // get the two items from the QPair - Model *model = new Model(sipCpp->maximumLikelihoodEstimatorModels()[i].first); - double doubl = sipCpp->maximumLikelihoodEstimatorModels()[i].second; - - // Convert the two items to PyObjects - PyObject *first = sipConvertFromType((void*)(model), sipType_Isis_MaximumLikelihoodWFunctions_Model, NULL); - PyObject *second = PyFloat_FromDouble(doubl); - - // set the tuple items - PyObject *tuple = PyTuple_New(2); - PyTuple_SetItem(tuple, 0, first); - PyTuple_SetItem(tuple, 1, second); - - // Add new tuple to list - PyList_SetItem(l, i, tuple); - } - return l; - %End - - - int numberTargetBodyParameters() const throw(Isis::IException); - bool solveTargetBody() const throw(Isis::IException); - bool solvePoleRA() const throw(Isis::IException); - bool solvePoleRAVelocity() const throw(Isis::IException); - bool solvePoleDec() const throw(Isis::IException); - bool solvePoleDecVelocity() const throw(Isis::IException); - bool solvePM() const throw(Isis::IException); - bool solvePMVelocity() const throw(Isis::IException); - bool solvePMAcceleration() const throw(Isis::IException); - bool solveTriaxialRadii() const throw(Isis::IException); - bool solveMeanRadius() const throw(Isis::IException); - - }; -}; diff --git a/isis/sipfiles/BundleSolutionInfo.sip b/isis/sipfiles/BundleSolutionInfo.sip deleted file mode 100644 index 7f1c27ba14..0000000000 --- a/isis/sipfiles/BundleSolutionInfo.sip +++ /dev/null @@ -1,28 +0,0 @@ - -%Include type_conversions.sip - -namespace Isis{ - -class BundleSolutionInfo : public QObject { - %TypeHeaderCode - #include "BundleSolutionInfo.h" - %End - - public: - BundleSolutionInfo(const Isis::BundleSolutionInfo &src) throw(Isis::IException); - - void setOutputStatistics(Isis::BundleResults statisticsResults) throw(Isis::IException); - void setRunTime(QString runTime) throw(Isis::IException); - - QString id() const throw(Isis::IException); - QString controlNetworkFileName() const throw(Isis::IException); - QSharedPointer bundleSettings() throw(Isis::IException); - Isis::BundleResults bundleResults() throw(Isis::IException); - QString runTime() const throw(Isis::IException); - - bool outputText() throw(Isis::IException); - bool outputPointsCSV() throw(Isis::IException); - bool outputResiduals() throw(Isis::IException); - - }; // end namespace Isis -}; diff --git a/isis/sipfiles/ControlNet.sip b/isis/sipfiles/ControlNet.sip deleted file mode 100644 index 73408334cf..0000000000 --- a/isis/sipfiles/ControlNet.sip +++ /dev/null @@ -1,31 +0,0 @@ -namespace Isis { - class ControlNet : public QObject { - %TypeHeaderCode - #include "ControlNet.h" - %End - public: - ControlNet() throw(Isis::IException); - ControlNet(const Isis::ControlNet &other) throw(Isis::IException); - - void clear() throw(Isis::IException); - - void Write(const QString &filename, bool pvl = false) throw(Isis::IException); - - double GetMaximumResidual() throw(Isis::IException); - QString GetNetworkId() const throw(Isis::IException); - int GetNumEditLockMeasures() throw(Isis::IException); - int GetNumEditLockPoints() throw(Isis::IException); - int GetNumIgnoredMeasures() throw(Isis::IException); - int GetNumberOfValidMeasuresInImage(const QString &serialNumber) throw(Isis::IException); - int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); - void ClearJigsawRejected() throw(Isis::IException); - void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); - void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); - int GetNumMeasures() const throw(Isis::IException); - int GetNumPoints() const throw(Isis::IException); - int GetNumValidMeasures() throw(Isis::IException); - int GetNumValidPoints() throw(Isis::IException); - QString GetTarget() const throw(Isis::IException); - QString GetUserName() const throw(Isis::IException); - }; -}; diff --git a/isis/sipfiles/ControlPoint.sip b/isis/sipfiles/ControlPoint.sip deleted file mode 100644 index 8dd80250aa..0000000000 --- a/isis/sipfiles/ControlPoint.sip +++ /dev/null @@ -1,302 +0,0 @@ -namespace Isis { - - class ControlPoint : public QObject { - %TypeHeaderCode - #include "ControlPoint.h" - %End - public: - enum PointType { - Fixed = 0, - Constrained = 1, - Free = 2 - }; - - - enum Status { - Failure, - Success, - PointLocked - }; - - enum ConstraintStatus { - LatitudeConstrained = 0, - LongitudeConstrained = 1, - RadiusConstrained = 2, -// XConstrained = 3, -// YConstrained = 4, -// ZConstrained = 5; - }; - - // This stuff input to jigsaw - // How did apriori source get computed?? - struct SurfacePointSource { - enum Source { - None, - User, - AverageOfMeasures, - Reference, - Basemap, - BundleSolution - }; - }; - - struct RadiusSource { - enum Source { - None, - User, - AverageOfMeasures, - Ellipsoid, - DEM, - BundleSolution - }; - }; - - ControlPoint() throw(Isis::IException); - ControlPoint(const QString &id) throw(Isis::IException); - - // Isis::ControlNet *Parent() { return parentNetwork; } - - // void Load(PvlObject &p) throw(Isis::IException); - - // void Add(ControlMeasure *measure) throw(Isis::IException); - // int Delete(ControlMeasure *measure) throw(Isis::IException); - // int Delete(QString serialNumber) throw(Isis::IException); - // int Delete(int index) throw(Isis::IException); - // Status ResetApriori() throw(Isis::IException); - - // const Isis::ControlMeasure *GetMeasure(QString serialNumber) const throw(Isis::IException); - // ControlMeasure *GetMeasure(QString serialNumber) throw(Isis::IException); - - // const ControlMeasure *GetMeasure(int index) const throw(Isis::IException); - // ControlMeasure *GetMeasure(int index) throw(Isis::IException); - - // const ControlMeasure *GetRefMeasure() const throw(Isis::IException); - // ControlMeasure *GetRefMeasure() throw(Isis::IException); - - // Status SetChooserName(QString name) throw(Isis::IException); - // Status SetDateTime(QString newDateTime) throw(Isis::IException); - // Status SetEditLock(bool editLock) throw(Isis::IException); - // Status SetId(QString id) throw(Isis::IException); - // Status SetRefMeasure(ControlMeasure *cm) throw(Isis::IException); - // Status SetRefMeasure(int index) throw(Isis::IException); - // Status SetRefMeasure(QString sn) throw(Isis::IException); - // Status SetRejected(bool rejected) throw(Isis::IException); - // Status SetIgnored(bool newIgnoreStatus) throw(Isis::IException); - // Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint) throw(Isis::IException); - // Status SetType(PointType newType) throw(Isis::IException); - // - // Status SetAprioriRadiusSource(RadiusSource::Source source) throw(Isis::IException); - // Status SetAprioriRadiusSourceFile(QString sourceFile) throw(Isis::IException); - // Status SetAprioriSurfacePoint(SurfacePoint aprioriSP) throw(Isis::IException); - // Status SetAprioriSurfacePointSource(SurfacePointSource::Source source) throw(Isis::IException); - // Status SetAprioriSurfacePointSourceFile(QString sourceFile) throw(Isis::IException); - - // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon, - // const Distance &radius) throw(Isis::IException); - - // Status ComputeApriori() throw(Isis::IException); - // Status ComputeResiduals() throw(Isis::IException); - // Status ComputeResiduals_Millimeters() throw(Isis::IException); - // - // SurfacePoint GetAdjustedSurfacePoint() const throw(Isis::IException); - // SurfacePoint GetBestSurfacePoint() const throw(Isis::IException); - - QString GetChooserName() const throw(Isis::IException); - QString GetDateTime() const throw(Isis::IException); - bool IsEditLocked() const throw(Isis::IException); - bool IsRejected() const throw(Isis::IException); - QString GetId() const throw(Isis::IException); - bool IsIgnored() const throw(Isis::IException); - bool IsValid() const throw(Isis::IException); - bool IsInvalid() const throw(Isis::IException); - bool IsFixed() const throw(Isis::IException); - - bool HasAprioriCoordinates() throw(Isis::IException); - bool IsConstrained() throw(Isis::IException); - bool IsLatitudeConstrained() throw(Isis::IException); - bool IsLongitudeConstrained() throw(Isis::IException); - bool IsRadiusConstrained() throw(Isis::IException); - int NumberOfConstrainedCoordinates() throw(Isis::IException); - - static QString PointTypeToString(PointType type) throw(Isis::IException); - static PointType StringToPointType(QString pointTypeString) throw(Isis::IException); - - QString GetPointTypeString() const throw(Isis::IException); - // PointType GetType() const throw(Isis::IException); - - static QString RadiusSourceToString(RadiusSource::Source source) throw(Isis::IException); - static RadiusSource::Source StringToRadiusSource(QString str) throw(Isis::IException); - QString GetRadiusSourceString() const throw(Isis::IException); - static QString SurfacePointSourceToString(SurfacePointSource::Source source) throw(Isis::IException); - // static SurfacePointSource::Source StringToSurfacePointSource(QString str) throw(Isis::IException); - QString GetSurfacePointSourceString() const throw(Isis::IException); - - // SurfacePoint GetAprioriSurfacePoint() const throw(Isis::IException); - // RadiusSource::Source GetAprioriRadiusSource() const throw(Isis::IException); - // QString GetAprioriRadiusSourceFile() const throw(Isis::IException); - // SurfacePointSource::Source GetAprioriSurfacePointSource() const throw(Isis::IException); - // QString GetAprioriSurfacePointSourceFile() const throw(Isis::IException); - - int GetNumMeasures() const throw(Isis::IException); - int GetNumValidMeasures() const throw(Isis::IException); - int GetNumLockedMeasures() const throw(Isis::IException); - bool HasSerialNumber(QString serialNumber) const throw(Isis::IException); - // int IndexOf(ControlMeasure *, bool throws = true) const throw(Isis::IException); - int IndexOf(QString sn, bool throws = true) const throw(Isis::IException); - int IndexOfRefMeasure() const throw(Isis::IException); - bool IsReferenceExplicit() const throw(Isis::IException); - QString GetReferenceSN() const throw(Isis::IException); - - // Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const throw(Isis::IException); - // Statistics GetStatistic(long dataType) const throw(Isis::IException); - - // QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const throw(Isis::IException); - // QList< QString > getCubeSerialNumbers() const throw(Isis::IException); - - // const ControlMeasure *operator[](QString serialNumber) const throw(Isis::IException); - // ControlMeasure *operator[](QString serialNumber) throw(Isis::IException); - - // const ControlMeasure *operator[](int index) const throw(Isis::IException); - // ControlMeasure *operator[](int index) throw(Isis::IException); - - // bool operator!=(const ControlPoint &pPoint) const throw(Isis::IException); - // bool operator==(const ControlPoint &pPoint) const throw(Isis::IException); - // const ControlPoint &operator=(const ControlPoint &pPoint) throw(Isis::IException); - - // The next 7 methods are specifically to support BundleAdjust - void ZeroNumberOfRejectedMeasures() throw(Isis::IException); - void SetNumberOfRejectedMeasures(int numRejected) throw(Isis::IException); - int GetNumberOfRejectedMeasures() const throw(Isis::IException); - double GetSampleResidualRms() const throw(Isis::IException); - double GetLineResidualRms() const throw(Isis::IException); - double GetResidualRms() const throw(Isis::IException); - void ClearJigsawRejected() throw(Isis::IException); - - // ControlPointFileEntryV0002 ToFileEntry() const throw(Isis::IException); - - private: - // void SetExplicitReference(ControlMeasure *measure) throw(Isis::IException); - void ValidateMeasure(QString serialNumber) const throw(Isis::IException); - // void AddMeasure(ControlMeasure *measure) throw(Isis::IException); - void PointModified() throw(Isis::IException); - - - // private: - // ControlNet *parentNetwork; - // - // //!< List of Control Measures - // QHash< QString, ControlMeasure * > * measures; - // - // QStringList *cubeSerials; - // - // ControlMeasure *referenceMeasure; - // - // /** - // * This is the control point ID. This is supposed to be a unique - // * identifier for control points. This often has a number in it, and - // * looks like "T0052" where the next one is "T0053" and so on. - // */ - // QString id; - // - // /** - // * This is the user name of the person who last modified this control - // * point. Modifications are things like updating the surface point, but - // * not things like updating the last modified time. The calculations - // * relating to this control point have to actually change for this to - // * be updated. This is an empty string if we need to dynamically - // * get the username of the caller when asked for (or written to file). - // */ - // QString chooserName; - // - // /** - // * This is the last modified date and time. This is updated automatically - // * and works virtually in the same way as chooserName. - // */ - // QString dateTime; - // - // /** - // * What this control point is tying together. - // * @see PointType - // */ - // PointType type; - // - // /** - // * If we forced a build that we would normally have thrown an exception - // * for then this is set to true. Otherwise, and most of the time, this - // * is false. - // */ - // bool invalid; - // - // /** - // * This stores the edit lock state. - // * @see SetEditLock - // */ - // bool editLock; - // - // /** - // * This stores the jigsaw rejected state. - // * @see SetJigsawReject - // */ - // bool jigsawRejected; - // - // /** - // * This stores the constraint status of the a priori SurfacePoint - // * @todo Eventually add x, y, and z - // */ - // std::bitset<6> constraintStatus; - // - // /** - // * This indicates if a program has explicitely set the reference in this - // * point or the implicit reference is still the current reference. This - // * is useful for programs that want to choose the reference for all - // * points where this hasn't happened yet. - // */ - // bool referenceExplicitlySet; - // - // /** - // * True if we should preserve but ignore the entire control point and its - // * measures. - // */ - // bool ignore; - // - // //! Where the apriori surface point originated from - // SurfacePointSource::Source aprioriSurfacePointSource; - // - // //! FileName where the apriori surface point originated from - // QString aprioriSurfacePointSourceFile; - // - // /** - // * Where the apriori surface point's radius originated from, most commonly - // * used by jigsaw. - // */ - // RadiusSource::Source aprioriRadiusSource; - // - // /** - // * The name of the file that derives the apriori surface point's radius - // */ - // QString aprioriRadiusSourceFile; - // - // /** - // * The apriori surface point. This is the "known truth" or trustworthy - // * point that should not be modified unless done very explicitely. This - // * comes from places like hand picking where you really don't want the - // * surface point to vary far from this point, but some variation is - // * okay (1/10th of a pixel is fair for human accuracy for example). Very - // * often this point does not exist. - // */ - // SurfacePoint aprioriSurfacePoint; - // - // /** - // * This is the calculated, or aposterori, surface point. This is what most - // * programs should be working with and updating. - // */ - // SurfacePoint adjustedSurfacePoint; - // - // /** - // * This parameter is used and maintained by BundleAdjust for the jigsaw - // * application. It is stored here because ControlPoint contains the index - // * of the measures. - // */ - // int numberOfRejectedMeasures; - }; -}; diff --git a/isis/sipfiles/MaximumLikelihoodWFunctions.sip b/isis/sipfiles/MaximumLikelihoodWFunctions.sip deleted file mode 100644 index cbc668d80d..0000000000 --- a/isis/sipfiles/MaximumLikelihoodWFunctions.sip +++ /dev/null @@ -1,52 +0,0 @@ -namespace Isis { - - class MaximumLikelihoodWFunctions { - %TypeHeaderCode - #include "MaximumLikelihoodWFunctions.h" - %End - - public: - - enum Model { - Huber, - HuberModified, - Welsch, - Chen - }; - - static QString modelToString(Model model) throw(Isis::IException); - static Isis::MaximumLikelihoodWFunctions::Model stringToModel(QString modelName) throw(Isis::IException); - - MaximumLikelihoodWFunctions() throw(Isis::IException); - MaximumLikelihoodWFunctions(Model modelSelection) throw(Isis::IException); - MaximumLikelihoodWFunctions(Model modelSelection, double tweakingConstant) throw(Isis::IException); - MaximumLikelihoodWFunctions(const Isis::MaximumLikelihoodWFunctions &other) throw(Isis::IException); - - void setModel(Model modelSelection) throw(Isis::IException); // uses default tweaking constant - void setTweakingConstantDefault() throw(Isis::IException); - - void setModel(Model modelSelection, double tweakingConstant) throw(Isis::IException); - void setTweakingConstant(double tweakingConstant) throw(Isis::IException); - - Model model() const throw(Isis::IException); - double tweakingConstant() const throw(Isis::IException); - - // the W functions provide an additional weighting factor W which is used - // to 're-weight' each observation dynamically during an adjustment, the - // scalar functions provide access to various flavors of this scalar (as - // a function of the residual divided by the residuals sigma) - - double sqrtWeightScaler(double residualZScore) throw(Isis::IException); //it is often convient to use square roots of - //weights when building normals, this function - // provides the scaler for the square root of - // the weight directly - double tweakingConstantQuantile() throw(Isis::IException); // returns which quantile of the residuals is recommended to - // use as the tweaking constant, this varies as a function of - // the model being employed - - QString weightedResidualCutoff() throw(Isis::IException); - - QDataStream &write(QDataStream &stream) const throw(Isis::IException); - QDataStream &read(QDataStream &stream) throw(Isis::IException); - }; -}; diff --git a/isis/sipfiles/Statistics.sip b/isis/sipfiles/Statistics.sip deleted file mode 100644 index 089b76a636..0000000000 --- a/isis/sipfiles/Statistics.sip +++ /dev/null @@ -1,41 +0,0 @@ - -namespace Isis { - class Statistics : public QObject { - %TypeHeaderCode - #include "Statistics.h" - %End - public: - Statistics(const Isis::Statistics &other) throw(Isis::IException); - - void Reset() throw(Isis::IException); - - void AddData(const double *data, const unsigned int count) throw(Isis::IException); - void AddData(const double data) throw(Isis::IException); - - void RemoveData(const double *data, const unsigned int count) throw(Isis::IException); - void RemoveData(const double data) throw(Isis::IException); - - double ValidMinimum() const throw(Isis::IException); - double ValidMaximum() const throw(Isis::IException); - bool InRange(const double value) throw(Isis::IException); - bool AboveRange(const double value) throw(Isis::IException); - bool BelowRange(const double value) throw(Isis::IException); - - double Average() const throw(Isis::IException); - double StandardDeviation() const throw(Isis::IException); - double Variance() const throw(Isis::IException); - double Sum() const throw(Isis::IException); - double SumSquare() const throw(Isis::IException); - double Rms() const throw(Isis::IException); - - double Minimum() const throw(Isis::IException); - double Maximum() const throw(Isis::IException); - double ChebyshevMinimum(const double percent = 99.5) const throw(Isis::IException); - double ChebyshevMaximum(const double percent = 99.5) const throw(Isis::IException); - double BestMinimum(const double percent = 99.5) const throw(Isis::IException); - double BestMaximum(const double percent = 99.5) const throw(Isis::IException); - double ZScore(const double value) const throw(Isis::IException); - - bool RemovedData() const throw(Isis::IException); - }; -}; diff --git a/isis/sipfiles/master.sip b/isis/sipfiles/master.sip deleted file mode 100644 index 2cdb950c9c..0000000000 --- a/isis/sipfiles/master.sip +++ /dev/null @@ -1,75 +0,0 @@ -%Module(name=libisispy, - version=0, - keyword_arguments="Optional") - -%ExportedHeaderCode - #include - #include - #include - #include - #include - - using namespace std; - - // Wraps glob to return a STD vector to avoid dealing with C style globbing - inline vector glob(const QString& pat){ - glob_t glob_result; - glob(pat.toLatin1().data(),GLOB_TILDE,NULL,&glob_result); - vector ret; - for(unsigned int i=0;i libs = glob(pat); - QLibrary lib_loader; - - for (vector::const_iterator i = libs.begin(); i != libs.end(); ++i) { - // Strip extension - QFileInfo file(*i); - QString lib_dir = file.path() + "/" + file.completeBaseName(); - - lib_loader.setFileName(lib_dir); - - // Load hint required for symbols to be accessible to other libraries loaded later - lib_loader.setLoadHints(QLibrary::ExportExternalSymbolsHint); - - bool load_ok = lib_loader.load(); - - // if verbose is true, print out load info - if (verbose) { - if (load_ok) { - cout << "Loaded " + lib_dir.toStdString() + " : OK" << endl; - } - else if (!load_ok) { - cout << "Loaded " + lib_dir.toStdString() + " : FAILED" << endl - << lib_loader.errorString().toStdString() << endl; - } - } - } - } -%End - -%Include type_conversions.sip - -%Include ControlPoint.sip -%Include BundleMeasure.sip -%Include BundleControlPoint.sip -%Include BundleImage.sip -%Include ControlNet.sip -%Include Statistics.sip -%Include BundleResults.sip -%Include BundleSolutionInfo.sip -%Include BundleObservationSolveSettings.sip -%Include BundleSettings.sip -%Include BundleAdjust.sip -%Include MaximumLikelihoodWFunctions.sip diff --git a/isis/sipfiles/type_conversions.sip b/isis/sipfiles/type_conversions.sip deleted file mode 100644 index 7a337c444f..0000000000 --- a/isis/sipfiles/type_conversions.sip +++ /dev/null @@ -1,292 +0,0 @@ - -%Import QtCore/QtCoremod.sip -%Import QtXml/QtXmlmod.sip - - - -%Exception Isis::IException(SIP_Exception) /PyName=IException/ -{ -%TypeHeaderCode -#include "IException.h" -%End -%RaiseCode - const char *detail = sipExceptionRef.what(); - - SIP_BLOCK_THREADS - PyErr_SetString(sipException_Isis_IException, detail); - SIP_UNBLOCK_THREADS -%End -}; - - -%MappedType QVector > -{ - %TypeHeaderCode - #include "BundleControlPoint.h" - #include - %End - - %ConvertFromTypeCode - size_t size = sipCpp->size(); - PyObject *l = PyList_New(size); - for (size_t i = 0; i < size; ++i) { - - Isis::BundleControlPoint* cppCPoint = sipCpp->at(i).data(); - - PyObject *pyCPoint = sipConvertFromType((void*)(cppCPoint), sipType_Isis_BundleControlPoint, NULL); - PyList_SetItem(l, i, pyCPoint); - } - - return l; - %End - - %ConvertToTypeCode - Py_ssize_t size = PyList_Size(sipPy); - QVector > *cppPointList = new QVector > (); - int sipErr = 0; - for(int i = 0; i < size; i++) { - PyObject *pyCPoint = PyList_GET_ITEM(sipPy, i); - Isis::BundleControlPoint *cppCPoint = (Isis::BundleControlPoint*)sipConvertToType(pyCPoint, sipType_Isis_BundleControlPoint, NULL, SIP_NOT_NONE, NULL, &sipErr); - cppPointList->append(QSharedPointer(cppCPoint)); - } - - *sipCppPtr = cppPointList; - return sipGetState(sipTransferObj); - %End - -}; - -%MappedType QList -{ - %TypeHeaderCode - #include "Statistics.h" - #include - %End - - %ConvertFromTypeCode - size_t size = sipCpp->size(); - PyObject *l = PyList_New(size); - for (size_t i = 0; i < size; ++i) { - Isis::Statistics* cppStats = new Isis::Statistics(sipCpp->at(i)); - PyObject *pyStats = sipConvertFromType((void*)(cppStats), sipType_Isis_Statistics, NULL); - PyList_SetItem(l, i, pyStats); - } - - return l; - %End - - %ConvertToTypeCode - Py_ssize_t size = PyList_Size(sipPy); - QList *cppStatList = new QList(); - int sipErr = 0; - for(int i = 0; i < size; i++) { - PyObject *pyStat = PyList_GET_ITEM(sipPy, i); - Isis::Statistics *stats = (Isis::Statistics*)sipConvertToType(pyStat, sipType_Isis_Statistics, NULL, SIP_NOT_NONE, NULL, &sipErr); - cppStatList->append(*stats); - } - - *sipCppPtr = cppStatList; - return sipGetState(sipTransferObj); - %End -}; - - - -%MappedType QList -{ - %TypeHeaderCode - #include "BundleObservationSolveSettings.h" - #include - %End - - %ConvertFromTypeCode - PyObject *l; - - // Create the Python list of the correct length. - if ((l = PyList_New(sipCpp->size())) == NULL) - return NULL; - - for (int i = 0; i < sipCpp->size(); ++i) { - Isis::BundleObservationSolveSettings *settings = new Isis::BundleObservationSolveSettings(sipCpp->at(i)); - - PyObject *pySettings = sipConvertFromType((void*)(settings), sipType_Isis_BundleObservationSolveSettings, NULL); - PyList_SetItem(l, i, pySettings); - } - - return l; - %End - - - %ConvertToTypeCode - if (!sipIsErr) { - if (!PyList_Check(sipPy)) - return 0; - - for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) - if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i), - sipType_Isis_BundleObservationSolveSettings, SIP_NOT_NONE)) - return 0; - - return 1; - } - - Py_ssize_t size = PyList_Size(sipPy); - - QList *cppSettingsList = new QList(); - int state; - - for(Py_ssize_t i = 0; i < size; i++) { - PyObject *pySettings = PyList_GET_ITEM(sipPy, i); - Isis::BundleObservationSolveSettings *settings; - - settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pySettings, sipType_Isis_BundleObservationSolveSettings, 0, SIP_NOT_NONE, &state, sipIsErr); - - if (*sipIsErr) { - sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state); - delete cppSettingsList; - return 0; - } - - cppSettingsList->append(*settings); - sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state); - } - - *sipCppPtr = cppSettingsList; - return sipGetState(sipTransferObj); - %End -}; - -// convert Bundlesettings wrapped in a QSharedPointer in Isis -%MappedType QSharedPointer -{ - %TypeHeaderCode - #include "BundleImage.h" - #include - %End - - %ConvertFromTypeCode - Isis::BundleImage *cpp = sipCpp->data(); - PyObject *py = sipConvertFromType(cpp, sipType_Isis_BundleImage, NULL); - return py; - %End - - %ConvertToTypeCode - int sipErr = 0; - QSharedPointer* cpp_qsp = new QSharedPointer(); - Isis::BundleImage *cpp = (Isis::BundleImage*)sipConvertToType(sipPy, sipType_Isis_BundleImage, NULL, SIP_NOT_NONE, NULL, &sipErr); - cpp_qsp->reset(cpp); - *sipCppPtr = cpp_qsp; - - return sipGetState(sipTransferObj); - %End -}; - - -// convert Bundlesettings wrapped in a QSharedPointer in Isis -%MappedType QSharedPointer -{ - %TypeHeaderCode - #include "BundleSettings.h" - #include - using namespace std; - %End - - %ConvertFromTypeCode - Isis::BundleSettings *settings = sipCpp->data(); - PyObject *pySettings = sipConvertFromType(settings, sipType_Isis_BundleSettings, NULL); - return pySettings; - %End - - %ConvertToTypeCode - int sipErr = 0; - QSharedPointer* wrappedSettings = new QSharedPointer(); - - Isis::BundleSettings *settings = (BundleSettings*) sipConvertToType(sipPy, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); - wrappedSettings->reset(settings); - *sipCppPtr = wrappedSettings; - - return sipGetState(sipTransferObj); - %End -}; - - -// convert Bundlesettings wrapped in a QSharedPointer in Isis -%MappedType QSharedPointer -{ - %TypeHeaderCode - #include "ControlNet.h" - #include - using namespace std; - %End - - %ConvertFromTypeCode - PyObject *pySettings = sipConvertFromType(sipCpp, sipType_Isis_ControlNet, NULL); - return pySettings; - %End - - %ConvertToTypeCode - int sipErr = 0; - QSharedPointer *qspControlNet = NULL; - if (!sipCanConvertToType(sipPy, sipType_Isis_ControlNet, SIP_NOT_NONE)) { - sipErr = 1; - } - else { - Isis::ControlNet *cppControlNet = (Isis::ControlNet*)sipConvertToType(sipPy, sipType_Isis_ControlNet, NULL, SIP_NOT_NONE, NULL, &sipErr); - qspControlNet->reset(cppControlNet); - } - - *sipCppPtr = qspControlNet; - return sipGetState(sipTransferObj); - %End -}; - - - -// Convert a python str object to a std::string. -%MappedType std::string -{ - %TypeHeaderCode - #include - %End - - %ConvertFromTypeCode - // convert an std::string to a Python (unicode) string - PyObject* newstring; - newstring = PyUnicode_DecodeUTF8(sipCpp->c_str(), sipCpp->length(), NULL); - if(newstring == NULL) { - PyErr_Clear(); - newstring = PyBytes_FromString(sipCpp->c_str()); - } - return newstring; - %End - - %ConvertToTypeCode - // Allow a Python string (or a unicode string) whenever a string is - // expected. - // If argument is a Unicode string, just decode it to UTF-8 - // If argument is a Python string, assume it's UTF-8 - if (sipIsErr == NULL) - return (PyBytes_Check(sipPy) || PyUnicode_Check(sipPy)); - - if (sipPy == Py_None) - { - *sipCppPtr = new std::string; - return 1; - } - - if (PyUnicode_Check(sipPy)) - { - PyObject* s = PyUnicode_AsEncodedString(sipPy, "UTF-8", ""); - *sipCppPtr = new std::string(PyBytes_AS_STRING(s)); - Py_DECREF(s); - return 1; - } - - if (PyBytes_Check(sipPy)) - { - *sipCppPtr = new std::string(PyBytes_AS_STRING(sipPy)); - return 1; - } - return 0; - %End -}; diff --git a/isis/src/control/apps/seedgrid/tsts/errors/errors.txt b/isis/src/control/apps/seedgrid/tsts/errors/errors.txt deleted file mode 100644 index b375d4ea99..0000000000 --- a/isis/src/control/apps/seedgrid/tsts/errors/errors.txt +++ /dev/null @@ -1 +0,0 @@ -[2018-03-21 14:12:04] Failed ... No truth folder or files diff --git a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h index fc69ebc8db..fd570fee7c 100644 --- a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h +++ b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h @@ -156,7 +156,6 @@ class BundleObservationSolveSettings { double positionAprioriSigma = -1.0, double velocityAprioriSigma = -1.0, double accelerationAprioriSigma = -1.0); - InstrumentPositionSolveOption instrumentPositionSolveOption() const; int spkDegree() const; int spkSolveDegree() const; diff --git a/linux-spec.txt b/linux-spec.txt index 9803f9d82f..529ab58395 100644 --- a/linux-spec.txt +++ b/linux-spec.txt @@ -2,14 +2,13 @@ # $ conda create --name --file # platform: linux-64 @EXPLICIT -https://conda.anaconda.org/krodriguez/linux-64/bullet-2.86.1-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/ds9-7.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/expat-2.2.5-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/flann-1.8.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.0.0-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geos-3.5.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.19.8.1-0.tar.bz2 @@ -23,39 +22,40 @@ https://conda.anaconda.org/conda-forge/linux-64/jpeg-9b-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.14.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgcc-4.8.5-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-hdf63c60_3.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgfortran-3.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-hdf63c60_3.tar.bz2 +https://conda.anaconda.org/probcomp/linux-64/libprotobuf-2.6.1-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libuv-1.11.0-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.6-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nanoflann-1.2.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ncurses-5.9-10.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nn-1.86.0-2.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/patchelf-0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pcre-8.39-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/proj4-4.9.3-5.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.3-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/rhash-1.3.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.13.0-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/system-5.8-2.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/system-5.8-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tbb-4.4_20160526-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tk-8.5.19-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/tnt-126-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/x264-20131217-3.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/xerces-c-3.1.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-6.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/yaml-0.1.7-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/zlib-1.2.11-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cspice-66-0.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/dbus-1.10.20-0.tar.bz2 @@ -63,61 +63,57 @@ https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-3.2.4-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/glib-2.51.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.8.18-2.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/isl-0.12.2-0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/isl-0.12.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jasper-1.900.1-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/jsoncpp-1.8.3-h3a67955_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/lapack-3.6.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20170329-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.28-2.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libprotobuf-3.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.0.9-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.7-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/llvmdev-5.0.0-default_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mpfr-3.1.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/openblas-0.2.19-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/qhull-7.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/readline-6.2-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/cloog-0.18.0-0.tar.bz2 +https://repo.continuum.io/pkgs/main/linux-64/cloog-0.18.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/flann-1.8.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.4.2-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.8.0-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/gstreamer-1.8.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.0-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libwebp-0.5.2-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mesalib-17.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mpc-1.0.3-4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/mysql-5.7.20-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python-3.6.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/bz2file-0.98-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py36_0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/mysql-5.7.20-h55eaa98_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python-2.7.14-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/bz2file-0.98-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/future-0.16.0-py36_0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py36_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/sip-4.18-py36_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py36_1.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://repo.continuum.io/pkgs/free/linux-64/protobuf-2.6.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py27_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/superlu-5.2.1-blas_openblas_201.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py27_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.14.6-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cmake-3.9.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/qt-5.6.2-6.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/setuptools-38.5.1-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py36_mesalib_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/xerces-c-3.1.4-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qt-5.7.1-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py27_mesalib_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-1.3.4-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/pcl-1.8.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/protobuf-3.5.1-py36_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.6.0-py36_4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/qwt-6.1.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/wheel-0.30.0-py36_2.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py36_blas_openblas_203.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pip-9.0.1-py36_1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/qwt-6.1.3-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/wheel-0.30.0-py27h2bc6bb2_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py27_blas_openblas_203.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/pip-9.0.1-py27_1.tar.bz2 diff --git a/macos-spec.txt b/macos-spec.txt index 2fd059d08b..2af2397a2f 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,61 +2,26 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT -https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.10-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/clangdev-6.0.0-default_0.tar.bz2 -https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.6-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freetype-2.8.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/future-0.16.0-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/glib-2.55.0-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/graphite2-1.3.11-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gsl-2.4-blas_openblas_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.7.6-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.10.1-2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jsoncpp-1.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libcxx-6.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.34-0.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/llvm-meta-6.0.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/llvmdev-6.0.0-default_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-0.tar.bz2 @@ -64,44 +29,70 @@ https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/ncurses-5.9-10.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/numpy-1.14.2-py36_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.20-7.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/opencv-3.4.1-py36_blas_openblas_200.tar.bz2 https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py36_1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.5.1-py36_3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/pyqt-5.6.0-py36_4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/python-3.6.4-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/setuptools-39.0.1-py36_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/sip-4.18-py36_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py36_1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.6-blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_202.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/vtk-8.1.0-py36h87a2a2b_201.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py36_2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/xz-5.2.3-0.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/certifi-2018.1.18-py27_0.tar.bz2 +https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/protobuf-3.2.0-py27_0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/setuptools-38.5.1-py27_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/pip-9.0.1-py27_1.tar.bz2 -- GitLab From b47ae312b0fb6e66516288818448198863e81ce3 Mon Sep 17 00:00:00 2001 From: jlaura Date: Wed, 4 Apr 2018 08:17:28 -0700 Subject: [PATCH 162/620] Revert "Revert "Adding support for libisis python bindings"" --- .gitignore | 160 ++++++++++ isis/Jenkinsfile => Jenkinsfile | 0 configure.py | 88 +++++ environment.yml | 58 ++-- isis/CMakeLists.txt | 287 ++++++++++++++--- isis/cmake/AddIsisModule.cmake | 2 - isis/cmake/CMakeLists.txt | 4 - isis/cmake/FindAllDependencies.cmake | 122 ------- isis/cmake/FindBullet.cmake | 22 +- isis/cmake/FindCSPICE.cmake | 4 +- isis/cmake/FindCholmod.cmake | 18 +- isis/cmake/FindEigen.cmake | 2 +- isis/cmake/FindEmbree.cmake | 4 +- isis/cmake/FindGMM.cmake | 2 +- isis/cmake/FindGSL.cmake | 6 +- isis/cmake/FindGeoTIFF.cmake | 4 +- isis/cmake/FindGeos.cmake | 6 +- isis/cmake/FindHDF5.cmake | 10 +- isis/cmake/FindJama.cmake | 2 +- isis/cmake/FindKakadu.cmake | 8 +- isis/cmake/FindLibPython.py | 10 + isis/cmake/FindNN.cmake | 4 +- isis/cmake/FindOpenCV.cmake | 28 +- isis/cmake/FindPCL.cmake | 8 +- isis/cmake/FindPNG.cmake | 4 +- isis/cmake/FindProtobuf.cmake | 4 +- isis/cmake/FindPython.cmake | 108 +++++++ isis/cmake/FindQwt.cmake | 4 +- isis/cmake/FindSip.cmake | 44 +++ isis/cmake/FindSip.py | 13 + isis/cmake/FindSuperLU.cmake | 4 +- isis/cmake/FindTIFF.cmake | 4 +- isis/cmake/FindTNT.cmake | 2 +- isis/cmake/FindX11.cmake | 2 +- isis/cmake/FindXercesC.cmake | 4 +- isis/cmake/Findnanoflann.cmake | 2 +- isis/sipfiles/BundleAdjust.sip | 31 ++ isis/sipfiles/BundleControlPoint.sip | 68 ++++ isis/sipfiles/BundleImage.sip | 16 + isis/sipfiles/BundleMeasure.sip | 30 ++ .../BundleObservationSolveSettings.sip | 59 ++++ isis/sipfiles/BundleResults.sip | 125 ++++++++ isis/sipfiles/BundleSettings.sip | 113 +++++++ isis/sipfiles/BundleSolutionInfo.sip | 28 ++ isis/sipfiles/ControlNet.sip | 31 ++ isis/sipfiles/ControlPoint.sip | 302 ++++++++++++++++++ isis/sipfiles/MaximumLikelihoodWFunctions.sip | 52 +++ isis/sipfiles/Statistics.sip | 41 +++ isis/sipfiles/master.sip | 75 +++++ isis/sipfiles/type_conversions.sip | 292 +++++++++++++++++ .../apps/seedgrid/tsts/errors/errors.txt | 1 + .../BundleObservationSolveSettings.h | 1 + linux-spec.txt | 76 ++--- macos-spec.txt | 111 ++++--- 54 files changed, 2130 insertions(+), 376 deletions(-) rename isis/Jenkinsfile => Jenkinsfile (100%) create mode 100644 configure.py delete mode 100644 isis/cmake/FindAllDependencies.cmake create mode 100644 isis/cmake/FindLibPython.py create mode 100644 isis/cmake/FindPython.cmake create mode 100644 isis/cmake/FindSip.cmake create mode 100644 isis/cmake/FindSip.py create mode 100644 isis/sipfiles/BundleAdjust.sip create mode 100644 isis/sipfiles/BundleControlPoint.sip create mode 100644 isis/sipfiles/BundleImage.sip create mode 100644 isis/sipfiles/BundleMeasure.sip create mode 100644 isis/sipfiles/BundleObservationSolveSettings.sip create mode 100644 isis/sipfiles/BundleResults.sip create mode 100644 isis/sipfiles/BundleSettings.sip create mode 100644 isis/sipfiles/BundleSolutionInfo.sip create mode 100644 isis/sipfiles/ControlNet.sip create mode 100644 isis/sipfiles/ControlPoint.sip create mode 100644 isis/sipfiles/MaximumLikelihoodWFunctions.sip create mode 100644 isis/sipfiles/Statistics.sip create mode 100644 isis/sipfiles/master.sip create mode 100644 isis/sipfiles/type_conversions.sip create mode 100644 isis/src/control/apps/seedgrid/tsts/errors/errors.txt diff --git a/.gitignore b/.gitignore index 789cc4093c..fdd6c6484c 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,163 @@ print.prt */tsts/*/output/* */build/ */install/ + +# Created by https://www.gitignore.io/api/c++ + +### C++ ### +# Prerequisites +*.d +*.hpp +*.sbf + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + + +# Created by https://www.gitignore.io/api/osx + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +# Created by https://www.gitignore.io/api/python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +.venv/ +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject diff --git a/isis/Jenkinsfile b/Jenkinsfile similarity index 100% rename from isis/Jenkinsfile rename to Jenkinsfile diff --git a/configure.py b/configure.py new file mode 100644 index 0000000000..4a3c84d735 --- /dev/null +++ b/configure.py @@ -0,0 +1,88 @@ +import os +import sys +import sipconfig +import sipdistutils +import PyQt5 +import subprocess +import argparse + +from os.path import splitext +from os.path import dirname +from glob import glob +from distutils.spawn import find_executable + +from PyQt5.QtCore import PYQT_CONFIGURATION +from plio.utils.utils import find_in_dict +from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict +from sipconfig import ModuleMakefile + +def main (module): + # The name of the SIP build file generated by SIP and used by the build + # system. + sipy_sip_dir = "sipfiles/" + module = sipy_sip_dir+module + '.sip' + build_file = "bundle"+".sbf" + target = module+".so" + + # Get the extra SIP flags needed by the imported qt module. Note that + # this normally only includes those flags (-x and -t) that relate to SIP's + # versioning system. + qt_sip_flags = qtconfigdict["sip_flags"] + + # sip_bin = current_env_path + "/bin/sip" + sip_bin = find_executable('sip') + pyqt_sip_dir = dirname(dirname(sip_bin)) + "/share/sip/PyQt5" + + # Get the PyQt configuration information. + config = sipconfig.Configuration() + + # Run SIP to generate the code. Note that we tell SIP where to find the qt + # module's specification files using the -I flag. + + errcode = os.system(" ".join([sip_bin, "-e","-c", ".", "-b", build_file, "-I", + pyqt_sip_dir, qt_sip_flags, module])) + + if errcode != 0: + print('sip exited with non zero error code: {}'.format(errcode)) + + # We are going to install the SIP specification file for this module and + # its configuration module. + installs = [] + installs.append([module, os.path.join(pyqt_sip_dir, "isis3")]) + + isis_root = os.getenv("ISISROOT") + if not isis_root: + raise("Please set ISIS") + + extra_libs = ["$(ALLLIBS)", "-Wl,-rpath,"+isis_root+"/lib", "-Wl,-rpath,"+isis_root+"/3rdParty/lib"] + + makefile = ModuleMakefile(configuration=config, build_file=build_file, installs=installs) + makefile.extra_cxxflags = ["$(ALLINCDIRS)", "-Wstrict-aliasing=0", "-Wno-unused-variable"] + makefile.extra_lflags = ["$(ALLLIBDIRS)"] + makefile.extra_include_dirs = [x[0] for x in os.walk('incs/')] + makefile.extra_lib_dirs = [isis_root + '/3rdParty/lib', isis_root + 'lib'] + makefile.generate() + + # add import line for isismake.os + isis_makefile = "include " + isis_root + "/make/isismake.os" + + with open("Makefile", 'r+') as f: + content = f.read() + content = content.replace("LIBS =", "LIBS = " + ' '.join(extra_libs)) + f.seek(0, 0) + f.write(isis_makefile + '\n\n' + content) + +if __name__ == "__main__": + clean = ['cpp', 'c', 'h', 'hpp', 'o', 'sbf'] + + # If clean is passed in, clear up all the files genreated by the scripts + if len(sys.argv) > 1 and sys.argv[1] == 'clean': + files = [] + for filetype in clean: + files.extend(glob('*.{}'.format(filetype))) + + for f in files: + os.remove(f) + exit() + + main('master') diff --git a/environment.yml b/environment.yml index 543eb509e1..0df225c443 100644 --- a/environment.yml +++ b/environment.yml @@ -8,35 +8,36 @@ channels: - jlaura - defaults dependencies: - - ca-certificates==2017.08.26=h1d4fec5_0 + - ca-certificates==2017.08.26 - dbus==1.10.20=0 - - future==0.16.0=y27_1 - - gst-plugins-base=1.8.0=0 + - future==0.16.0 + - gst-plugins-base - gstreamer==1.8.0=0 - - jsoncpp==1.8.3=h3a67955_0 - - libgcc==4.8.5=1 - - libgcc-ng==7.2.0=h7cc24e2_2 + - jsoncpp==1.8.3 - libgfortran==3.0=0 - - libstdcxx-ng==7.2.0=h7a57d05_2 + - libstdcxx-ng==7.2.0 + - qwt=6.1.3 + - pyqt=5.6.0 + - sip=4.18 - libxcb==1.12=1 - - mysql==5.7.20=h55eaa98_0 + - mysql==5.7.20 - ncurses==5.9=10 - ninja==1.7.2=0 - - patchelf==0.9=hf79760b_2 - - pip==9.0.1=py27_1 - - setuptools=38.5.1=py27_0 - - wheel==0.30.0=py27h2bc6bb2_1 + - patchelf==0.9 + - pip==9.0.1 + - setuptools=38.5.1 + - wheel==0.30.0 - xerces-c==3.1.4=0 - xz==5.2.3=0 - zlib==1.2.11=0 - blas==1.1=openblas - - boost==1.65.1=py27_0 - - boost-cpp==1.65.1=1 + - boost==1.65.1 + - boost-cpp==1.65.1 - bzip2==1.0.6=1 - cairo==1.14.6=4 - - certifi==2018.1.18=py27_0 + - certifi==2018.1.18 - cmake==3.9.1=0 - - cspice==66=0 + - cspice==66-0 - curl==7.55.1=0 - doxygen==1.8.14=0 - eigen==3.3.3=0 @@ -48,7 +49,7 @@ dependencies: - freeglut==3.0.0=4 - freetype==2.7=1 - geos==3.5.1=1 - - geotiff==1.4.2=1 + - geotiff==1.4.2 - gettext==0.19.8.1=0 - giflib==5.1.4=0 - glib==2.51.4=0 @@ -56,7 +57,7 @@ dependencies: - gsl==2.2.1=blas_openblas_3 - harfbuzz==1.3.4=2 - hdf5==1.8.18=2 - - icu==58.2=0 + - icu==58.2 - jasper==1.900.1=1 - jbig==2.1=0 - jpeg==9b=2 @@ -80,24 +81,24 @@ dependencies: - mysql-connector-c==6.1.6=0 - nanoflann==1.2.2=0 - nn==1.86.0=2 - - numpy==1.13.3=py27_blas_openblas_200 + - numpy==1.13.3=py36_blas_openblas_200 - openblas==0.2.19=2 - - opencv==3.2.0=np113py27_blas_openblas_203 + - opencv==3.2.0=np113py36_blas_openblas_203 - openssl==1.0.2n=0 - pcre==8.39=0 - pixman==0.34.0=1 - proj4==4.9.3=5 - pthread-stubs==0.3=1 - - python==2.7.14=2 + - python==3.6 - readline==6.2=0 - rhash==1.3.4=0 - - six==1.11.0=py27_1 + - six==1.11.0 - sqlite==3.13.0=1 - suitesparse==4.5.4=blas_openblas_200 - superlu==5.2.1=blas_openblas_201 - tbb==4.4_20160526=1 - tk==8.5.19=2 - - vtk==8.1.0=py27_mesalib_0 + - vtk==8.1.0 - x264==20131217=3 - xorg-kbproto==1.0.7=1 - xorg-libx11==1.6.4=6 @@ -106,21 +107,20 @@ dependencies: - xorg-libxrender==0.9.10=0 - xorg-renderproto==0.11.1=1 - xorg-xproto==7.0.31=6 - - bz2file==0.98=py27_0 + - bz2file==0.98 - cloog==0.18.0=0 - - gcc==4.8.5=7 - isl==0.12.2=0 - - protobuf==2.6.1=py27_1 + - protobuf==3.5.1 - system==5.8=2 - - libprotobuf==2.6.1=0 + - libprotobuf==3.2.0=0 - bullet==2.86.1=0 - ds9==7.5=0 - gmm==5.0=0 - jama==125=0 - pcl==1.8.1=0 - qhull==7.2.0=0 - - qt==5.7.1=0 - - qwt==6.1.3=0 + - qt==5.6.2 + - qwt==6.1.3 - tnt==126=0 - xalan-c==1.11=0 prefix: /scratch/anaconda3/envs/isis diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 47d86789a1..7fa0c88cff 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -57,10 +57,8 @@ message("Detected Operating System: ${osVersionString}") # as a static library using some specialized code in Utilities.cmake. set(BUILD_SHARED_LIBS ON) -# Specify flags used -# on linux, add the conda prefix to handle possible issues with rpaths at link time -# sometimes third parties do not set their rpaths correctly -set(thirdPartyCppFlags -Wall -std=c++11 -DISIS_LITTLE_ENDIAN=1 -fPIC -Wno-unused-parameter -Wno-overloaded-virtual -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) +# make sure to leave rpaths untouched on install +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Specify user options that can be passed in with the initial CMake command. option(isis3Data "Directory containing Isis3Data" OFF ) @@ -71,92 +69,283 @@ option(buildMissions "Build the mission specific modules" ON ) option(buildStaticCore "Build libisis3 static as well as dynamic" OFF ) option(buildTests "Set up unit, application, and module tests." ON ) option(JP2KFLAG "Whether or not to build using JPEG2000 support" ON ) -option(develop "Use a devleopment configuration" ON ) +option(pybindings "Turn on to build Python bindings" ON ) # if cmake install prefix is not set, and conda env is activated, use the # conda env as the install directory if(DEFINED ENV{CONDA_PREFIX} AND CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") - set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) -endif() - -message("Installing in: ${CMAKE_INSTALL_PREFIX}") - -# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K -# needs to be either 1 or 0 for C style true false -if(JP2KFLAG) - set(JP2KFLAG 1) + set(CMAKE_INSTALL_PREFIX $ENV{CONDA_PREFIX}) endif() # Prioritize passed in variables over env vars, probably a better way to do this if(DEFINED ENV{ISIS3DATA} AND NOT isis3Data) - set(isis3Data $ENV{ISIS3DATA}) - set(isis3Data ON) + set(isis3Data $ENV{ISIS3DATA}) endif() if(DEFINED ENV{ISIS3TESTDATA} AND NOT isis3TestData) - set(isis3TestData $ENV{ISIS3TESTDATA}) - set(isis3TestData ON) + set(isis3TestData $ENV{ISIS3TESTDATA}) endif() if(EXISTS ${isis3Data}) - set(ENV{ISIS3DATA} "${isis3Data}") - message("Using ISIS3DATA = $ENV{ISIS3DATA}") + set(ENV{ISIS3DATA} "${isis3Data}") else() - message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") + message(WARNING "Isis3Data directory ${isis3Data} not found, unit tests will fail.") + set(isis3Data OFF) endif() if(EXISTS ${isis3TestData}) - set(ENV{ISIS3TESTDATA} "${isis3TestData}") - message("Using ISIS3TESTDATA = $ENV{ISIS3TESTDATA}") + set(ENV{ISIS3TESTDATA} "${isis3TestData}") else() - message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") + message(WARNING "Isis3TestData directory ${isis3TestData} not found, application and module tests will fail.") + set(isis3TestData OFF) endif() -if(develop) +if(${testOutputDir} STREQUAL "OFF") + message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") + set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") + execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) +else() + # User specified a test output folder, make sure it exists. + message("Writing test data folders to = ${testOutputDir}") + execute_process(COMMAND mkdir -p ${testOutputDir}) +endif() +# inject ISISROOT +add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) +add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) + +message("CONFIGURATION") +message("\tBUILD STATIC CORE: ${buildStaticCore}") +message("\tBUILD TESTS: ${buildTests}") +message("\tBUILD CORE: ${buildCore}") +message("\tBUILD MISSIONS: ${buildMissions}") +message("\tJP2K SUPPORT: ${JP2KFLAG}") +message("\tPYTHON BINDINGS: ${pybindings}") +message("\tISIS3DATA: ${isis3Data}") +message("\tISISTESTDATA: ${isis3TestData}") +message("\tTEST OUTPUT DIR: ${testOutputDir}") +message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") + +#=============================================================================== +#=============================================================================== + +# Set up Anaconda prefix in the case with a non-default conda env is activated +if(EXISTS $ENV{CONDA_PREFIX}) + message("CONDA PREFIX: $ENV{CONDA_PREFIX}") + list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} + $ENV{CONDA_PREFIX}/lib/cmake/Qt5) endif() -if(${testOutputDir} STREQUAL "OFF") - message("Writing test data folders to = ${CMAKE_BINARY_DIR}/testOutputDir") - set(testOutputDir "${CMAKE_BINARY_DIR}/testOutputDir") - execute_process(COMMAND mkdir -p ${CMAKE_BINARY_DIR}/testOutputDir) -else() - # User specified a test output folder, make sure it exists. - message("Writing test data folders to = ${testOutputDir}") - execute_process(COMMAND mkdir -p ${testOutputDir}) +# options only allow on/off but this flag is piped into ISIS as ENABLEJP2K +# needs to be either 1 or 0 for C style true false +if(JP2KFLAG) + set(JP2KFLAG 1) +endif() + + # Set up the ctest tool which is used to run all of the tests. + enable_testing() + include(CTest) + +# Specify flags used +# on linux, add the conda prefix to handle possible issues with rpaths at link time +# sometimes third parties do not set their rpaths correctly +set(thirdPartyCppFlags -Wall + -std=c++11 + -fPIC + -DISIS_LITTLE_ENDIAN=1 + -fPIC -Wno-unused-parameter + -Wno-overloaded-virtual + -DGMM_USES_SUPERLU + -DENABLEJP2K=${JP2KFLAG} + ) + +# Flag to fix numeric literals problem with boost on linux +if(NOT APPLE) + set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals + -Wl,-rpath,$ENV{CONDA_PREFIX}/lib) endif() -# Set the default library extension based on the platform + # Append CPP flags set in the third party lib file to the string set in this file. + string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) + + +# Paths to required executables +find_program(XALAN Xalan REQUIRED) +find_program(LATEX latex) +find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED) +find_program(UIC uic REQUIRED) +find_program(MOC moc REQUIRED) +find_program(RCC rcc REQUIRED) +find_program(PROTOC protoc REQUIRED) + +find_package(Qt5 COMPONENTS + Core + Concurrent + Gui + Multimedia + MultimediaWidgets + Network + OpenGL # Needed to install mesa-common-dev for this! + PrintSupport + Qml + Quick + Script + ScriptTools + Sql + Svg + Test + WebChannel + Widgets + Xml + XmlPatterns REQUIRED) + +# Some of these will have non-traditional installs with version numbers in the paths in v007 +# For these, we pass in a version number, and use it in the path suffix +# This only applies to v007, and outside of the building, we should only expect standard installs +# The v007-specific installs are listed beside their find_package calls below: +find_package(Boost 1.59.0 REQUIRED) +find_package(Bullet 2.86 REQUIRED) +find_package(Cholmod 4.4.5 REQUIRED) +find_package(CSPICE 65 REQUIRED) +find_package(Eigen REQUIRED) +find_package(Embree 2.15.0 REQUIRED) +find_package(GeoTIFF 2 REQUIRED) +find_package(GMM 5.0 REQUIRED) +find_package(GSL 19 REQUIRED) +find_package(HDF5 1.8.15 REQUIRED) +find_package(Jama 125 REQUIRED) +find_package(NN REQUIRED) +find_package(OpenCV 3.1.0 REQUIRED) +find_package(PCL 1.8 REQUIRED) +find_package(Protobuf 2.6.1 REQUIRED) +find_package(Qwt 6 REQUIRED) +find_package(SuperLU 4.3 REQUIRED) +find_package(TIFF 4.0.5 REQUIRED) +find_package(TNT 126 REQUIRED) +find_package(XercesC 3.1.2 REQUIRED) +find_package(X11 6 REQUIRED) +find_package(nanoflann REQUIRED) +find_package(PNG REQUIRED) +find_package(Kakadu) +find_package(Geos 3.5.0 REQUIRED) + +# Im this case, we specify the version numbers being searched for in the non-traditional installs. if(APPLE) - set(SO ".dylib") -else() - set(SO ".so") + find_package(OpenGL REQUIRED) +endif(APPLE) + +if(pybindings) + find_package(Python REQUIRED) + find_package(Sip REQUIRED) +endif() + +# Iterate through all variables and extract the libraries and include directories +get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES + +set(ALLLIBDIRS "") +set(ALLLIBS "") +set(ALLINCDIRS "") + +# Get all include dir variables +foreach (_variableName ${_variableNames}) +#message("VAR=${_variableName}") + if (_variableName MATCHES ".+_INCLUDE_DIR$") + list(APPEND ALLINCDIRS "${${_variableName}}") + elseif (_variableName MATCHES ".+_INCLUDE_PATH$") + list(APPEND ALLINCDIRS "${${_variableName}}") + endif(_variableName MATCHES ".+_INCLUDE_DIR$") +endforeach() + +# get all Library variables +foreach (_variableName ${_variableNames}) + get_filename_component(LIBDIR "${${_variableName}}" DIRECTORY) + if (_variableName MATCHES "^CMAKE+") + elseif (_variableName MATCHES ".+_LIB$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + elseif (_variableName MATCHES ".+_LIBRARY$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + elseif (_variableName MATCHES ".+_LIBRARIES$") + list(APPEND ALLLIBDIRS "${LIBDIR}") + list(APPEND ALLLIBS "${${_variableName}}") + endif() +endforeach() + +# Sometimes we add the same lib more than once (especially with LIBDIRS) +list(REMOVE_DUPLICATES ALLLIBDIRS) +list(REMOVE_DUPLICATES ALLLIBS) +list(REMOVE_DUPLICATES ALLINCDIRS) + +#=============================================================================== +#=============================================================================== + +# Set python bindings configuration and set target for generating C++ files +if(pybindings) + message("Configuring Python Bindings") + + if (NOT DEFINED PYINSTALL_DIR) + set(PYINSTALL_DIR ${PYTHON_SITE_PACKAGES_DIR}) + endif() + message("PYTHON BINDINGS INSTALL DIR: ${PYINSTALL_DIR}") + + # We need to get the locations for sip files, modules, etc. + set(ISIS_SIP_DIR "${CMAKE_SOURCE_DIR}/sipfiles") + set(ISIS_SIP_MODULE "${CMAKE_SOURCE_DIR}/sipfiles/master.sip") + set(SIP_BUILD_FILE "isispy.sbf") + set(ISIS_SIP_CODE_DIR ${CMAKE_BINARY_DIR}/sipsrc) + + # Create the output directory for the new .CPP files + execute_process(COMMAND mkdir -p "${ISIS_SIP_CODE_DIR}") + + # get list of output files exepected from sip + + # get the PYQT configuration based flags from Python + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c + "from PyQt5.QtCore import PYQT_CONFIGURATION as qtconfigdict;print(qtconfigdict['sip_flags'])" + OUTPUT_VARIABLE PYQT_SIP_FLAGS) + + # CMAKE doesn't handle spaces from python well when piping that into the + # command because of white space and a trailing new line, + # so we turn it into a list + string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS) + string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS}) + message("Generating C++ code from sip files") + execute_process(COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE}) + + # add target so users can run the command after initial configuration + add_custom_target(sipfiles + COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE} + COMMENT "Generating C++ code from sip files") + + file(GLOB SIP_GENERATED_SOURCE_FILES ${ISIS_SIP_CODE_DIR}/*.cpp) + add_library(isispy MODULE ${SIP_GENERATED_SOURCE_FILES}) + target_link_libraries(isispy ${ALLLIBS}) + target_link_libraries(isispy isis3) + set_target_properties(isispy PROPERTIES LINK_DEPENDS isis3) + add_dependencies(isispy sipfiles) + + install(TARGETS isispy DESTINATION ${PYINSTALL_DIR}) endif() #=============================================================================== #=============================================================================== + # Start setting up the build # Add extension to find fortran until .so symlink can be added to /usr/lib64 list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.3 .so.6 .so.5) -# Set up all the third party library dependencies. -include(FindAllDependencies) - # Allow everything to include the 3rd party libraries include_directories(SYSTEM ${ALLINCDIRS}) link_directories(${ALLLIBDIRS}) -# inject ISISROOT -add_definitions( -DISISROOT="${CMAKE_SOURCE_DIR}" ) -add_definitions( -DISISBUILDDIR="${CMAKE_BINARY_DIR}" ) - # add isis headers file(GLOB ISIS_HEADERS ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp) file(COPY ${ISIS_HEADERS} DESTINATION ${CMAKE_BINARY_DIR}/inc) include_directories(${CMAKE_BINARY_DIR}/inc) - set(CORE_LIB_NAME isis3) # Specify relative library include paths which will be set up on @@ -166,7 +355,6 @@ if(APPLE) else() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};$ORIGIN/../lib;$ORIGIN/../3rdParty/lib") endif() -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # We will set up some links with these files at the end of the install process so # make sure they are cleared at the start of the install process. @@ -177,13 +365,6 @@ EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestP install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/src/base/objs/Preference/TestPreferences ${CMAKE_INSTALL_PREFIX}/)") install(CODE "EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_INSTALL_PREFIX}/)") -# Append CPP flags set in the third party lib file to the string set in this file. -string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) -# Set up the ctest tool which is used to run all of the tests. -enable_testing() -include(CTest) - # Delete any existing plugin files in the build folder so they # don't get filled with duplicate entries. file(GLOB existingPlugins "${CMAKE_BINARY_DIR}/plugins/*.plugin") diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index aa403db34f..f4a87169d2 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -4,7 +4,6 @@ include(CodeGeneration) - # Incorporate an application folder function(add_isis_app folder libDependencies) @@ -58,7 +57,6 @@ function(add_isis_app folder libDependencies) add_makefile_test_folder(${f} ${appName}_app) endforeach() endif() - endfunction(add_isis_app) diff --git a/isis/cmake/CMakeLists.txt b/isis/cmake/CMakeLists.txt index 4bb9e778d4..8b1df97398 100644 --- a/isis/cmake/CMakeLists.txt +++ b/isis/cmake/CMakeLists.txt @@ -1,4 +1,3 @@ - # This file contains everything that should be exectuted AFTER the installation # step has completed. @@ -10,8 +9,6 @@ install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5.0${SO} ${CMAKE_INSTALL_P install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3.5${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis3${SO})") install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3${SO} ${CMAKE_INSTALL_PREFIX}/lib/libisis${SO})") - - # On OSX, need to correct all the paths encoded in each of the distributed library files so # that they properly find the distruted files using relative paths. if (APPLE) @@ -26,5 +23,4 @@ if (APPLE) get_filename_component(name ${f} NAME) install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/plugins/${name} resetRpath)") endforeach() - endif() diff --git a/isis/cmake/FindAllDependencies.cmake b/isis/cmake/FindAllDependencies.cmake deleted file mode 100644 index 6440e2d679..0000000000 --- a/isis/cmake/FindAllDependencies.cmake +++ /dev/null @@ -1,122 +0,0 @@ -#============================================================================== -# 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? -#=============================================================================== - -message("USING CONDA PREFIX: $ENV{CONDA_PREFIX}") -list(APPEND CMAKE_FIND_ROOT_PATH $ENV{CONDA_PREFIX} $ENV{CONDA_PREFIX}/lib/cmake/Qt5) - -# Add thirdPartyCppFlags -set(thirdPartyCppFlags ${thirdPartyCppFlags} -DGMM_USES_SUPERLU) -set(thirdPartyCppFlags ${thirdPartyCppFlags} "-DENABLEJP2K=${JP2KFLAG}") - -# Flag to fix numeric literals problem with boost on linux -if(NOT APPLE) - set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals ) -endif() - -# Paths to required executables -find_program(XALAN Xalan REQUIRED) -find_program(LATEX latex) -find_program(DOXYGEN NAME doxygen PATH_SUFFIXES doxygen REQUIRED) -find_program(UIC uic REQUIRED) -find_program(MOC moc REQUIRED) -find_program(RCC rcc REQUIRED) -find_program(PROTOC protoc REQUIRED) - -find_package(Qt5 COMPONENTS - Core - Concurrent - Gui - Multimedia - MultimediaWidgets - Network - OpenGL # Needed to install mesa-common-dev for this! - PrintSupport - Qml - Quick - Script - ScriptTools - Sql - Svg - Test - WebChannel - #WebKit - #WebKitWidgets - Widgets - Xml - XmlPatterns REQUIRED) - -# Some of these will have non-traditional installs with version numbers in the paths in v007 -# For these, we pass in a version number, and use it in the path suffix -# This only applies to v007, and outside of the building, we should only expect standard installs -# The v007-specific installs are listed beside their find_package calls below: -find_package(Boost 1.59.0 REQUIRED) -find_package(Bullet 2.86 REQUIRED) -find_package(Cholmod 4.4.5 REQUIRED) -find_package(CSPICE 65 REQUIRED) -find_package(Eigen REQUIRED) -find_package(Embree 2.15.0 REQUIRED) -find_package(GeoTIFF 2 REQUIRED) -find_package(GMM 5.0 REQUIRED) -find_package(GSL 19 REQUIRED) -find_package(HDF5 1.8.15 REQUIRED) -find_package(Jama 125 REQUIRED) -find_package(NN REQUIRED) -find_package(OpenCV 3.1.0 REQUIRED) -find_package(PCL 1.8 REQUIRED) -find_package(Protobuf 2.6.1 REQUIRED) -find_package(Qwt 6 REQUIRED) -find_package(SuperLU 4.3 REQUIRED) -find_package(TIFF 4.0.5 REQUIRED) -find_package(TNT 126 REQUIRED) -find_package(XercesC 3.1.2 REQUIRED) -find_package(X11 6 REQUIRED) -find_package(nanoflann REQUIRED) -find_package(PNG REQUIRED) -find_package(Kakadu) -find_package(Geos 3.5.0 REQUIRED) - - -# Im this case, we specify the version numbers being searched for in the non-traditional installs. -if(APPLE) - find_package(OpenGL REQUIRED) -endif(APPLE) - -get_cmake_property(_variableNames VARIABLES) # Get All VARIABLES -foreach (_variableName ${_variableNames}) -#message("VAR=${_variableName}") - if (_variableName MATCHES ".+_INCLUDE_DIR$") - list(APPEND ALLINCDIRS "${${_variableName}}") - elseif (_variableName MATCHES ".+_INCLUDE_PATH$") - list(APPEND ALLINCDIRS "${${_variableName}}") - endif(_variableName MATCHES ".+_INCLUDE_DIR$") -endforeach() - -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() -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() - -list(REMOVE_DUPLICATES ALLLIBDIRS) -list(REMOVE_DUPLICATES ALLLIBS) -list(REMOVE_DUPLICATES ALLINCDIRS) diff --git a/isis/cmake/FindBullet.cmake b/isis/cmake/FindBullet.cmake index dcc984c2b9..8b7b117683 100644 --- a/isis/cmake/FindBullet.cmake +++ b/isis/cmake/FindBullet.cmake @@ -23,14 +23,14 @@ find_library(BULLET3_LINEARMATH_LIBRARY NAMES LinearMath) get_filename_component(BULLET_ROOT_INCLUDE_DIR "${BULLET_INCLUDE_DIR}" DIRECTORY) -message( "-- BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) -message( "-- BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) -message( "-- BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) -message( "-- BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) -message( "-- BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) -message( "-- BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) -message( "-- BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) -message( "-- BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) -message( "-- BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) -message( "-- BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) -message( "-- BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) +message(STATUS "BULLET INCLUDE: " ${BULLET_INCLUDE_DIR} ) +message(STATUS "BULLET OPENCL: " ${BULLET_OPENCL_LIBRARY} ) +message(STATUS "BULLET SOFTBODY: " ${BULLET_SOFTBODY_LIBRARY}) +message(STATUS "BULLET INVERSE DYNAMICS: " ${BULLET_INVERSEDYNAMICS_LIBRARY} ) +message(STATUS "BULLET DYNAMICS: " ${BULLET_DYNAMICS_LIBRARY} ) +message(STATUS "BULLET COLLISION: " ${BULLET_COLLISION_LIBRARY} ) +message(STATUS "BULLET GEOMETRY: " ${BULLET3_GEOMETRY_LIBRARY} ) +message(STATUS "BULLET3 3DYNAMICS: " ${BULLET3_3DYNAMICS_LIBRARY} ) +message(STATUS "BULLET3 3COLLISION: " ${BULLET3_3COLLISION_LIBRARY} ) +message(STATUS "BULLET3 COMMON: " ${BULLET3_COMMON_LIBRARY} ) +message(STATUS "BULLET3 LINEARMATH: " ${BULLET3_LINEARMATH_LIBRARY} ) diff --git a/isis/cmake/FindCSPICE.cmake b/isis/cmake/FindCSPICE.cmake index 78f1af260b..3df2e1ff87 100644 --- a/isis/cmake/FindCSPICE.cmake +++ b/isis/cmake/FindCSPICE.cmake @@ -14,5 +14,5 @@ find_library(CSPICE_LIBRARY NAMES cspice ) -message( "-- CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) -message( "-- CSPICE LIB: " ${CSPICE_LIBRARY} ) +message(STATUS "CSPICE INCLUDE: " ${CSPICE_INCLUDE_DIR} ) +message(STATUS "CSPICE LIB: " ${CSPICE_LIBRARY} ) diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index c8119a296d..a46f6d9c36 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -36,15 +36,15 @@ endif() get_filename_component(CHOLMOD_ROOT_INCLUDE_DIR "${CHOLMOD_INCLUDE_DIR}" DIRECTORY) -message( "-- CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) -message( "-- CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) -message( "-- CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) -message( "-- CAMD LIB: " ${CAMD_LIBRARY} ) -message( "-- AMD LIB: " ${AMD_LIBRARY} ) -message( "-- SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) -message( "-- FORTRAN LIB: " ${FORTRAN_LIBRARY} ) -message( "-- BLAS LIB: " ${BLAS_LIBRARY} ) +message(STATUS "CHOLMOD INCLUDE: " ${CHOLMOD_INCLUDE_DIR} ) +message(STATUS "CHOLMOD LIB: " ${CHOLMOD_LIBRARY} ) +message(STATUS "CCOLMOD LIB: " ${CCOLAMD_LIBRARY} ) +message(STATUS "CAMD LIB: " ${CAMD_LIBRARY} ) +message(STATUS "AMD LIB: " ${AMD_LIBRARY} ) +message(STATUS "SUITESPARSE LIB: " ${SUITESPARSE_LIBRARY} ) +message(STATUS "FORTRAN LIB: " ${FORTRAN_LIBRARY} ) +message(STATUS "BLAS LIB: " ${BLAS_LIBRARY} ) if(NOT APPLE) - message("-- LAPACK LIB: " ${LAPACK_LIBRARY}) + message(STATUS "LAPACK LIB: " ${LAPACK_LIBRARY}) endif() diff --git a/isis/cmake/FindEigen.cmake b/isis/cmake/FindEigen.cmake index ef0829284e..154a23cd59 100644 --- a/isis/cmake/FindEigen.cmake +++ b/isis/cmake/FindEigen.cmake @@ -14,4 +14,4 @@ find_path(EIGEN_ROOT_INCLUDE_DIR PATH_SUFFIXES eigen eigen3 ) -message( "-- EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) +message(STATUS "EIGEN INCLUDE DIR: " ${EIGEN_ROOT_INCLUDE_DIR} ) diff --git a/isis/cmake/FindEmbree.cmake b/isis/cmake/FindEmbree.cmake index 786e3307f6..d7af1d78d6 100644 --- a/isis/cmake/FindEmbree.cmake +++ b/isis/cmake/FindEmbree.cmake @@ -16,5 +16,5 @@ find_library(EMBREE_LIBRARY get_filename_component(EMBREE_ROOT_INCLUDE_DIR "${EMBREE_INCLUDE_DIR}" DIRECTORY) -message( "-- EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) -message( "-- EMBREE LIB: " ${EMBREE_LIBRARY}) +message(STATUS "EMBREE INCLUDE: " ${EMBREE_INCLUDE_DIR}) +message(STATUS "EMBREE LIB: " ${EMBREE_LIBRARY}) diff --git a/isis/cmake/FindGMM.cmake b/isis/cmake/FindGMM.cmake index e2a7d8da50..3787fa9534 100644 --- a/isis/cmake/FindGMM.cmake +++ b/isis/cmake/FindGMM.cmake @@ -11,4 +11,4 @@ find_path(GMM_INCLUDE_DIR get_filename_component(GMM_ROOT_INCLUDE_DIR "${GMM_INCLUDE_DIR}" DIRECTORY) -message( "-- GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") +message(STATUS "GMM INCLUDE DIR: ${GMM_INCLUDE_DIR}") diff --git a/isis/cmake/FindGSL.cmake b/isis/cmake/FindGSL.cmake index cd38cf470f..105dad800e 100644 --- a/isis/cmake/FindGSL.cmake +++ b/isis/cmake/FindGSL.cmake @@ -20,6 +20,6 @@ find_library(GSL_CBLAS_LIBRARY get_filename_component(GSL_ROOT_INCLUDE_DIR "${GSL_INCLUDE_DIR}" DIRECTORY) -message( "-- GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") -message( "-- GSL LIB: ${GSL_LIBRARY}") -message( "-- GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") +message(STATUS "GSL INCLUDE DIR: ${GSL_INCLUDE_DIR}") +message(STATUS "GSL LIB: ${GSL_LIBRARY}") +message(STATUS "GSL CBLAS LIB: ${GSL_CBLAS_LIBRARY}") diff --git a/isis/cmake/FindGeoTIFF.cmake b/isis/cmake/FindGeoTIFF.cmake index fce2108576..9bfbb68cac 100644 --- a/isis/cmake/FindGeoTIFF.cmake +++ b/isis/cmake/FindGeoTIFF.cmake @@ -16,5 +16,5 @@ find_library(GEOTIFF_LIBRARY get_filename_component(GEOTIFF_ROOT_INCLUDE_DIR "${GEOTIFF_INCLUDE_DIR}" DIRECTORY) -message( "-- GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") -message( "-- GEOTIFF LIB: ${GEOTIFF_LIBRARY}") +message(STATUS "GEOTIFF INCLUDE DIR: ${GEOTIFF_INCLUDE_DIR}") +message(STATUS "GEOTIFF LIB: ${GEOTIFF_LIBRARY}") diff --git a/isis/cmake/FindGeos.cmake b/isis/cmake/FindGeos.cmake index 8f4cf44249..dc2df58ec2 100644 --- a/isis/cmake/FindGeos.cmake +++ b/isis/cmake/FindGeos.cmake @@ -17,8 +17,8 @@ find_library(GEOS_C_LIBRARY NAMES geos_c ) -message( "-- GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) -message( "-- GEOS LIB: " ${GEOS_LIBRARY} ) -message( "-- GEOS C LIB: " ${GEOS_C_LIBRARY} ) +message(STATUS "GEOS INCLUDE DIR: " ${GEOS_INCLUDE_DIR} ) +message(STATUS "GEOS LIB: " ${GEOS_LIBRARY} ) +message(STATUS "GEOS C LIB: " ${GEOS_C_LIBRARY} ) get_filename_component(GEOS_ROOT_INCLUDE_DIR "${GEOS_INCLUDE_DIR}" DIRECTORY) diff --git a/isis/cmake/FindHDF5.cmake b/isis/cmake/FindHDF5.cmake index e9abbc72b8..1ebf7edcd3 100644 --- a/isis/cmake/FindHDF5.cmake +++ b/isis/cmake/FindHDF5.cmake @@ -17,8 +17,8 @@ find_library(HDF5_HLCPP_LIBRARY NAMES hdf5_hl_cpp) get_filename_component(HDF5_ROOT_INCLUDE_DIR "${HDF5_INCLUDE_DIR}" DIRECTORY) -message( "-- HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") -message( "-- HDF5 LIB: ${HDF5_LIBRARY}") -message( "-- HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") -message( "-- HDF5 HL LIB: ${HDF5_HL_LIBRARY}") -message( "-- HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") +message(STATUS "HDF5 INCLUDE DIR: ${HDF5_INCLUDE_DIR}") +message(STATUS "HDF5 LIB: ${HDF5_LIBRARY}") +message(STATUS "HDF5 CPP LIB: ${HDF5_CPP_LIBRARY}") +message(STATUS "HDF5 HL LIB: ${HDF5_HL_LIBRARY}") +message(STATUS "HDF5 HLCPP LIB: ${HDF5_HLCPP_LIBRARY}") diff --git a/isis/cmake/FindJama.cmake b/isis/cmake/FindJama.cmake index 71de34db60..c547d3b27d 100644 --- a/isis/cmake/FindJama.cmake +++ b/isis/cmake/FindJama.cmake @@ -11,4 +11,4 @@ find_path(JAMA_INCLUDE_DIR get_filename_component(JAMA_ROOT_INCLUDE_DIR "${JAMA_INCLUDE_DIR}" DIRECTORY) -message( "-- JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") +message(STATUS "JAMA INCLUDE DIR: ${JAMA_INCLUDE_DIR}") diff --git a/isis/cmake/FindKakadu.cmake b/isis/cmake/FindKakadu.cmake index a6edd15542..ed637a0e6f 100644 --- a/isis/cmake/FindKakadu.cmake +++ b/isis/cmake/FindKakadu.cmake @@ -23,9 +23,9 @@ if(JP2KFLAG) get_filename_component(KAKADU_ROOT_INCLUDE_DIR "${KAKADU_INCLUDE_DIR}" DIRECTORY) - message( "-- KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") - message( "-- KAKADU A LIB: ${KAKADU_A_LIBRARY}") - message( "-- KAKADU V LIB: ${KAKADU_V_LIBRARY}") + message(STATUS "KAKADU INC DIR: ${KAKADU_INCLUDE_DIR}") + message(STATUS "KAKADU A LIB: ${KAKADU_A_LIBRARY}") + message(STATUS "KAKADU V LIB: ${KAKADU_V_LIBRARY}") else() - message("-- KAKADU DISABLED") + message(STATUS "KAKADU DISABLED") endif() diff --git a/isis/cmake/FindLibPython.py b/isis/cmake/FindLibPython.py new file mode 100644 index 0000000000..38ae93fd3b --- /dev/null +++ b/isis/cmake/FindLibPython.py @@ -0,0 +1,10 @@ +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS + +import sys +import distutils.sysconfig + +print("exec_prefix:%s" % sys.exec_prefix) +print("short_version:%s" % sys.version[:3]) +print("long_version:%s" % sys.version.split()[0]) +print("py_inc_dir:%s" % distutils.sysconfig.get_python_inc()) +print("site_packages_dir:%s" % distutils.sysconfig.get_python_lib(plat_specific=1)) diff --git a/isis/cmake/FindNN.cmake b/isis/cmake/FindNN.cmake index 17c030e282..fa2b596278 100644 --- a/isis/cmake/FindNN.cmake +++ b/isis/cmake/FindNN.cmake @@ -15,5 +15,5 @@ find_library(NN_LIBRARY get_filename_component(NN_ROOT_INCLUDE_DIR "${NN_INCLUDE_DIR}" DIRECTORY) -message( "-- NN INCLUDE DIR: ${NN_INCLUDE_DIR}") -message( "-- NN LIB: ${NN_LIBRARY}") +message(STATUS "NN INCLUDE DIR: ${NN_INCLUDE_DIR}") +message(STATUS "NN LIB: ${NN_LIBRARY}") diff --git a/isis/cmake/FindOpenCV.cmake b/isis/cmake/FindOpenCV.cmake index 0984686d94..0450572ef0 100644 --- a/isis/cmake/FindOpenCV.cmake +++ b/isis/cmake/FindOpenCV.cmake @@ -28,17 +28,17 @@ find_library(OPENCV_FLANN_LIBRARY NAMES opencv_flann) get_filename_component(OPENCV_ROOT_INCLUDE_DIR "${OPENCV_INCLUDE_DIR}" DIRECTORY) -message( "-- OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") -message( "-- OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") -message( "-- OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") -message( "-- OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") -message( "-- OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") -message( "-- OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") -message( "-- OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") -message( "-- OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") -message( "-- OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") -message( "-- OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") -message( "-- OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") -message( "-- OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") -message( "-- OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") -message( "-- OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") +message(STATUS "OPENCV INCLUDE DIR: ${OPENCV_INCLUDE_DIR}") +message(STATUS "OPENCV CORE LIB: ${OPENCV_CORE_LIBRARY}") +message(STATUS "OPENCV VIDEOSTAB LIB: ${OPENCV_VIDEOSTAB_LIBRARY}") +message(STATUS "OPENCV SUPERRES LIB: ${OPENCV_SUPERRES_LIBRARY}") +message(STATUS "OPENCV STITCHING LIB: ${OPENCV_STITCHING_LIBRARY}") +message(STATUS "OPENCV PHOTO LIB: ${OPENCV_PHOTO_LIBRARY}") +message(STATUS "OPENCV OBJDETECT LIB: ${OPENCV_OBJDETECT_LIBRARY}") +message(STATUS "OPENCV IMGCODECS LIB: ${OPENCV_IMGCODECS_LIBRARY}") +message(STATUS "OPENCV IMGPROC LIB: ${OPENCV_IMGPROC_LIBRARY}") +message(STATUS "OPENCV CALIB3D LIB: ${OPENCV_CALIB3D_LIBRARY}") +message(STATUS "OPENCV FEATURES2D LIB: ${OPENCV_FEATURES2D_LIBRARY}") +message(STATUS "OPENCV xFEATURES2D LIB: ${OPENCV_XFEATURES2D_LIBRARY}") +message(STATUS "OPENCV HIGHGUI LIB: ${OPENCV_HIGHGUI_LIBRARY}") +message(STATUS "OPENCV FLANN LIB: ${OPENCV_FLANN_LIBRARY}") diff --git a/isis/cmake/FindPCL.cmake b/isis/cmake/FindPCL.cmake index 625a6126d7..902b5b6b1c 100644 --- a/isis/cmake/FindPCL.cmake +++ b/isis/cmake/FindPCL.cmake @@ -21,7 +21,7 @@ find_library(PCL_IO_LIBRARY NAMES pcl_io) get_filename_component(PCL_ROOT_INCLUDE_DIR "${PCL_INCLUDE_DIR}" DIRECTORY) -message( "-- PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") -message( "-- PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") -message( "-- PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") -message( "-- PCL IO LIB: ${PCL_IO_LIBRARY}") +message(STATUS "PCL INCLUDE DIR: ${PCL_INCLUDE_DIR}") +message(STATUS "PCL COMMON LIB: ${PCL_COMMON_LIBRARY}") +message(STATUS "PCL OCTREE LIB: ${PCL_OCTREE_LIBRARY}") +message(STATUS "PCL IO LIB: ${PCL_IO_LIBRARY}") diff --git a/isis/cmake/FindPNG.cmake b/isis/cmake/FindPNG.cmake index bc11004ec1..6c2439f113 100644 --- a/isis/cmake/FindPNG.cmake +++ b/isis/cmake/FindPNG.cmake @@ -13,5 +13,5 @@ find_library(PNG_LIBRARY NAMES png ) -message( "-- PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") -message( "-- PNG LIB: ${PNG_LIBRARY}") +message(STATUS "PNG INCLUDE DIR: ${PNG_INCLUDE_DIR}") +message(STATUS "PNG LIB: ${PNG_LIBRARY}") diff --git a/isis/cmake/FindProtobuf.cmake b/isis/cmake/FindProtobuf.cmake index 5374cb50e8..74db9e4342 100644 --- a/isis/cmake/FindProtobuf.cmake +++ b/isis/cmake/FindProtobuf.cmake @@ -7,5 +7,5 @@ find_library(PROTOBUF_LIBRARY NAMES protobuf) get_filename_component(PROTOBUF_ROOT_INCLUDE_DIR "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) -message( "-- PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") -message( "-- PROTOBUF LIB: ${PROTOBUF_LIBRARY}") +message(STATUS "PROTOBUF INCLUDE DIR: ${PROTOBUF_INCLUDE_DIR}") +message(STATUS "PROTOBUF LIB: ${PROTOBUF_LIBRARY}") diff --git a/isis/cmake/FindPython.cmake b/isis/cmake/FindPython.cmake new file mode 100644 index 0000000000..5f5a64a98d --- /dev/null +++ b/isis/cmake/FindPython.cmake @@ -0,0 +1,108 @@ +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS +# +# PYTHON_EXECUTABLE - The path and filename of the Python interpreter. +# +# PYTHON_SHORT_VERSION - The version of the Python interpreter found, +# excluding the patch version number. (e.g. 2.5 and not 2.5.1)) +# +# PYTHON_LONG_VERSION - The version of the Python interpreter found as a human +# readable string. +# +# PYTHON_SITE_PACKAGES_DIR - Location of the Python site-packages directory. +# +# PYTHON_INCLUDE_PATH - Directory holding the python.h include file. +# +# PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library. + +INCLUDE(CMakeFindFrameworks) + +if(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") + # Already in cache, be silent + set(PYTHONLIBRARY_FOUND TRUE) +else(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") + + FIND_PACKAGE(PythonInterp 3) + + if(PYTHONINTERP_FOUND) + FIND_FILE(_find_lib_python_py FindLibPython.py PATHS ${CMAKE_MODULE_PATH}) + + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_lib_python_py} OUTPUT_VARIABLE python_config) + if(python_config) + STRING(REGEX REPLACE ".*exec_prefix:([^\n]+).*$" "\\1" PYTHON_PREFIX ${python_config}) + STRING(REGEX REPLACE ".*\nshort_version:([^\n]+).*$" "\\1" PYTHON_SHORT_VERSION ${python_config}) + STRING(REGEX REPLACE ".*\nlong_version:([^\n]+).*$" "\\1" PYTHON_LONG_VERSION ${python_config}) + STRING(REGEX REPLACE ".*\npy_inc_dir:([^\n]+).*$" "\\1" PYTHON_INCLUDE_PATH ${python_config}) + if(NOT PYTHON_SITE_PACKAGES_DIR) + if(NOT PYTHON_LIBS_WITH_KDE_LIBS) + STRING(REGEX REPLACE ".*\nsite_packages_dir:([^\n]+).*$" "\\1" PYTHON_SITE_PACKAGES_DIR ${python_config}) + else(NOT PYTHON_LIBS_WITH_KDE_LIBS) + set(PYTHON_SITE_PACKAGES_DIR ${KDE4_LIB_INSTALL_DIR}/python${PYTHON_SHORT_VERSION}/site-packages) + endif(NOT PYTHON_LIBS_WITH_KDE_LIBS) + endif(NOT PYTHON_SITE_PACKAGES_DIR) + STRING(REGEX REPLACE "([0-9]+).([0-9]+)" "\\1\\2" PYTHON_SHORT_VERSION_NO_DOT ${PYTHON_SHORT_VERSION}) + set(PYTHON_LIBRARY_NAMES python${PYTHON_SHORT_VERSION} python${PYTHON_SHORT_VERSION_NO_DOT} python${PYTHON_SHORT_VERSION}m python${PYTHON_SHORT_VERSION_NO_DOT}m) + if(WIN32) + STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR}) + FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs) + endif(WIN32) + FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES}) + set(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH} CACHE FILEPATH "Directory holding the python.h include file" FORCE) + set(PYTHONLIBRARY_FOUND TRUE) + endif(python_config) + + # adapted from cmake's builtin FindPythonLibs + if(APPLE) + # If a framework has been detected in the include path, make sure + # framework's versioned library (not any .dylib) is used for linking + # NOTE: don't rely upon Python.framework/Versions/Current, since that may be 2.7 + if("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") + set(PYTHON_LIBRARY "") + set(PYTHON_DEBUG_LIBRARY "") + # get clean path to just framework + STRING(REGEX REPLACE "^(.*/Python\\.framework).*$" "\\1" _py_fw "${PYTHON_INCLUDE_PATH}") + if("${_py_fw}" MATCHES "Cellar/python") + # Appears to be a Homebrew Python install; do specific fix ups + # get Homebrew prefix (may not be /usr/local) + STRING(REGEX REPLACE "^(.+)/Cellar.*$" "\\1" _hb_prefix "${_py_fw}") + # prefer the Homebrew prefix framework over only versioned Python keg + set(_py_fw "${_hb_prefix}/Frameworks/Python.framework") + # prefer the symlinked-to Homebrew site-packages over only versioned Python keg + set(PYTHON_SITE_PACKAGES_DIR "${_hb_prefix}/lib/python${PYTHON_SHORT_VERSION}/site-packages") + endif("${_py_fw}" MATCHES "Cellar/python") + # prefer the Headers subdirectory for includes + if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") + set(PYTHON_INCLUDE_PATH "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers" CACHE FILEPATH "Directory holding the python.h include file" FORCE) + endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") + endif("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") + if(NOT PYTHON_LIBRARY) + # ensure the versioned framework's library is defined, instead of relying upon -F search paths + if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") + set(PYTHON_LIBRARY "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python" CACHE FILEPATH "Python framework library" FORCE) + endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") + endif(NOT PYTHON_LIBRARY) + if(PYTHON_LIBRARY) + set(PYTHONLIBRARY_FOUND TRUE) + endif(PYTHON_LIBRARY) + endif(APPLE) + endif(PYTHONINTERP_FOUND) + + if(PYTHONLIBRARY_FOUND) + if(APPLE) + # keep reference to system or custom python site-packages + # useful during app-bundling operations + set(PYTHON_SITE_PACKAGES_SYS ${PYTHON_SITE_PACKAGES_DIR}) + endif(APPLE) + set(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) + if(NOT PYTHONLIBRARY_FIND_QUIETLY) + message(STATUS "Found Python executable: ${PYTHON_EXECUTABLE}") + message(STATUS "Found Python version: ${PYTHON_LONG_VERSION}") + message(STATUS "Found Python library: ${PYTHON_LIBRARY}") + message(STATUS "Found Python site-packages: ${PYTHON_SITE_PACKAGES_DIR}") + endif(NOT PYTHONLIBRARY_FIND_QUIETLY) + else(PYTHONLIBRARY_FOUND) + if(PYTHONLIBRARY_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Python") + endif(PYTHONLIBRARY_FIND_REQUIRED) + endif(PYTHONLIBRARY_FOUND) + +endif (EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") diff --git a/isis/cmake/FindQwt.cmake b/isis/cmake/FindQwt.cmake index 8b52467945..8262a57b69 100644 --- a/isis/cmake/FindQwt.cmake +++ b/isis/cmake/FindQwt.cmake @@ -16,5 +16,5 @@ find_library(QWT_LIBRARY get_filename_component(QWT_ROOT_INCLUDE_DIR "${QWT_INCLUDE_DIR}" DIRECTORY) -message( "-- QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") -message( "-- QWT LIB: ${QWT_LIBRARY}") +message(STATUS "QWT INCLUDE LIB: ${QWT_INCLUDE_DIR}") +message(STATUS "QWT LIB: ${QWT_LIBRARY}") diff --git a/isis/cmake/FindSip.cmake b/isis/cmake/FindSip.cmake new file mode 100644 index 0000000000..8ede37c8d7 --- /dev/null +++ b/isis/cmake/FindSip.cmake @@ -0,0 +1,44 @@ +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS +# +# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number +# suitable for comparison as a string. +# +# SIP_VERSION_STR - The version of SIP found as a human readable string. +# +# SIP_BINARY_PATH - Path and filename of the SIP command line executable. +# +# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. +# +# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed +# into. + +IF(SIP_VERSION) + # Already in cache, be silent + SET(SIP_FOUND TRUE) +ELSE(SIP_VERSION) + + FIND_FILE(_find_sip_py FindSip.py PATHS ${CMAKE_MODULE_PATH}) + + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) + IF(sip_config) + STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) + STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_mod_dir:([^\n]+).*$" "\\1" SIP_MOD_DIR ${sip_config}) + SET(SIP_FOUND TRUE) + ENDIF(sip_config) + + IF(SIP_FOUND) + IF(NOT SIP_FIND_QUIETLY) + MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") + ENDIF(NOT SIP_FIND_QUIETLY) + ELSE(SIP_FOUND) + IF(SIP_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find SIP") + ENDIF(SIP_FIND_REQUIRED) + ENDIF(SIP_FOUND) + +ENDIF(SIP_VERSION) diff --git a/isis/cmake/FindSip.py b/isis/cmake/FindSip.py new file mode 100644 index 0000000000..8cbb00fa5c --- /dev/null +++ b/isis/cmake/FindSip.py @@ -0,0 +1,13 @@ +# Borrowed mostly from the QGIS project: https://github.com/qgis/QGIS + + +import sipconfig + +sipcfg = sipconfig.Configuration() +print("sip_version:%06.0x" % sipcfg.sip_version) +print("sip_version_num:%d" % sipcfg.sip_version) +print("sip_version_str:%s" % sipcfg.sip_version_str) +print("sip_bin:%s" % sipcfg.sip_bin) +print("default_sip_dir:%s" % sipcfg.default_sip_dir) +print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) +print("sip_mod_dir:%s" % sipcfg.sip_mod_dir) diff --git a/isis/cmake/FindSuperLU.cmake b/isis/cmake/FindSuperLU.cmake index 7462e6dc9a..2c588bd138 100644 --- a/isis/cmake/FindSuperLU.cmake +++ b/isis/cmake/FindSuperLU.cmake @@ -17,5 +17,5 @@ find_library(SUPERLU_LIBRARY get_filename_component(SUPERLU_ROOT_INCLUDE_DIR "${SUPERLU_INCLUDE_DIR}" DIRECTORY) -message( "-- SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") -message( "-- SUPERLU LIB: ${SUPERLU_LIBRARY}") +message(STATUS "SUPERLU INCLUDE DIR: ${SUPERLU_INCLUDE_DIR}") +message(STATUS "SUPERLU LIB: ${SUPERLU_LIBRARY}") diff --git a/isis/cmake/FindTIFF.cmake b/isis/cmake/FindTIFF.cmake index 6b7149b687..f483f58778 100644 --- a/isis/cmake/FindTIFF.cmake +++ b/isis/cmake/FindTIFF.cmake @@ -5,5 +5,5 @@ find_path(TIFF_INCLUDE_DIR find_library(TIFF_LIBRARY NAMES tiff) -message( "-- TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") -message( "-- TIFF LIB: ${TIFF_LIBRARY}") +message(STATUS "TIFF INCLUDE DIR: ${TIFF_INCLUDE_DIR}") +message(STATUS "TIFF LIB: ${TIFF_LIBRARY}") diff --git a/isis/cmake/FindTNT.cmake b/isis/cmake/FindTNT.cmake index aea3a60d36..0bbfb154c0 100644 --- a/isis/cmake/FindTNT.cmake +++ b/isis/cmake/FindTNT.cmake @@ -11,4 +11,4 @@ find_path(TNT_INCLUDE_DIR get_filename_component(TNT_ROOT_INCLUDE_DIR "${TNT_INCLUDE_DIR}" DIRECTORY) -message("-- TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) +message(STATUS "TNT INCLUDE DIR: ${TNT_INCLUDE_DIR}" ) diff --git a/isis/cmake/FindX11.cmake b/isis/cmake/FindX11.cmake index a1714cb526..fe25ac1315 100644 --- a/isis/cmake/FindX11.cmake +++ b/isis/cmake/FindX11.cmake @@ -8,4 +8,4 @@ find_library(X11_LIBRARY NAMES X11 ) -message( "-- X11 LIB: " ${X11_LIBRARY} ) +message(STATUS "X11 LIB: " ${X11_LIBRARY} ) diff --git a/isis/cmake/FindXercesC.cmake b/isis/cmake/FindXercesC.cmake index 6e72e533aa..335dca4fda 100644 --- a/isis/cmake/FindXercesC.cmake +++ b/isis/cmake/FindXercesC.cmake @@ -6,5 +6,5 @@ find_path(XERCESC_INCLUDE_DIR find_library(XercesC_LIBRARY NAMES xerces-c) -message( "-- XERCES LIB: " ${XercesC_LIBRARY} ) -message( "-- XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) +message(STATUS "XERCES LIB: " ${XercesC_LIBRARY} ) +message(STATUS "XERCES INCLUDE DIR: " ${XERCESC_INCLUDE_DIR} ) diff --git a/isis/cmake/Findnanoflann.cmake b/isis/cmake/Findnanoflann.cmake index 3562e074d8..3c05e57013 100644 --- a/isis/cmake/Findnanoflann.cmake +++ b/isis/cmake/Findnanoflann.cmake @@ -12,4 +12,4 @@ find_path(NANOFLANN_INCLUDE_DIR get_filename_component(NANOFLANN_ROOT_INCLUDE_DIR "${NANOFLANN_INCLUDE_DIR}" DIRECTORY) -message( "-- NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") +message(STATUS "NANOFLANN INCLUDE DIR: ${NANOFLANN_INCLUDE_DIR}") diff --git a/isis/sipfiles/BundleAdjust.sip b/isis/sipfiles/BundleAdjust.sip new file mode 100644 index 0000000000..098d7cab9c --- /dev/null +++ b/isis/sipfiles/BundleAdjust.sip @@ -0,0 +1,31 @@ +// SIP Wrapper to the ISIS3 bundle class +%Include type_conversions.sip + + +namespace Isis { + class BundleAdjust : public QObject { + %TypeHeaderCode + #include "BundleAdjust.h" + #include "IException.h" + %End + + public: + BundleAdjust(PyObject* settings, const QString &cnetFile, const QString &cubeList, bool printSummary = true) throw(Isis::IException) [(QSharedPointer, QString, QString, bool)]; + %MethodCode + int sipErr = 0; + QSharedPointer *wrappedSettings = new QSharedPointer(); + + Isis::BundleSettings *settings = (Isis::BundleSettings*) sipConvertToType(a0, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); + wrappedSettings->reset(settings); + try { + sipCpp = new sipIsis_BundleAdjust(*wrappedSettings, *a1, *a2, a3); + } + catch (Isis::IException &error) { + PyErr_SetString(sipException_Isis_IException, error.what()); + return NULL; + } + %End + + Isis::BundleSolutionInfo solveCholeskyBR() throw(Isis::IException) ; + }; +}; diff --git a/isis/sipfiles/BundleControlPoint.sip b/isis/sipfiles/BundleControlPoint.sip new file mode 100644 index 0000000000..934b00bc94 --- /dev/null +++ b/isis/sipfiles/BundleControlPoint.sip @@ -0,0 +1,68 @@ +namespace Isis { + class BundleControlPoint { + + %TypeHeaderCode + #include "BundleControlPoint.h" + #include + %End + + public: + + SIP_PYTYPE measures() throw(Isis::IException); + %MethodCode + size_t size = sipCpp->size(); + + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + Isis::BundleMeasure* cppMeasure = sipCpp->at(i).data(); + + PyObject *pyMeasure = sipConvertFromType((void*)(cppMeasure), sipType_Isis_BundleMeasure, NULL); + PyList_SetItem(l, i, pyMeasure); + } + + return l; + + %End + + // BundleControlPoint(ControlPoint *point); // default constructor + BundleControlPoint(const Isis::BundleControlPoint &src) throw(Isis::IException); + ~BundleControlPoint(); + + // copy + void copy(const Isis::BundleControlPoint &src) throw(Isis::IException); + + // mutators + // QSharedPointer addMeasure(ControlMeasure *controlMeasure); + void computeResiduals() throw(Isis::IException); + void setNumberOfRejectedMeasures(int numRejected) throw(Isis::IException); + void setRejected(bool reject) throw(Isis::IException); + void setWeights(const QSharedPointer settings, double metersToRadians) throw(Isis::IException); + void zeroNumberOfRejectedMeasures() throw(Isis::IException); + + // accessors + bool isRejected() const throw(Isis::IException); + int numberOfMeasures() const throw(Isis::IException); + int numberOfRejectedMeasures() const throw(Isis::IException); + double residualRms() const throw(Isis::IException); + QString id() const throw(Isis::IException); + Isis::ControlPoint::PointType type() const throw(Isis::IException); + + // string format methods + QString formatBundleOutputSummaryString(bool errorPropagation) const throw(Isis::IException); + QString formatBundleOutputDetailString(bool errorPropagation, double RTM, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; + QString formatValue(double value, int fieldWidth, int precision) throw(Isis::IException); + QString formatAprioriSigmaString(int type, int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; + QString formatLatitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException); + QString formatLongitudeAprioriSigmaString(int fieldWidth, int precision) const throw(Isis::IException); + QString formatRadiusAprioriSigmaString(int fieldWidth, int precision, bool solveRadius=false) throw(Isis::IException) /KeywordArgs="Optional"/; + QString formatAdjustedSigmaString(int type, int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + QString formatLatitudeAdjustedSigmaString(int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + QString formatLongitudeAdjustedSigmaString(int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + QString formatRadiusAdjustedSigmaString(int fieldWidth, int precision, + bool errorPropagation) const throw(Isis::IException); + + }; +}; diff --git a/isis/sipfiles/BundleImage.sip b/isis/sipfiles/BundleImage.sip new file mode 100644 index 0000000000..bf8d975d4c --- /dev/null +++ b/isis/sipfiles/BundleImage.sip @@ -0,0 +1,16 @@ +namespace Isis { + class BundleImage /NoDefaultCtors/ { + %TypeHeaderCode + #include "BundleImage.h" + %End + %InstanceCode + sipCpp = new Isis::BundleImage(NULL, "", ""); + %End + public: + + + // QSharedPointer parentObservation(); + QString serialNumber() throw(Isis::IException); + QString fileName() throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/BundleMeasure.sip b/isis/sipfiles/BundleMeasure.sip new file mode 100644 index 0000000000..fd2a02942c --- /dev/null +++ b/isis/sipfiles/BundleMeasure.sip @@ -0,0 +1,30 @@ +%Include type_conversions.sip + +namespace Isis { + class BundleMeasure /NoDefaultCtors/ { + %TypeHeaderCode + #include "BundleMeasure.h" + %End + + public: + + bool isRejected() const throw(Isis::IException); + // Camera *camera() const; + // Isis::BundleControlPoint *parentControlPoint(); + QSharedPointer parentBundleImage() throw(Isis::IException); + // QSharedPointer parentBundleObservation(); + // const QSharedPointer observationSolveSettings(); + + double sample() const throw(Isis::IException); + double sampleResidual() const throw(Isis::IException); + double line() const throw(Isis::IException); + double lineResidual() const throw(Isis::IException); + double residualMagnitude() const throw(Isis::IException); + QString cubeSerialNumber() const throw(Isis::IException); + double focalPlaneComputedX() const throw(Isis::IException); + double focalPlaneComputedY() const throw(Isis::IException); + double focalPlaneMeasuredX() const throw(Isis::IException); + double focalPlaneMeasuredY() const throw(Isis::IException); + int observationIndex() const throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/BundleObservationSolveSettings.sip b/isis/sipfiles/BundleObservationSolveSettings.sip new file mode 100644 index 0000000000..89b28277c0 --- /dev/null +++ b/isis/sipfiles/BundleObservationSolveSettings.sip @@ -0,0 +1,59 @@ + +%Import QtCore/QtCoremod.sip +%Import QtXml/QtXmlmod.sip + +namespace Isis{ + class BundleObservationSolveSettings { + %TypeHeaderCode + #include "BundleObservationSolveSettings.h" + %End + public: + + enum InstrumentPointingSolveOption { + NoPointingFactors = 0, /**< Solve for none of the pointing factors.*/ + AnglesOnly = 1, /**< Solve for pointing angles: right ascension, declination + and, optionally, twist.*/ + AnglesVelocity = 2, //!< Solve for pointing angles and their angular velocities. + AnglesVelocityAcceleration = 3, /**< Solve for pointing angles, their velocities and their + accelerations.*/ + AllPointingCoefficients = 4 /**< Solve for all coefficients in the polynomials fit to + the pointing angles.*/ + }; + + //! Options for how to solve for instrument position + enum InstrumentPositionSolveOption { + NoPositionFactors = 0, /**< Solve for none of the position factors.*/ + PositionOnly = 1, /**< Solve for instrument positions only.*/ + PositionVelocity = 2, /**< Solve for instrument positions and velocities.*/ + PositionVelocityAcceleration = 3, /**< Solve for instrument positions, velocities, and + accelerations.*/ + AllPositionCoefficients = 4 /**< Solve for all coefficients in the polynomials fit to + the instrument positions.*/ + }; + + BundleObservationSolveSettings() throw(Isis::IException); + InstrumentPositionSolveOption stringToInstrumentPositionSolveOption(QString option) throw(Isis::IException); + InstrumentPointingSolveOption stringToInstrumentPointingSolveOption(QString option) throw(Isis::IException); + + void setInstrumentPositionSettings(InstrumentPositionSolveOption option, + int spkDegree = 2, + int spkSolveDegree = 2, + bool positionOverHermite = false, + double positionAprioriSigma = -1.0, + double velocityAprioriSigma = -1.0, + double accelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/; + + + void setInstrumentPointingSettings(InstrumentPointingSolveOption option, + bool solveTwist, + int ckDegree = 2, + int ckSolveDegree = 2, + bool solvePolynomialOverExisting = false, + double anglesAprioriSigma = -1.0, + double angularVelocityAprioriSigma = -1.0, + double angularAccelerationAprioriSigma = -1.0) throw(Isis::IException) /KeywordArgs="Optional"/; + + + + }; +}; diff --git a/isis/sipfiles/BundleResults.sip b/isis/sipfiles/BundleResults.sip new file mode 100644 index 0000000000..777ae54aed --- /dev/null +++ b/isis/sipfiles/BundleResults.sip @@ -0,0 +1,125 @@ +%Include Statistics.sip +%Include type_conversions.sip + + +namespace Isis { + class BundleResults : public QObject { + %TypeHeaderCode + #include "BundleResults.h" + %End + + public: + BundleResults(const Isis::BundleResults &src); + void initialize(); + + void resizeSigmaStatisticsVectors(int numberImages); + // void setRmsImageResidualLists(QList rmsImageLineResiduals, + // QList rmsImageSampleResiduals, + // QList rmsImageResiduals); + // void setRmsImageResidualLists(QVector rmsImageLineResiduals, + // QVector rmsImageSampleResiduals, + // QVector rmsImageResiduals); + // void setSigmaLatitudeRange(Distance minLatDist, Distance maxLatDist, + // QString minLatPointId, QString maxLatPointId); + // void setSigmaLongitudeRange(Distance minLonDist, Distance maxLonDist, + // QString minLonPointId, QString maxLonPointId); + // void setSigmaRadiusRange(Distance minRadDist, Distance maxRadDist, + // QString minRadPointId, QString maxRadPointId); + void setRmsFromSigmaStatistics(double rmsFromSigmaLatStats, + double rmsFromSigmaLonStats, + double rmsFromSigmaRadStats); + + void printMaximumLikelihoodTierInformation() throw(Isis::IException); + void incrementMaximumLikelihoodModelIndex() throw(Isis::IException); + + void incrementFixedPoints() throw(Isis::IException); + int numberFixedPoints() const throw(Isis::IException); + void incrementHeldImages() throw(Isis::IException); + int numberHeldImages() const throw(Isis::IException); + void incrementIgnoredPoints() throw(Isis::IException); + int numberIgnoredPoints() const throw(Isis::IException); // currently unused ??? + void setRejectionLimit(double rejectionLimit) throw(Isis::IException); + void setRmsXYResiduals(double rx, double ry, double rxy) throw(Isis::IException); + + void setNumberRejectedObservations(int numberObservations) throw(Isis::IException); + void setNumberObservations(int numberObservations) throw(Isis::IException); + void setNumberImageParameters(int numberParameters) throw(Isis::IException); // ??? this is the same value an m_nRank + void resetNumberConstrainedPointParameters() throw(Isis::IException); + void incrementNumberConstrainedPointParameters(int incrementAmount) throw(Isis::IException); + void resetNumberConstrainedImageParameters() throw(Isis::IException); + void incrementNumberConstrainedImageParameters(int incrementAmount) throw(Isis::IException); + void resetNumberConstrainedTargetParameters() throw(Isis::IException); + void incrementNumberConstrainedTargetParameters(int incrementAmount) throw(Isis::IException); + void setNumberUnknownParameters(int numberParameters) throw(Isis::IException); + void computeDegreesOfFreedom() throw(Isis::IException); + + void computeSigma0(double dvtpv, Isis::BundleSettings::ConvergenceCriteria criteria) throw(Isis::IException); + void setDegreesOfFreedom(double degreesOfFreedom) throw(Isis::IException); + void setSigma0(double sigma0) throw(Isis::IException); + void setElapsedTime(double time) throw(Isis::IException); + void setElapsedTimeErrorProp(double time) throw(Isis::IException); + void setRadiansToMeters(double rtm) throw(Isis::IException); + void setConverged(bool converged) throw(Isis::IException); // or initialze method + // void setBundleControlPoints(QVector controlPoints); + // void setOutputControlNet(QSharedPointer outNet); + void setIterations(int iterations) throw(Isis::IException); + // void setObservations(BundleObservationVector observations) throw(Isis::IException); + + QList rmsImageSampleResiduals() const throw(Isis::IException); + QList rmsImageLineResiduals() const throw(Isis::IException); + QList rmsImageResiduals() const throw(Isis::IException); + QVector rmsImageXSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageYSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageZSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageRASigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageDECSigmas() const throw(Isis::IException); // currently unused ??? + QVector rmsImageTWISTSigmas() const throw(Isis::IException); // currently unused ??? + + // Distance minSigmaLatitudeDistance() const throw(Isis::IException); + // Distance maxSigmaLatitudeDistance() const throw(Isis::IException); + // Distance minSigmaLongitudeDistance() const throw(Isis::IException); + // Distance maxSigmaLongitudeDistance() const throw(Isis::IException); + // Distance minSigmaRadiusDistance() const throw(Isis::IException); + // Distance maxSigmaRadiusDistance() const throw(Isis::IException); + + QString maxSigmaLatitudePointId() const throw(Isis::IException); + QString minSigmaLatitudePointId() const throw(Isis::IException); + QString minSigmaLongitudePointId() const throw(Isis::IException); + QString maxSigmaLongitudePointId() const throw(Isis::IException); + QString minSigmaRadiusPointId() const throw(Isis::IException); + QString maxSigmaRadiusPointId() const throw(Isis::IException); + double sigmaLatitudeStatisticsRms() const throw(Isis::IException); + double sigmaLongitudeStatisticsRms() const throw(Isis::IException); + double sigmaRadiusStatisticsRms() const throw(Isis::IException); + double rmsRx() const throw(Isis::IException); // currently unused ??? + double rmsRy() const throw(Isis::IException); // currently unused ??? + double rmsRxy() const throw(Isis::IException); // currently unused ??? + double rejectionLimit() const throw(Isis::IException); + double radiansToMeters() const throw(Isis::IException); + int numberRejectedObservations() const throw(Isis::IException); + int numberObservations() const throw(Isis::IException); + + int numberImageParameters() const throw(Isis::IException); // ??? this is the same value an m_nRank + int numberConstrainedPointParameters() const throw(Isis::IException); + int numberConstrainedImageParameters() const throw(Isis::IException); + int numberConstrainedTargetParameters() const throw(Isis::IException); + int numberUnknownParameters() const throw(Isis::IException); + int degreesOfFreedom() const throw(Isis::IException); + double sigma0() const throw(Isis::IException); + double elapsedTime() const throw(Isis::IException); + double elapsedTimeErrorProp() const throw(Isis::IException); + bool converged() const throw(Isis::IException); // or initialze method + + QVector > &bundleControlPoints(); + QSharedPointer outputControlNet() const throw(Isis::IException); + + int iterations() const throw(Isis::IException); + + int numberMaximumLikelihoodModels() const throw(Isis::IException); + int maximumLikelihoodModelIndex() const throw(Isis::IException); + double maximumLikelihoodMedianR2Residuals() const throw(Isis::IException); + double maximumLikelihoodModelQuantile(int modelIndex) const throw(Isis::IException); + + }; + +}; diff --git a/isis/sipfiles/BundleSettings.sip b/isis/sipfiles/BundleSettings.sip new file mode 100644 index 0000000000..b6f9799ab4 --- /dev/null +++ b/isis/sipfiles/BundleSettings.sip @@ -0,0 +1,113 @@ +%Include BundleObservationSolveSettings.sip +%Include MaximumLikelihoodWFunctions.sip + +%Include type_conversions.sip + +namespace Isis { + + class BundleSettings { + %TypeHeaderCode + #include "BundleSettings.h" + #include "BundleObservationSolveSettings.h" + #include + %End + public: + + enum ConvergenceCriteria { + Sigma0, /**< The value of sigma0 will be used to determine that the bundle + adjustment has converged.*/ + ParameterCorrections /**< All parameter corrections will be used to determine that the + bundle adjustment has converged.*/ + }; + + // enum MaximumLikelihoodModel { + // NoMaximumLikelihoodEstimator, + // Huber, + // ModifiedHuber, + // Welsch, + // Chen + // }; + + BundleSettings() throw(Isis::IException); + + void setValidateNetwork(bool) throw(Isis::IException); + + void setSolveOptions(bool solveObservationMode = false, + bool updateCubeLabel = false, + bool errorPropagation = false, + bool solveRadius = false, + double globalLatitudeAprioriSigma = Isis::Null, + double globalLongitudeAprioriSigma = Isis::Null, + double globalRadiusAprioriSigma = Isis::Null) throw(Isis::IException) /KeywordArgs="Optional"/; + + void setOutlierRejection(bool outlierRejection, + double multiplier = 1.0) throw(Isis::IException); + + bool solveObservationMode() const throw(Isis::IException); + bool solveRadius() const throw(Isis::IException); + bool updateCubeLabel() const throw(Isis::IException); + bool errorPropagation() const throw(Isis::IException); + bool outlierRejection() const throw(Isis::IException); + double outlierRejectionMultiplier() const throw(Isis::IException); + double globalLatitudeAprioriSigma() const throw(Isis::IException); + double globalLongitudeAprioriSigma() const throw(Isis::IException); + double globalRadiusAprioriSigma() const throw(Isis::IException); + + int numberSolveSettings() const throw(Isis::IException); + Isis::BundleObservationSolveSettings observationSolveSettings(QString instrumentId) const throw(Isis::IException); + Isis::BundleObservationSolveSettings observationSolveSettings(int n) const throw(Isis::IException); + + void setObservationSolveOptions(QList); + // %MethodCode + // Py_ssize_t size = PyList_Size(a0); + // QList *cppSettingsList = new QList(); + // int sipErr = 0; + // for(int i = 0; i < size; i++) { + // PyObject *pyStat = PyList_GET_ITEM(a0, i); + // Isis::BundleObservationSolveSettings *settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pyStat, sipType_Isis_BundleObservationSolveSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); + // cppSettingsList->append(*settings); + // } + // + // sipCpp->setObservationSolveOptions(*cppSettingsList); + // %End + + SIP_PYLIST maximumLikelihoodEstimatorModels() const throw(Isis::IException); + %MethodCode // convert QList to Python list if tuples + typedef Isis::MaximumLikelihoodWFunctions::Model Model; + size_t size = sipCpp->maximumLikelihoodEstimatorModels().size(); + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + // get the two items from the QPair + Model *model = new Model(sipCpp->maximumLikelihoodEstimatorModels()[i].first); + double doubl = sipCpp->maximumLikelihoodEstimatorModels()[i].second; + + // Convert the two items to PyObjects + PyObject *first = sipConvertFromType((void*)(model), sipType_Isis_MaximumLikelihoodWFunctions_Model, NULL); + PyObject *second = PyFloat_FromDouble(doubl); + + // set the tuple items + PyObject *tuple = PyTuple_New(2); + PyTuple_SetItem(tuple, 0, first); + PyTuple_SetItem(tuple, 1, second); + + // Add new tuple to list + PyList_SetItem(l, i, tuple); + } + return l; + %End + + + int numberTargetBodyParameters() const throw(Isis::IException); + bool solveTargetBody() const throw(Isis::IException); + bool solvePoleRA() const throw(Isis::IException); + bool solvePoleRAVelocity() const throw(Isis::IException); + bool solvePoleDec() const throw(Isis::IException); + bool solvePoleDecVelocity() const throw(Isis::IException); + bool solvePM() const throw(Isis::IException); + bool solvePMVelocity() const throw(Isis::IException); + bool solvePMAcceleration() const throw(Isis::IException); + bool solveTriaxialRadii() const throw(Isis::IException); + bool solveMeanRadius() const throw(Isis::IException); + + }; +}; diff --git a/isis/sipfiles/BundleSolutionInfo.sip b/isis/sipfiles/BundleSolutionInfo.sip new file mode 100644 index 0000000000..7f1c27ba14 --- /dev/null +++ b/isis/sipfiles/BundleSolutionInfo.sip @@ -0,0 +1,28 @@ + +%Include type_conversions.sip + +namespace Isis{ + +class BundleSolutionInfo : public QObject { + %TypeHeaderCode + #include "BundleSolutionInfo.h" + %End + + public: + BundleSolutionInfo(const Isis::BundleSolutionInfo &src) throw(Isis::IException); + + void setOutputStatistics(Isis::BundleResults statisticsResults) throw(Isis::IException); + void setRunTime(QString runTime) throw(Isis::IException); + + QString id() const throw(Isis::IException); + QString controlNetworkFileName() const throw(Isis::IException); + QSharedPointer bundleSettings() throw(Isis::IException); + Isis::BundleResults bundleResults() throw(Isis::IException); + QString runTime() const throw(Isis::IException); + + bool outputText() throw(Isis::IException); + bool outputPointsCSV() throw(Isis::IException); + bool outputResiduals() throw(Isis::IException); + + }; // end namespace Isis +}; diff --git a/isis/sipfiles/ControlNet.sip b/isis/sipfiles/ControlNet.sip new file mode 100644 index 0000000000..73408334cf --- /dev/null +++ b/isis/sipfiles/ControlNet.sip @@ -0,0 +1,31 @@ +namespace Isis { + class ControlNet : public QObject { + %TypeHeaderCode + #include "ControlNet.h" + %End + public: + ControlNet() throw(Isis::IException); + ControlNet(const Isis::ControlNet &other) throw(Isis::IException); + + void clear() throw(Isis::IException); + + void Write(const QString &filename, bool pvl = false) throw(Isis::IException); + + double GetMaximumResidual() throw(Isis::IException); + QString GetNetworkId() const throw(Isis::IException); + int GetNumEditLockMeasures() throw(Isis::IException); + int GetNumEditLockPoints() throw(Isis::IException); + int GetNumIgnoredMeasures() throw(Isis::IException); + int GetNumberOfValidMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + void ClearJigsawRejected() throw(Isis::IException); + void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber) throw(Isis::IException); + int GetNumMeasures() const throw(Isis::IException); + int GetNumPoints() const throw(Isis::IException); + int GetNumValidMeasures() throw(Isis::IException); + int GetNumValidPoints() throw(Isis::IException); + QString GetTarget() const throw(Isis::IException); + QString GetUserName() const throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/ControlPoint.sip b/isis/sipfiles/ControlPoint.sip new file mode 100644 index 0000000000..8dd80250aa --- /dev/null +++ b/isis/sipfiles/ControlPoint.sip @@ -0,0 +1,302 @@ +namespace Isis { + + class ControlPoint : public QObject { + %TypeHeaderCode + #include "ControlPoint.h" + %End + public: + enum PointType { + Fixed = 0, + Constrained = 1, + Free = 2 + }; + + + enum Status { + Failure, + Success, + PointLocked + }; + + enum ConstraintStatus { + LatitudeConstrained = 0, + LongitudeConstrained = 1, + RadiusConstrained = 2, +// XConstrained = 3, +// YConstrained = 4, +// ZConstrained = 5; + }; + + // This stuff input to jigsaw + // How did apriori source get computed?? + struct SurfacePointSource { + enum Source { + None, + User, + AverageOfMeasures, + Reference, + Basemap, + BundleSolution + }; + }; + + struct RadiusSource { + enum Source { + None, + User, + AverageOfMeasures, + Ellipsoid, + DEM, + BundleSolution + }; + }; + + ControlPoint() throw(Isis::IException); + ControlPoint(const QString &id) throw(Isis::IException); + + // Isis::ControlNet *Parent() { return parentNetwork; } + + // void Load(PvlObject &p) throw(Isis::IException); + + // void Add(ControlMeasure *measure) throw(Isis::IException); + // int Delete(ControlMeasure *measure) throw(Isis::IException); + // int Delete(QString serialNumber) throw(Isis::IException); + // int Delete(int index) throw(Isis::IException); + // Status ResetApriori() throw(Isis::IException); + + // const Isis::ControlMeasure *GetMeasure(QString serialNumber) const throw(Isis::IException); + // ControlMeasure *GetMeasure(QString serialNumber) throw(Isis::IException); + + // const ControlMeasure *GetMeasure(int index) const throw(Isis::IException); + // ControlMeasure *GetMeasure(int index) throw(Isis::IException); + + // const ControlMeasure *GetRefMeasure() const throw(Isis::IException); + // ControlMeasure *GetRefMeasure() throw(Isis::IException); + + // Status SetChooserName(QString name) throw(Isis::IException); + // Status SetDateTime(QString newDateTime) throw(Isis::IException); + // Status SetEditLock(bool editLock) throw(Isis::IException); + // Status SetId(QString id) throw(Isis::IException); + // Status SetRefMeasure(ControlMeasure *cm) throw(Isis::IException); + // Status SetRefMeasure(int index) throw(Isis::IException); + // Status SetRefMeasure(QString sn) throw(Isis::IException); + // Status SetRejected(bool rejected) throw(Isis::IException); + // Status SetIgnored(bool newIgnoreStatus) throw(Isis::IException); + // Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint) throw(Isis::IException); + // Status SetType(PointType newType) throw(Isis::IException); + // + // Status SetAprioriRadiusSource(RadiusSource::Source source) throw(Isis::IException); + // Status SetAprioriRadiusSourceFile(QString sourceFile) throw(Isis::IException); + // Status SetAprioriSurfacePoint(SurfacePoint aprioriSP) throw(Isis::IException); + // Status SetAprioriSurfacePointSource(SurfacePointSource::Source source) throw(Isis::IException); + // Status SetAprioriSurfacePointSourceFile(QString sourceFile) throw(Isis::IException); + + // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon, + // const Distance &radius) throw(Isis::IException); + + // Status ComputeApriori() throw(Isis::IException); + // Status ComputeResiduals() throw(Isis::IException); + // Status ComputeResiduals_Millimeters() throw(Isis::IException); + // + // SurfacePoint GetAdjustedSurfacePoint() const throw(Isis::IException); + // SurfacePoint GetBestSurfacePoint() const throw(Isis::IException); + + QString GetChooserName() const throw(Isis::IException); + QString GetDateTime() const throw(Isis::IException); + bool IsEditLocked() const throw(Isis::IException); + bool IsRejected() const throw(Isis::IException); + QString GetId() const throw(Isis::IException); + bool IsIgnored() const throw(Isis::IException); + bool IsValid() const throw(Isis::IException); + bool IsInvalid() const throw(Isis::IException); + bool IsFixed() const throw(Isis::IException); + + bool HasAprioriCoordinates() throw(Isis::IException); + bool IsConstrained() throw(Isis::IException); + bool IsLatitudeConstrained() throw(Isis::IException); + bool IsLongitudeConstrained() throw(Isis::IException); + bool IsRadiusConstrained() throw(Isis::IException); + int NumberOfConstrainedCoordinates() throw(Isis::IException); + + static QString PointTypeToString(PointType type) throw(Isis::IException); + static PointType StringToPointType(QString pointTypeString) throw(Isis::IException); + + QString GetPointTypeString() const throw(Isis::IException); + // PointType GetType() const throw(Isis::IException); + + static QString RadiusSourceToString(RadiusSource::Source source) throw(Isis::IException); + static RadiusSource::Source StringToRadiusSource(QString str) throw(Isis::IException); + QString GetRadiusSourceString() const throw(Isis::IException); + static QString SurfacePointSourceToString(SurfacePointSource::Source source) throw(Isis::IException); + // static SurfacePointSource::Source StringToSurfacePointSource(QString str) throw(Isis::IException); + QString GetSurfacePointSourceString() const throw(Isis::IException); + + // SurfacePoint GetAprioriSurfacePoint() const throw(Isis::IException); + // RadiusSource::Source GetAprioriRadiusSource() const throw(Isis::IException); + // QString GetAprioriRadiusSourceFile() const throw(Isis::IException); + // SurfacePointSource::Source GetAprioriSurfacePointSource() const throw(Isis::IException); + // QString GetAprioriSurfacePointSourceFile() const throw(Isis::IException); + + int GetNumMeasures() const throw(Isis::IException); + int GetNumValidMeasures() const throw(Isis::IException); + int GetNumLockedMeasures() const throw(Isis::IException); + bool HasSerialNumber(QString serialNumber) const throw(Isis::IException); + // int IndexOf(ControlMeasure *, bool throws = true) const throw(Isis::IException); + int IndexOf(QString sn, bool throws = true) const throw(Isis::IException); + int IndexOfRefMeasure() const throw(Isis::IException); + bool IsReferenceExplicit() const throw(Isis::IException); + QString GetReferenceSN() const throw(Isis::IException); + + // Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const throw(Isis::IException); + // Statistics GetStatistic(long dataType) const throw(Isis::IException); + + // QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const throw(Isis::IException); + // QList< QString > getCubeSerialNumbers() const throw(Isis::IException); + + // const ControlMeasure *operator[](QString serialNumber) const throw(Isis::IException); + // ControlMeasure *operator[](QString serialNumber) throw(Isis::IException); + + // const ControlMeasure *operator[](int index) const throw(Isis::IException); + // ControlMeasure *operator[](int index) throw(Isis::IException); + + // bool operator!=(const ControlPoint &pPoint) const throw(Isis::IException); + // bool operator==(const ControlPoint &pPoint) const throw(Isis::IException); + // const ControlPoint &operator=(const ControlPoint &pPoint) throw(Isis::IException); + + // The next 7 methods are specifically to support BundleAdjust + void ZeroNumberOfRejectedMeasures() throw(Isis::IException); + void SetNumberOfRejectedMeasures(int numRejected) throw(Isis::IException); + int GetNumberOfRejectedMeasures() const throw(Isis::IException); + double GetSampleResidualRms() const throw(Isis::IException); + double GetLineResidualRms() const throw(Isis::IException); + double GetResidualRms() const throw(Isis::IException); + void ClearJigsawRejected() throw(Isis::IException); + + // ControlPointFileEntryV0002 ToFileEntry() const throw(Isis::IException); + + private: + // void SetExplicitReference(ControlMeasure *measure) throw(Isis::IException); + void ValidateMeasure(QString serialNumber) const throw(Isis::IException); + // void AddMeasure(ControlMeasure *measure) throw(Isis::IException); + void PointModified() throw(Isis::IException); + + + // private: + // ControlNet *parentNetwork; + // + // //!< List of Control Measures + // QHash< QString, ControlMeasure * > * measures; + // + // QStringList *cubeSerials; + // + // ControlMeasure *referenceMeasure; + // + // /** + // * This is the control point ID. This is supposed to be a unique + // * identifier for control points. This often has a number in it, and + // * looks like "T0052" where the next one is "T0053" and so on. + // */ + // QString id; + // + // /** + // * This is the user name of the person who last modified this control + // * point. Modifications are things like updating the surface point, but + // * not things like updating the last modified time. The calculations + // * relating to this control point have to actually change for this to + // * be updated. This is an empty string if we need to dynamically + // * get the username of the caller when asked for (or written to file). + // */ + // QString chooserName; + // + // /** + // * This is the last modified date and time. This is updated automatically + // * and works virtually in the same way as chooserName. + // */ + // QString dateTime; + // + // /** + // * What this control point is tying together. + // * @see PointType + // */ + // PointType type; + // + // /** + // * If we forced a build that we would normally have thrown an exception + // * for then this is set to true. Otherwise, and most of the time, this + // * is false. + // */ + // bool invalid; + // + // /** + // * This stores the edit lock state. + // * @see SetEditLock + // */ + // bool editLock; + // + // /** + // * This stores the jigsaw rejected state. + // * @see SetJigsawReject + // */ + // bool jigsawRejected; + // + // /** + // * This stores the constraint status of the a priori SurfacePoint + // * @todo Eventually add x, y, and z + // */ + // std::bitset<6> constraintStatus; + // + // /** + // * This indicates if a program has explicitely set the reference in this + // * point or the implicit reference is still the current reference. This + // * is useful for programs that want to choose the reference for all + // * points where this hasn't happened yet. + // */ + // bool referenceExplicitlySet; + // + // /** + // * True if we should preserve but ignore the entire control point and its + // * measures. + // */ + // bool ignore; + // + // //! Where the apriori surface point originated from + // SurfacePointSource::Source aprioriSurfacePointSource; + // + // //! FileName where the apriori surface point originated from + // QString aprioriSurfacePointSourceFile; + // + // /** + // * Where the apriori surface point's radius originated from, most commonly + // * used by jigsaw. + // */ + // RadiusSource::Source aprioriRadiusSource; + // + // /** + // * The name of the file that derives the apriori surface point's radius + // */ + // QString aprioriRadiusSourceFile; + // + // /** + // * The apriori surface point. This is the "known truth" or trustworthy + // * point that should not be modified unless done very explicitely. This + // * comes from places like hand picking where you really don't want the + // * surface point to vary far from this point, but some variation is + // * okay (1/10th of a pixel is fair for human accuracy for example). Very + // * often this point does not exist. + // */ + // SurfacePoint aprioriSurfacePoint; + // + // /** + // * This is the calculated, or aposterori, surface point. This is what most + // * programs should be working with and updating. + // */ + // SurfacePoint adjustedSurfacePoint; + // + // /** + // * This parameter is used and maintained by BundleAdjust for the jigsaw + // * application. It is stored here because ControlPoint contains the index + // * of the measures. + // */ + // int numberOfRejectedMeasures; + }; +}; diff --git a/isis/sipfiles/MaximumLikelihoodWFunctions.sip b/isis/sipfiles/MaximumLikelihoodWFunctions.sip new file mode 100644 index 0000000000..cbc668d80d --- /dev/null +++ b/isis/sipfiles/MaximumLikelihoodWFunctions.sip @@ -0,0 +1,52 @@ +namespace Isis { + + class MaximumLikelihoodWFunctions { + %TypeHeaderCode + #include "MaximumLikelihoodWFunctions.h" + %End + + public: + + enum Model { + Huber, + HuberModified, + Welsch, + Chen + }; + + static QString modelToString(Model model) throw(Isis::IException); + static Isis::MaximumLikelihoodWFunctions::Model stringToModel(QString modelName) throw(Isis::IException); + + MaximumLikelihoodWFunctions() throw(Isis::IException); + MaximumLikelihoodWFunctions(Model modelSelection) throw(Isis::IException); + MaximumLikelihoodWFunctions(Model modelSelection, double tweakingConstant) throw(Isis::IException); + MaximumLikelihoodWFunctions(const Isis::MaximumLikelihoodWFunctions &other) throw(Isis::IException); + + void setModel(Model modelSelection) throw(Isis::IException); // uses default tweaking constant + void setTweakingConstantDefault() throw(Isis::IException); + + void setModel(Model modelSelection, double tweakingConstant) throw(Isis::IException); + void setTweakingConstant(double tweakingConstant) throw(Isis::IException); + + Model model() const throw(Isis::IException); + double tweakingConstant() const throw(Isis::IException); + + // the W functions provide an additional weighting factor W which is used + // to 're-weight' each observation dynamically during an adjustment, the + // scalar functions provide access to various flavors of this scalar (as + // a function of the residual divided by the residuals sigma) + + double sqrtWeightScaler(double residualZScore) throw(Isis::IException); //it is often convient to use square roots of + //weights when building normals, this function + // provides the scaler for the square root of + // the weight directly + double tweakingConstantQuantile() throw(Isis::IException); // returns which quantile of the residuals is recommended to + // use as the tweaking constant, this varies as a function of + // the model being employed + + QString weightedResidualCutoff() throw(Isis::IException); + + QDataStream &write(QDataStream &stream) const throw(Isis::IException); + QDataStream &read(QDataStream &stream) throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/Statistics.sip b/isis/sipfiles/Statistics.sip new file mode 100644 index 0000000000..089b76a636 --- /dev/null +++ b/isis/sipfiles/Statistics.sip @@ -0,0 +1,41 @@ + +namespace Isis { + class Statistics : public QObject { + %TypeHeaderCode + #include "Statistics.h" + %End + public: + Statistics(const Isis::Statistics &other) throw(Isis::IException); + + void Reset() throw(Isis::IException); + + void AddData(const double *data, const unsigned int count) throw(Isis::IException); + void AddData(const double data) throw(Isis::IException); + + void RemoveData(const double *data, const unsigned int count) throw(Isis::IException); + void RemoveData(const double data) throw(Isis::IException); + + double ValidMinimum() const throw(Isis::IException); + double ValidMaximum() const throw(Isis::IException); + bool InRange(const double value) throw(Isis::IException); + bool AboveRange(const double value) throw(Isis::IException); + bool BelowRange(const double value) throw(Isis::IException); + + double Average() const throw(Isis::IException); + double StandardDeviation() const throw(Isis::IException); + double Variance() const throw(Isis::IException); + double Sum() const throw(Isis::IException); + double SumSquare() const throw(Isis::IException); + double Rms() const throw(Isis::IException); + + double Minimum() const throw(Isis::IException); + double Maximum() const throw(Isis::IException); + double ChebyshevMinimum(const double percent = 99.5) const throw(Isis::IException); + double ChebyshevMaximum(const double percent = 99.5) const throw(Isis::IException); + double BestMinimum(const double percent = 99.5) const throw(Isis::IException); + double BestMaximum(const double percent = 99.5) const throw(Isis::IException); + double ZScore(const double value) const throw(Isis::IException); + + bool RemovedData() const throw(Isis::IException); + }; +}; diff --git a/isis/sipfiles/master.sip b/isis/sipfiles/master.sip new file mode 100644 index 0000000000..2cdb950c9c --- /dev/null +++ b/isis/sipfiles/master.sip @@ -0,0 +1,75 @@ +%Module(name=libisispy, + version=0, + keyword_arguments="Optional") + +%ExportedHeaderCode + #include + #include + #include + #include + #include + + using namespace std; + + // Wraps glob to return a STD vector to avoid dealing with C style globbing + inline vector glob(const QString& pat){ + glob_t glob_result; + glob(pat.toLatin1().data(),GLOB_TILDE,NULL,&glob_result); + vector ret; + for(unsigned int i=0;i libs = glob(pat); + QLibrary lib_loader; + + for (vector::const_iterator i = libs.begin(); i != libs.end(); ++i) { + // Strip extension + QFileInfo file(*i); + QString lib_dir = file.path() + "/" + file.completeBaseName(); + + lib_loader.setFileName(lib_dir); + + // Load hint required for symbols to be accessible to other libraries loaded later + lib_loader.setLoadHints(QLibrary::ExportExternalSymbolsHint); + + bool load_ok = lib_loader.load(); + + // if verbose is true, print out load info + if (verbose) { + if (load_ok) { + cout << "Loaded " + lib_dir.toStdString() + " : OK" << endl; + } + else if (!load_ok) { + cout << "Loaded " + lib_dir.toStdString() + " : FAILED" << endl + << lib_loader.errorString().toStdString() << endl; + } + } + } + } +%End + +%Include type_conversions.sip + +%Include ControlPoint.sip +%Include BundleMeasure.sip +%Include BundleControlPoint.sip +%Include BundleImage.sip +%Include ControlNet.sip +%Include Statistics.sip +%Include BundleResults.sip +%Include BundleSolutionInfo.sip +%Include BundleObservationSolveSettings.sip +%Include BundleSettings.sip +%Include BundleAdjust.sip +%Include MaximumLikelihoodWFunctions.sip diff --git a/isis/sipfiles/type_conversions.sip b/isis/sipfiles/type_conversions.sip new file mode 100644 index 0000000000..7a337c444f --- /dev/null +++ b/isis/sipfiles/type_conversions.sip @@ -0,0 +1,292 @@ + +%Import QtCore/QtCoremod.sip +%Import QtXml/QtXmlmod.sip + + + +%Exception Isis::IException(SIP_Exception) /PyName=IException/ +{ +%TypeHeaderCode +#include "IException.h" +%End +%RaiseCode + const char *detail = sipExceptionRef.what(); + + SIP_BLOCK_THREADS + PyErr_SetString(sipException_Isis_IException, detail); + SIP_UNBLOCK_THREADS +%End +}; + + +%MappedType QVector > +{ + %TypeHeaderCode + #include "BundleControlPoint.h" + #include + %End + + %ConvertFromTypeCode + size_t size = sipCpp->size(); + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + + Isis::BundleControlPoint* cppCPoint = sipCpp->at(i).data(); + + PyObject *pyCPoint = sipConvertFromType((void*)(cppCPoint), sipType_Isis_BundleControlPoint, NULL); + PyList_SetItem(l, i, pyCPoint); + } + + return l; + %End + + %ConvertToTypeCode + Py_ssize_t size = PyList_Size(sipPy); + QVector > *cppPointList = new QVector > (); + int sipErr = 0; + for(int i = 0; i < size; i++) { + PyObject *pyCPoint = PyList_GET_ITEM(sipPy, i); + Isis::BundleControlPoint *cppCPoint = (Isis::BundleControlPoint*)sipConvertToType(pyCPoint, sipType_Isis_BundleControlPoint, NULL, SIP_NOT_NONE, NULL, &sipErr); + cppPointList->append(QSharedPointer(cppCPoint)); + } + + *sipCppPtr = cppPointList; + return sipGetState(sipTransferObj); + %End + +}; + +%MappedType QList +{ + %TypeHeaderCode + #include "Statistics.h" + #include + %End + + %ConvertFromTypeCode + size_t size = sipCpp->size(); + PyObject *l = PyList_New(size); + for (size_t i = 0; i < size; ++i) { + Isis::Statistics* cppStats = new Isis::Statistics(sipCpp->at(i)); + PyObject *pyStats = sipConvertFromType((void*)(cppStats), sipType_Isis_Statistics, NULL); + PyList_SetItem(l, i, pyStats); + } + + return l; + %End + + %ConvertToTypeCode + Py_ssize_t size = PyList_Size(sipPy); + QList *cppStatList = new QList(); + int sipErr = 0; + for(int i = 0; i < size; i++) { + PyObject *pyStat = PyList_GET_ITEM(sipPy, i); + Isis::Statistics *stats = (Isis::Statistics*)sipConvertToType(pyStat, sipType_Isis_Statistics, NULL, SIP_NOT_NONE, NULL, &sipErr); + cppStatList->append(*stats); + } + + *sipCppPtr = cppStatList; + return sipGetState(sipTransferObj); + %End +}; + + + +%MappedType QList +{ + %TypeHeaderCode + #include "BundleObservationSolveSettings.h" + #include + %End + + %ConvertFromTypeCode + PyObject *l; + + // Create the Python list of the correct length. + if ((l = PyList_New(sipCpp->size())) == NULL) + return NULL; + + for (int i = 0; i < sipCpp->size(); ++i) { + Isis::BundleObservationSolveSettings *settings = new Isis::BundleObservationSolveSettings(sipCpp->at(i)); + + PyObject *pySettings = sipConvertFromType((void*)(settings), sipType_Isis_BundleObservationSolveSettings, NULL); + PyList_SetItem(l, i, pySettings); + } + + return l; + %End + + + %ConvertToTypeCode + if (!sipIsErr) { + if (!PyList_Check(sipPy)) + return 0; + + for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) + if (!sipCanConvertToType(PyList_GET_ITEM(sipPy, i), + sipType_Isis_BundleObservationSolveSettings, SIP_NOT_NONE)) + return 0; + + return 1; + } + + Py_ssize_t size = PyList_Size(sipPy); + + QList *cppSettingsList = new QList(); + int state; + + for(Py_ssize_t i = 0; i < size; i++) { + PyObject *pySettings = PyList_GET_ITEM(sipPy, i); + Isis::BundleObservationSolveSettings *settings; + + settings = (Isis::BundleObservationSolveSettings*)sipConvertToType(pySettings, sipType_Isis_BundleObservationSolveSettings, 0, SIP_NOT_NONE, &state, sipIsErr); + + if (*sipIsErr) { + sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state); + delete cppSettingsList; + return 0; + } + + cppSettingsList->append(*settings); + sipReleaseType(pySettings, sipType_Isis_BundleObservationSolveSettings, state); + } + + *sipCppPtr = cppSettingsList; + return sipGetState(sipTransferObj); + %End +}; + +// convert Bundlesettings wrapped in a QSharedPointer in Isis +%MappedType QSharedPointer +{ + %TypeHeaderCode + #include "BundleImage.h" + #include + %End + + %ConvertFromTypeCode + Isis::BundleImage *cpp = sipCpp->data(); + PyObject *py = sipConvertFromType(cpp, sipType_Isis_BundleImage, NULL); + return py; + %End + + %ConvertToTypeCode + int sipErr = 0; + QSharedPointer* cpp_qsp = new QSharedPointer(); + Isis::BundleImage *cpp = (Isis::BundleImage*)sipConvertToType(sipPy, sipType_Isis_BundleImage, NULL, SIP_NOT_NONE, NULL, &sipErr); + cpp_qsp->reset(cpp); + *sipCppPtr = cpp_qsp; + + return sipGetState(sipTransferObj); + %End +}; + + +// convert Bundlesettings wrapped in a QSharedPointer in Isis +%MappedType QSharedPointer +{ + %TypeHeaderCode + #include "BundleSettings.h" + #include + using namespace std; + %End + + %ConvertFromTypeCode + Isis::BundleSettings *settings = sipCpp->data(); + PyObject *pySettings = sipConvertFromType(settings, sipType_Isis_BundleSettings, NULL); + return pySettings; + %End + + %ConvertToTypeCode + int sipErr = 0; + QSharedPointer* wrappedSettings = new QSharedPointer(); + + Isis::BundleSettings *settings = (BundleSettings*) sipConvertToType(sipPy, sipType_Isis_BundleSettings, NULL, SIP_NOT_NONE, NULL, &sipErr); + wrappedSettings->reset(settings); + *sipCppPtr = wrappedSettings; + + return sipGetState(sipTransferObj); + %End +}; + + +// convert Bundlesettings wrapped in a QSharedPointer in Isis +%MappedType QSharedPointer +{ + %TypeHeaderCode + #include "ControlNet.h" + #include + using namespace std; + %End + + %ConvertFromTypeCode + PyObject *pySettings = sipConvertFromType(sipCpp, sipType_Isis_ControlNet, NULL); + return pySettings; + %End + + %ConvertToTypeCode + int sipErr = 0; + QSharedPointer *qspControlNet = NULL; + if (!sipCanConvertToType(sipPy, sipType_Isis_ControlNet, SIP_NOT_NONE)) { + sipErr = 1; + } + else { + Isis::ControlNet *cppControlNet = (Isis::ControlNet*)sipConvertToType(sipPy, sipType_Isis_ControlNet, NULL, SIP_NOT_NONE, NULL, &sipErr); + qspControlNet->reset(cppControlNet); + } + + *sipCppPtr = qspControlNet; + return sipGetState(sipTransferObj); + %End +}; + + + +// Convert a python str object to a std::string. +%MappedType std::string +{ + %TypeHeaderCode + #include + %End + + %ConvertFromTypeCode + // convert an std::string to a Python (unicode) string + PyObject* newstring; + newstring = PyUnicode_DecodeUTF8(sipCpp->c_str(), sipCpp->length(), NULL); + if(newstring == NULL) { + PyErr_Clear(); + newstring = PyBytes_FromString(sipCpp->c_str()); + } + return newstring; + %End + + %ConvertToTypeCode + // Allow a Python string (or a unicode string) whenever a string is + // expected. + // If argument is a Unicode string, just decode it to UTF-8 + // If argument is a Python string, assume it's UTF-8 + if (sipIsErr == NULL) + return (PyBytes_Check(sipPy) || PyUnicode_Check(sipPy)); + + if (sipPy == Py_None) + { + *sipCppPtr = new std::string; + return 1; + } + + if (PyUnicode_Check(sipPy)) + { + PyObject* s = PyUnicode_AsEncodedString(sipPy, "UTF-8", ""); + *sipCppPtr = new std::string(PyBytes_AS_STRING(s)); + Py_DECREF(s); + return 1; + } + + if (PyBytes_Check(sipPy)) + { + *sipCppPtr = new std::string(PyBytes_AS_STRING(sipPy)); + return 1; + } + return 0; + %End +}; diff --git a/isis/src/control/apps/seedgrid/tsts/errors/errors.txt b/isis/src/control/apps/seedgrid/tsts/errors/errors.txt new file mode 100644 index 0000000000..b375d4ea99 --- /dev/null +++ b/isis/src/control/apps/seedgrid/tsts/errors/errors.txt @@ -0,0 +1 @@ +[2018-03-21 14:12:04] Failed ... No truth folder or files diff --git a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h index fd570fee7c..fc69ebc8db 100644 --- a/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h +++ b/isis/src/control/objs/BundleUtilities/BundleObservationSolveSettings.h @@ -156,6 +156,7 @@ class BundleObservationSolveSettings { double positionAprioriSigma = -1.0, double velocityAprioriSigma = -1.0, double accelerationAprioriSigma = -1.0); + InstrumentPositionSolveOption instrumentPositionSolveOption() const; int spkDegree() const; int spkSolveDegree() const; diff --git a/linux-spec.txt b/linux-spec.txt index 529ab58395..9803f9d82f 100644 --- a/linux-spec.txt +++ b/linux-spec.txt @@ -2,13 +2,14 @@ # $ conda create --name --file # platform: linux-64 @EXPLICIT -https://conda.anaconda.org/usgs-astrogeology/linux-64/bullet-2.86.1-0.tar.bz2 +https://conda.anaconda.org/krodriguez/linux-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/ca-certificates-2017.08.26-h1d4fec5_0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/ds9-7.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/flann-1.8.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.0.0-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geos-3.5.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.19.8.1-0.tar.bz2 @@ -22,40 +23,39 @@ https://conda.anaconda.org/conda-forge/linux-64/jpeg-9b-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.14.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgcc-4.8.5-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-h7cc24e2_2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libgcc-ng-7.2.0-hdf63c60_3.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/libgfortran-3.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.15-0.tar.bz2 -https://conda.anaconda.org/probcomp/linux-64/libprotobuf-2.6.1-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-h7a57d05_2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libstdcxx-ng-7.2.0-hdf63c60_3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libuv-1.11.0-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.6-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nanoflann-1.2.2-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/ncurses-5.9-10.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/ninja-1.7.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-5.9-10.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/patchelf-0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pcre-8.39-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/proj4-4.9.3-5.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.3-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/rhash-1.3.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.13.0-1.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/system-5.8-2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/system-5.8-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tbb-4.4_20160526-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/tk-8.5.19-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/tnt-126-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/x264-20131217-3.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/xerces-c-3.1.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-6.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/xz-5.2.3-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/zlib-1.2.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.1.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.11-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cspice-66-0.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/dbus-1.10.20-0.tar.bz2 @@ -63,57 +63,61 @@ https://conda.anaconda.org/conda-forge/linux-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-3.2.4-3.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/glib-2.51.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.8.18-2.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/isl-0.12.2-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/isl-0.12.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/jasper-1.900.1-1.tar.bz2 https://conda.anaconda.org/anaconda/linux-64/jsoncpp-1.8.3-h3a67955_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20170329-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.28-2.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/libprotobuf-3.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.0.9-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.12-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.9.7-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/llvmdev-5.0.0-default_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mpfr-3.1.5-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/openblas-0.2.19-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/patchelf-0.9-hf79760b_2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/qhull-7.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/readline-6.2-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/blas-1.1-openblas.tar.bz2 -https://repo.continuum.io/pkgs/main/linux-64/cloog-0.18.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/cloog-0.18.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.7-1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.4.2-1.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/gstreamer-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.8.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.8.0-2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libwebp-0.5.2-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mesalib-17.2.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/mpc-1.0.3-4.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/mysql-5.7.20-h55eaa98_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python-2.7.14-2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/bz2file-0.98-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/mysql-5.7.20-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/python-3.6.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.6.4-6.tar.bz2 +https://conda.anaconda.org/anaconda/linux-64/bz2file-0.98-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.1.18-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/curl-7.55.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/future-0.16.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/future-0.16.0-py36_0.tar.bz2 https://repo.continuum.io/pkgs/free/linux-64/gcc-4.8.5-7.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://repo.continuum.io/pkgs/free/linux-64/protobuf-2.6.1-py27_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.8.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.13.3-py36_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/sip-4.18-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py36_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/superlu-5.2.1-blas_openblas_201.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py27_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/boost-1.65.1-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.14.6-4.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cmake-3.9.1-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qt-5.7.1-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py27_mesalib_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/qt-5.6.2-6.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/setuptools-38.5.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/vtk-8.1.0-py36_mesalib_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xerces-c-3.1.4-0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-1.3.4-2.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/linux-64/pcl-1.8.1-0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/linux-64/qwt-6.1.3-0.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/wheel-0.30.0-py27h2bc6bb2_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py27_blas_openblas_203.tar.bz2 -https://conda.anaconda.org/anaconda/linux-64/pip-9.0.1-py27_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/protobuf-3.5.1-py36_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.6.0-py36_4.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/wheel-0.30.0-py36_2.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/linux-64/xalan-c-1.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/opencv-3.2.0-np113py36_blas_openblas_203.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pip-9.0.1-py36_1.tar.bz2 diff --git a/macos-spec.txt b/macos-spec.txt index 2af2397a2f..2fd059d08b 100644 --- a/macos-spec.txt +++ b/macos-spec.txt @@ -2,26 +2,61 @@ # $ conda create --name --file # platform: osx-64 @EXPLICIT +https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/bullet-2.86.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.6-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2018.1.18-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.10-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/certifi-2018.1.18-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/clangdev-6.0.0-default_0.tar.bz2 +https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/ds9-7.5-h35e3669_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/eigen-3.3.3-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/embree-2.14.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/expat-2.2.5-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.6-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/freetype-2.8.1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/future-0.16.0-py36_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/geos-3.5.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/gettext-0.19.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/giflib-5.1.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/glib-2.55.0-0.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/gmm-5.0-h6aef312_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/graphite2-1.3.11-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/gsl-2.4-blas_openblas_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.7.6-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.10.1-2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/icu-58.2-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/jama-125-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/jpeg-9b-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/jsoncpp-1.8.1-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/krb5-1.14.2-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libcxx-6.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libffi-3.2.1-3.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/libgcc-4.8.5-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libgfortran-3.0.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.15-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.34-0.tar.bz2 +https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/libuv-1.11.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/llvm-meta-6.0.0-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/llvmdev-6.0.0-default_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/m4-1.4.17-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-3.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/naif-n0066-0.tar.bz2 @@ -29,70 +64,44 @@ https://conda.anaconda.org/conda-forge/osx-64/nanoflann-1.2.2-0.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/ncurses-5.9-10.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/ninja-1.7.2-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/nn-1.86.0-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/numpy-1.14.2-py36_blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.20-7.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/opencv-3.4.1-py36_blas_openblas_200.tar.bz2 https://conda.anaconda.org/inria-pro-sed/osx-64/openmpi-1.8.6-4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 +https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/patchelf-0.9-h879b6ae_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pcre-8.39-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pip-9.0.1-py36_1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.34.0-1.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/proj4-4.9.3-5.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/protobuf-3.5.1-py36_3.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/pyqt-5.6.0-py36_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/python-3.6.4-0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/rhash-1.3.4-0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/setuptools-39.0.1-py36_0.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sip-4.18-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py36_1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.6-blas_openblas_200.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_202.tar.bz2 https://conda.anaconda.org/usgs-astrogeology/osx-64/tbb-4.4-hf7780a4_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.7-0.tar.bz2 https://conda.anaconda.org/krodriguez/osx-64/tnt-126-0.tar.bz2 +https://repo.continuum.io/pkgs/main/osx-64/vtk-8.1.0-py36h87a2a2b_201.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py36_2.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/x264-20131217-3.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 +https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-kbproto-1.0.7-1.tar.bz2 +https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.8-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.2-3.tar.bz2 https://conda.anaconda.org/conda-forge/osx-64/xorg-xproto-7.0.31-6.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/xz-5.2.3-0.tar.bz2 https://conda.anaconda.org/anaconda/osx-64/zlib-1.2.11-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-cpp-1.65.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cspice-66-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/dbus-1.10.22-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/doxygen-1.8.14-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/ffmpeg-3.2.4-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/glib-2.51.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/hdf5-1.8.18-3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/jasper-1.900.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/lapack-3.6.1-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.28-2.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/libprotobuf-3.2.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.0.9-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.12-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.9.7-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openblas-0.2.19-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/openssl-1.0.2n-0.tar.bz2 -https://conda.anaconda.org/inria-pro-sed/osx-64/parmetis-4.0.3p2-1.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/qhull-7.2.0-h396fa31_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/readline-7.0-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/blas-1.1-openblas.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/flann-1.8.4-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/freetype-2.7-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/geotiff-1.4.2-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.8.0-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/libwebp-0.5.2-7.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qt-5.6.2-h9e3eb04_4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.20.1-2.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/xorg-libx11-1.6.4-6.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/curl-7.55.1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/fontconfig-2.12.1-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/gsl-2.2.1-blas_openblas_3.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/python-2.7.14-4.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/qwt-6.1.3-1.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/suitesparse-4.5.4-blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/superlu-5.2.1-blas_openblas_201.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/cairo-1.14.6-4.tar.bz2 -https://repo.continuum.io/pkgs/main/osx-64/certifi-2018.1.18-py27_0.tar.bz2 -https://repo.continuum.io/pkgs/free/osx-64/cmake-3.6.3-0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/numpy-1.13.3-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/six-1.11.0-py27_1.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/vtk-7.1.1-py27h56fd973_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xerces-c-3.1.4-h10f7eb2_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/boost-1.65.1-py27_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/harfbuzz-1.3.4-2.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/protobuf-3.2.0-py27_0.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/setuptools-38.5.1-py27_0.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/xalan-c-1.11-h1922a5c_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/opencv-3.3.0-py27_blas_openblas_200.tar.bz2 -https://conda.anaconda.org/usgs-astrogeology/osx-64/pcl-1.8.1-h7a71350_0.tar.bz2 -https://conda.anaconda.org/conda-forge/osx-64/wheel-0.30.0-py27_2.tar.bz2 -https://conda.anaconda.org/anaconda/osx-64/pip-9.0.1-py27_1.tar.bz2 -- GitLab From 51ccc893f41504e8fe541b47e4dbc368133a4dd9 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 6 Apr 2018 16:53:48 -0700 Subject: [PATCH 163/620] Added line back in that caused install errors --- environment.yml | 35 ++++++++++++++--------------------- isis/CMakeLists.txt | 24 +++++++++++++++++++++++- isis/cmake/FindCholmod.cmake | 1 - 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/environment.yml b/environment.yml index 0df225c443..5202ee3c74 100644 --- a/environment.yml +++ b/environment.yml @@ -9,15 +9,12 @@ channels: - defaults dependencies: - ca-certificates==2017.08.26 - - dbus==1.10.20=0 + - dbus - future==0.16.0 - - gst-plugins-base - - gstreamer==1.8.0=0 - jsoncpp==1.8.3 - - libgfortran==3.0=0 - - libstdcxx-ng==7.2.0 + - libgfortran==3.0 - qwt=6.1.3 - - pyqt=5.6.0 + - pyqt - sip=4.18 - libxcb==1.12=1 - mysql==5.7.20 @@ -46,18 +43,16 @@ dependencies: - ffmpeg==3.2.4=3 - flann==1.8.4=0 - fontconfig==2.12.1=4 - - freeglut==3.0.0=4 - - freetype==2.7=1 - geos==3.5.1=1 - - geotiff==1.4.2 + - geotiff==1.4.2=1 - gettext==0.19.8.1=0 - giflib==5.1.4=0 - glib==2.51.4=0 - gmp==6.1.2=0 - gsl==2.2.1=blas_openblas_3 - - harfbuzz==1.3.4=2 + - harfbuzz - hdf5==1.8.18=2 - - icu==58.2 + - icu==58.2=0 - jasper==1.900.1=1 - jbig==2.1=0 - jpeg==9b=2 @@ -83,7 +78,7 @@ dependencies: - nn==1.86.0=2 - numpy==1.13.3=py36_blas_openblas_200 - openblas==0.2.19=2 - - opencv==3.2.0=np113py36_blas_openblas_203 + - opencv - openssl==1.0.2n=0 - pcre==8.39=0 - pixman==0.34.0=1 @@ -98,7 +93,6 @@ dependencies: - superlu==5.2.1=blas_openblas_201 - tbb==4.4_20160526=1 - tk==8.5.19=2 - - vtk==8.1.0 - x264==20131217=3 - xorg-kbproto==1.0.7=1 - xorg-libx11==1.6.4=6 @@ -109,18 +103,17 @@ dependencies: - xorg-xproto==7.0.31=6 - bz2file==0.98 - cloog==0.18.0=0 - - isl==0.12.2=0 + - isl==0.12.2 - protobuf==3.5.1 - - system==5.8=2 - libprotobuf==3.2.0=0 - bullet==2.86.1=0 - - ds9==7.5=0 - - gmm==5.0=0 + - ds9==7.5 + - gmm==5.0 - jama==125=0 - - pcl==1.8.1=0 + - pcl==1.8.1 - qhull==7.2.0=0 - - qt==5.6.2 - - qwt==6.1.3 + - qt + - qwt==6.1.3=0 - tnt==126=0 - - xalan-c==1.11=0 + - xalan-c==1.11 prefix: /scratch/anaconda3/envs/isis diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 7fa0c88cff..a5b13eabbf 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -57,7 +57,7 @@ message("Detected Operating System: ${osVersionString}") # as a static library using some specialized code in Utilities.cmake. set(BUILD_SHARED_LIBS ON) -# make sure to leave rpaths untouched on install +# make sure to leave rpaths untouched on install set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Specify user options that can be passed in with the initial CMake command. @@ -128,6 +128,10 @@ message("\tINSTALL PREFIX: ${CMAKE_INSTALL_PREFIX}") #=============================================================================== #=============================================================================== +# Set up the ctest tool which is used to run all of the tests. +enable_testing() +include(CTest) + # Set up Anaconda prefix in the case with a non-default conda env is activated if(EXISTS $ENV{CONDA_PREFIX}) message("CONDA PREFIX: $ENV{CONDA_PREFIX}") @@ -158,6 +162,11 @@ set(thirdPartyCppFlags -Wall -DENABLEJP2K=${JP2KFLAG} ) + # Append CPP flags set in the third party lib file to the string set in this file. + string(REPLACE ";" " " FLAGS_STR "${thirdPartyCppFlags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS_STR}" ) + + # Flag to fix numeric literals problem with boost on linux if(NOT APPLE) set(thirdPartyCppFlags ${thirdPartyCppFlags} -fext-numeric-literals @@ -311,6 +320,12 @@ if(pybindings) string(STRIP ${PYQT_SIP_FLAGS} PYQT_SIP_FLAGS) string(REPLACE " " ";" PYQT_SIP_FLAGS ${PYQT_SIP_FLAGS}) message("Generating C++ code from sip files") + + message(STATUS "SIP BUILD FILE: ${SIP_BUILD_FILE}") + message(STATUS "SIP MODULE: ${ISIS_SIP_MODULE}") + message(STATUS "SIP GENERATED CODE DIR: ${ISIS_SIP_CODE_DIR}") + + execute_process(COMMAND ${SIP_BINARY_PATH} -e -o -c ${ISIS_SIP_CODE_DIR} -I ${SIP_DEFAULT_SIP_DIR}/PyQt5 ${PYQT_SIP_FLAGS} ${ISIS_SIP_MODULE}) # add target so users can run the command after initial configuration @@ -395,6 +410,13 @@ add_subdirectory(src objects) # Set up third party libraries for installation # install_third_party() +if(APPLE) + set(SO ".dylib") +else() + set(SO ".so") +endif() + + # Set up documentation build target. # - This script is called by running "make docs". # - This long call passes all desired variables to the script. diff --git a/isis/cmake/FindCholmod.cmake b/isis/cmake/FindCholmod.cmake index a46f6d9c36..d3f61be782 100644 --- a/isis/cmake/FindCholmod.cmake +++ b/isis/cmake/FindCholmod.cmake @@ -28,7 +28,6 @@ endif() # if(APPLE) find_library(FORTRAN_LIBRARY NAMES gfortran NAMES gfortran - PATHS /opt/usgs/v007/ports/lib/gcc5/ ) find_library(BLAS_LIBRARY NAMES blas) -- GitLab From b43a0063b1d106f29c71e56e0fd2416f0883f400 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 6 Apr 2018 17:06:32 -0700 Subject: [PATCH 164/620] removed calls to run finalizeInstalledOsxRpaths.py --- isis/cmake/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/isis/cmake/CMakeLists.txt b/isis/cmake/CMakeLists.txt index 8b1df97398..85bfcdc541 100644 --- a/isis/cmake/CMakeLists.txt +++ b/isis/cmake/CMakeLists.txt @@ -12,11 +12,6 @@ install(CODE "EXECUTE_PROCESS(COMMAND ln -sf libisis3${SO} ${CMAKE_INSTALL_PREFI # On OSX, need to correct all the paths encoded in each of the distributed library files so # that they properly find the distruted files using relative paths. if (APPLE) - # Call the correction script on each folder containing libraries - install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/lib)") - install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/3rdParty/lib resetRpath)") - install(CODE "EXECUTE_PROCESS(COMMAND python ${CMAKE_SOURCE_DIR}/scripts/finalizeInstalledOsxRpaths.py ${CMAKE_INSTALL_PREFIX}/bin)") - # Also need to get the plugin folders get_subdirectory_list(${CMAKE_SOURCE_DIR}/3rdParty/plugins pluginFolders) foreach(f ${pluginFolders}) -- GitLab From 1e4a9fbd51059a4ebe6eed05aded47ac40ec6af6 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Fri, 6 Apr 2018 20:17:16 -0700 Subject: [PATCH 165/620] added python 3.6 to env file --- environment.yml | 10 +++++----- isis/CMakeLists.txt | 4 ---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/environment.yml b/environment.yml index 5202ee3c74..4ed92ed693 100644 --- a/environment.yml +++ b/environment.yml @@ -8,14 +8,14 @@ channels: - jlaura - defaults dependencies: - - ca-certificates==2017.08.26 + - python==3.6 - dbus - future==0.16.0 - jsoncpp==1.8.3 - libgfortran==3.0 - qwt=6.1.3 - - pyqt - - sip=4.18 + - pyqt==5.6.0 + - sip==4.18 - libxcb==1.12=1 - mysql==5.7.20 - ncurses==5.9=10 @@ -112,8 +112,8 @@ dependencies: - jama==125=0 - pcl==1.8.1 - qhull==7.2.0=0 - - qt - - qwt==6.1.3=0 + - qt=5.6.2 + - qwt - tnt==126=0 - xalan-c==1.11 prefix: /scratch/anaconda3/envs/isis diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index a5b13eabbf..c71ccf417d 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -407,16 +407,12 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/make DESTINATION ${CMAKE_INSTALL_PREFIX}) # Have CMake process all of the source code and tests. add_subdirectory(src objects) -# Set up third party libraries for installation -# install_third_party() - if(APPLE) set(SO ".dylib") else() set(SO ".so") endif() - # Set up documentation build target. # - This script is called by running "make docs". # - This long call passes all desired variables to the script. -- GitLab From ae1d5aa02058c0c9a959cb2a98db2218472e1af9 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Sat, 7 Apr 2018 02:25:38 -0700 Subject: [PATCH 166/620] removed some dependencies of dependencies --- environment.yml | 57 ++++--------------------------------------------- 1 file changed, 4 insertions(+), 53 deletions(-) diff --git a/environment.yml b/environment.yml index 4ed92ed693..6a2f756e00 100644 --- a/environment.yml +++ b/environment.yml @@ -8,108 +8,59 @@ channels: - jlaura - defaults dependencies: - - python==3.6 - - dbus - - future==0.16.0 - - jsoncpp==1.8.3 - libgfortran==3.0 - qwt=6.1.3 - pyqt==5.6.0 - sip==4.18 - - libxcb==1.12=1 - mysql==5.7.20 - - ncurses==5.9=10 - ninja==1.7.2=0 - patchelf==0.9 - pip==9.0.1 - setuptools=38.5.1 - wheel==0.30.0 - xerces-c==3.1.4=0 - - xz==5.2.3=0 - zlib==1.2.11=0 - blas==1.1=openblas - boost==1.65.1 - boost-cpp==1.65.1 - bzip2==1.0.6=1 - - cairo==1.14.6=4 - - certifi==2018.1.18 - cmake==3.9.1=0 - cspice==66-0 - curl==7.55.1=0 - doxygen==1.8.14=0 - eigen==3.3.3=0 - embree==2.14.0=0 - - expat==2.2.5=0 - - ffmpeg==3.2.4=3 - - flann==1.8.4=0 - - fontconfig==2.12.1=4 - geos==3.5.1=1 - geotiff==1.4.2=1 - - gettext==0.19.8.1=0 - - giflib==5.1.4=0 - - glib==2.51.4=0 - gmp==6.1.2=0 - gsl==2.2.1=blas_openblas_3 - - harfbuzz - hdf5==1.8.18=2 - icu==58.2=0 - - jasper==1.900.1=1 - - jbig==2.1=0 - jpeg==9b=2 - krb5==1.14.2=0 - - lapack==3.6.1=1 - - libffi==3.2.1=3 - - libiconv==1.15=0 - libpng==1.6.28=2 - - libssh2==1.8.0=2 - libtiff==4.0.9=0 - - libuv==1.11.0=0 - - libwebp==0.5.2=7 - libxml2==2.9.7=0 - - llvm-meta==5.0.0=0 - - llvmdev==5.0.0=default_1 - - m4==1.4.17=1 - mesalib==17.2.0=0 - - metis==5.1.0=3 - - mpc==1.0.3=4 - - mpfr==3.1.5=0 - mysql-connector-c==6.1.6=0 - - nanoflann==1.2.2=0 - nn==1.86.0=2 - numpy==1.13.3=py36_blas_openblas_200 - openblas==0.2.19=2 - - opencv + - opencv==3.3.0 + - nanoflann==1.22 + - gmm==5.0 + - jama==125 - openssl==1.0.2n=0 - - pcre==8.39=0 - - pixman==0.34.0=1 - - proj4==4.9.3=5 - - pthread-stubs==0.3=1 - python==3.6 - - readline==6.2=0 - - rhash==1.3.4=0 - - six==1.11.0 - sqlite==3.13.0=1 - suitesparse==4.5.4=blas_openblas_200 - superlu==5.2.1=blas_openblas_201 - - tbb==4.4_20160526=1 - - tk==8.5.19=2 - - x264==20131217=3 - xorg-kbproto==1.0.7=1 - xorg-libx11==1.6.4=6 - - xorg-libxau==1.0.8=3 - - xorg-libxdmcp==1.1.2=3 - - xorg-libxrender==0.9.10=0 - - xorg-renderproto==0.11.1=1 - - xorg-xproto==7.0.31=6 - bz2file==0.98 - - cloog==0.18.0=0 - - isl==0.12.2 - protobuf==3.5.1 - libprotobuf==3.2.0=0 - bullet==2.86.1=0 - - ds9==7.5 - - gmm==5.0 - - jama==125=0 - pcl==1.8.1 - qhull==7.2.0=0 - qt=5.6.2 -- GitLab From 4a7cd2500002a410dee7316b6c69726e134bbb26 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Fri, 13 Apr 2018 17:43:03 -0700 Subject: [PATCH 167/620] Merge artifacts removed --- isis/src/base/objs/FileName/FileName.h | 52 +------------------------- 1 file changed, 1 insertion(+), 51 deletions(-) diff --git a/isis/src/base/objs/FileName/FileName.h b/isis/src/base/objs/FileName/FileName.h index 463bfa2721..46a6e2acad 100644 --- a/isis/src/base/objs/FileName/FileName.h +++ b/isis/src/base/objs/FileName/FileName.h @@ -132,39 +132,7 @@ namespace Isis { QString baseName() const; QString name() const; QString extension() const; -<<<<<<< HEAD QString expanded() const; -======= - - - /** - * Returns a QString of the full file name including the file path, excluding the attributes. - * Any Isis Preferences or environment variables indicated by $, are changed to what they - * represent. - * - * @returns QString - *
-       *   for a full file specification of:
-       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
-       *   expanded() gives:
-       *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
-       * 
- */ - QString expanded() const; - - - /** - * Returns the full file name including the file path - * - * @returns QString containing every character in the file name and the path - *
-       *   for a full file specification of:
-       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
-       *   original() gives:
-       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
-       * 
- */ ->>>>>>> 3c81332195ef9bb7711daa21e640f9b050443e6f QString original() const; FileName addExtension(const QString &extension) const; @@ -183,24 +151,6 @@ namespace Isis { bool fileExists() const; QDir dir() const; static FileName createTempFile(FileName templateFileName = "$TEMPORARY/temp"); -<<<<<<< HEAD -======= - - - /** - * Returns a QString of the full file name including the file path, excluding the attributes - * with any Isis Preferences or environment variables indicated by $, changed to what they - * represent. - * - * @returns QString - *
-       *   for a full file specification of:
-       *    QString(ISISROOT) + "/tmp/Peaks.cub+Bsq"
-       *   toString() gives:
-       *    "/usgs/pkgs/isis3/isis/tmp/Peaks.cub"
-       * 
- */ ->>>>>>> 3c81332195ef9bb7711daa21e640f9b050443e6f QString toString() const; FileName &operator=(const FileName &rhs); bool operator==(const FileName &rhs); @@ -254,4 +204,4 @@ namespace Isis { }; }; -#endif +#endif \ No newline at end of file -- GitLab From 92872c8505063aae080c9147dc41a97a35f2a4d1 Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Thu, 19 Apr 2018 14:57:16 -0700 Subject: [PATCH 168/620] Changed color of free points to green. --- .../ControlPointGraphicsItem.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp index 1121259581..bb0fb5c9a1 100644 --- a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp +++ b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp @@ -62,7 +62,7 @@ namespace Isis { setPen(QPen(Qt::darkGreen, 0.0)); } else {// Free - setPen(QPen(Qt::blue, 0.0)); + setPen(QPen(Qt::green, 0.0)); } setBrush(Qt::NoBrush); @@ -96,7 +96,7 @@ namespace Isis { /** * This virtual paint method is called anytime an update() or paintEvent() is called - * + * * @param painter (QPainter *) Painter used to draw * @param style (QStyleOptionGraphicsItem *) Describes parameters used to draw a QGraphicsItem * @param widget (QWidget *) Optional argument which indicates the widget that is being painted on @@ -139,7 +139,7 @@ namespace Isis { painter->drawPath(path); } else { - painter->drawLine(centerLeft, centerRight); + painter->drawLine(centerLeft, centerRight); painter->drawLine(centerTop, centerBottom); } @@ -197,14 +197,14 @@ namespace Isis { } - ControlPoint *ControlPointGraphicsItem::controlPoint() { - return m_controlPoint; + ControlPoint *ControlPointGraphicsItem::controlPoint() { + return m_controlPoint; } - void ControlPointGraphicsItem::setArrowVisible(bool visible, - bool colorByMeasureCount, + void ControlPointGraphicsItem::setArrowVisible(bool visible, + bool colorByMeasureCount, int measureCount, - bool colorByResidualMagnitude, + bool colorByResidualMagnitude, double residualMagnitude) { m_showArrow = visible; m_colorByMeasureCount = colorByMeasureCount; @@ -374,4 +374,3 @@ namespace Isis { } - -- GitLab From bab819331ae255b13cdead896a3a19f0fb4608ad Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Fri, 20 Apr 2018 14:11:51 -0700 Subject: [PATCH 169/620] Changed color of ignored points to yellow, fixed to magenta, and constrained to red. --- .../MosaicSceneWidget/ControlPointGraphicsItem.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp index bb0fb5c9a1..289c43e789 100644 --- a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp +++ b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp @@ -49,20 +49,20 @@ namespace Isis { m_origPoint = new QPointF(apriori); // Providing a width of 0 makes pens cosmetic (i.e. always appear as 1 pixel on screen) - if (cp->IsIgnored()) { - setPen(QPen(Qt::red, 0.0)); + if (cp->IsIgnored()) { // Was red + setPen(QPen(QColor(255, 255, 0), 0.0)); // set point marker yellow } else if (cp->IsEditLocked()) { setPen(QPen(Qt::magenta, 0.0)); } else if (cp->GetType() == ControlPoint::Fixed) { - setPen(QPen(Qt::green, 0.0)); + setPen(QPen(Qt::magenta, 0.0)); // Was green } else if (cp->GetType() == ControlPoint::Constrained) { - setPen(QPen(Qt::darkGreen, 0.0)); + setPen(QPen(Qt::red, 0.0)); //was darkGreen } else {// Free - setPen(QPen(Qt::green, 0.0)); + setPen(QPen(Qt::green, 0.0)); //was blue } setBrush(Qt::NoBrush); -- GitLab From fefbd789aea2494e99ef318acf13667b272d3a12 Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Fri, 20 Apr 2018 15:46:03 -0700 Subject: [PATCH 170/620] Modified loadHistory() to print out the last command that was executed. --- .../base/objs/UserInterface/UserInterface.cpp | 149 ++++++++++-------- 1 file changed, 79 insertions(+), 70 deletions(-) diff --git a/isis/src/base/objs/UserInterface/UserInterface.cpp b/isis/src/base/objs/UserInterface/UserInterface.cpp index 1492a6f720..762e53020a 100644 --- a/isis/src/base/objs/UserInterface/UserInterface.cpp +++ b/isis/src/base/objs/UserInterface/UserInterface.cpp @@ -101,7 +101,7 @@ namespace Isis { return p_infoFileName; } - + /** * This method returns the flag state of info. This returns if * its in debugging mode(the -info tag was specified). @@ -118,7 +118,7 @@ namespace Isis { * the new parameters * * @param i The line number to retrieve parameter information from - * + * * @throws Isis::IException::User - Invalid command line */ void UserInterface::SetBatchList(int i) { @@ -139,7 +139,7 @@ namespace Isis { try { getNextParameter(currArgument, paramName, paramValue); - + if (paramName[0] == '-') continue; @@ -174,7 +174,7 @@ namespace Isis { catch (IException &e) { throw IException(IException::User, "Invalid command line", _FILEINFO_); } - + PutAsString(paramName, paramValue); cout << paramName; @@ -201,14 +201,14 @@ namespace Isis { VerifyAll(); } - + /** * This method adds the line specified in the BatchList that the error occured * on. The BatchList line is added exactly as it is seen, so the BatchList * command can be run on the errorlist file created. * * @param i The line of the batchlist to write to the error file - * + * * @throws Isis::IException::User - Unable to create error list - Disk may be full or * directory permissions not writeable */ @@ -234,7 +234,7 @@ namespace Isis { } } - + /** * Saves the user parameter information in the history of the program for later * use @@ -288,7 +288,7 @@ namespace Isis { } - + /** * Loads the user entered batchlist file into a private variable for later use * @@ -354,7 +354,7 @@ namespace Isis { } } - + /** * This is used to load the command line into p_cmdline and the Aml object * using information contained in argc and argv. @@ -384,7 +384,7 @@ namespace Isis { for (int i = 0; i < argc; i++) { p_cmdline.push_back(argv[i]); } - + // Check for special tokens (reserved parameters) (those beginning with a dash) vector options; options.push_back("-GUI"); @@ -405,41 +405,41 @@ namespace Isis { bool usedDashLast = false; bool usedDashRestore = false; //< for throwing -batchlist exceptions at end of function - + // pre-process command line for -HELP first preProcess("-HELP", options); // pre-process command line for -WEBHELP preProcess("-WEBHELP", options); // now, parse command line to evaluate -LAST preProcess("-LAST", options); - + for (unsigned int currArgument = 1; currArgument < (unsigned)argc; currArgument++) { QString paramName; vector paramValue; getNextParameter(currArgument, paramName, paramValue); - + // we now have a name,value pair if (paramName[0] == '-') { paramName = paramName.toUpper(); - + // where if(paramname == -last ) to continue } was originally - + if (paramValue.size() > 1) { QString msg = "Invalid value for reserve parameter [" + paramName + "]"; throw IException(IException::User, msg, _FILEINFO_); } - + // resolve the reserved parameter (e.g. set -h to -HELP) paramName = resolveParameter(paramName, options); - + // Prevent double handling of -LAST to prevent conflicts // Keep track of using -LAST to prevent conflicts with -BATCHLIST if (paramName == "-LAST") { usedDashLast = true; continue; - } + } // Keep track of using -RESTORE to prevent conflicts with -BATCHLIST @@ -453,7 +453,7 @@ namespace Isis { if ( paramValue.size() ) { realValue = paramValue[0]; } - + evaluateOption(paramName, realValue); continue; } @@ -468,7 +468,7 @@ namespace Isis { } // Can't use the batchlist with the gui, save, last or restore option - if ( BatchListSize() != 0 && (p_interactive || usedDashLast || p_saveFile != "" + if ( BatchListSize() != 0 && (p_interactive || usedDashLast || p_saveFile != "" || usedDashRestore) ) { QString msg = "-BATCHLIST cannot be used with -GUI, -SAVE, -RESTORE, "; msg += "or -LAST"; @@ -482,8 +482,8 @@ namespace Isis { throw IException(IException::User, msg, _FILEINFO_); } } - - + + /** * Loads the previous history for the program * @@ -504,6 +504,7 @@ namespace Isis { int g = lab.groups() - 1; if (g >= 0 && lab.group(g).isNamed("UserParameters") ) { Isis::PvlGroup &up = lab.group(g); + QString commandline(p_progName + " "); for (int k = 0; k < up.keywords(); k++) { QString keyword = up[k].name(); @@ -529,9 +530,15 @@ namespace Isis { } } - if (!matchesDefault) + if (!matchesDefault) { PutAsString(keyword, values); + commandline += keyword + "="; + foreach(QString val, values) { + commandline += val + " "; + } + } } + std::cout << commandline << std::endl; return; } @@ -544,6 +551,8 @@ namespace Isis { for (int k = 0; k < up.keywords(); k++) { QString keyword = up[k].name(); QString value = up[k][0]; + std::cout << "Keyword: " << keyword << std::endl; + std::cout << "Value: " << value << std::endl; PutAsString(keyword, value); } } @@ -567,14 +576,14 @@ namespace Isis { throw IException(IException::User, msg, _FILEINFO_); } } - - + + /** * This interprets the "-" options for reserved parameters * * @param name "-OPTIONNAME" (name of the reserved parameter) * @param value Value of the option, if supplied (-name=value) - * + * * @throws Isis::IException::Programmer - evaluating -WEBHELP throws an exception when * unit testing to avoid exiting from the unit test * @throws Isis::IException::Programmer - evaluating -HELP throws an exception when @@ -624,7 +633,7 @@ namespace Isis { command += FileName(p_progName).name() + "/" + FileName(p_progName).name() + ".html"; // cannot test else in unit test - don't want to open webhelp if (unitTest) { - throw IException(IException::Programmer, + throw IException(IException::Programmer, "Evaluating -WEBHELP should only throw this exception during a unitTest", _FILEINFO_); } @@ -632,7 +641,7 @@ namespace Isis { ProgramLauncher::RunSystemCommand(command); exit(0); } - + } else if (name == "-INFO") { p_info = true; @@ -785,7 +794,7 @@ namespace Isis { } // we must throw an exception for unitTest to handle to continue testing if (unitTest) { - throw IException(IException::Programmer, + throw IException(IException::Programmer, "Evaluating -HELP should only throw this exception during a unitTest", _FILEINFO_); } @@ -855,8 +864,8 @@ namespace Isis { throw IException(IException::Unknown, msg, _FILEINFO_); } } - - + + /** * This gets the next parameter in the list of arguments. curPos will be changed * to be the end of the current argument (still needs incremented to get the @@ -865,11 +874,11 @@ namespace Isis { * @param curPos End of previous argument * @param name Resulting parameter name * @param value Resulting array of parameter values (usually just 1 element) - * + * * @throws Isis::IException::User - parameters cannot start with "=" */ void UserInterface::getNextParameter(unsigned int &curPos, - QString &name, + QString &name, std::vector &value) { QString paramName = p_cmdline[curPos]; QString paramValue = ""; @@ -941,44 +950,44 @@ namespace Isis { value = readArray(paramValue); } } - - + + /** * This parses the command line and looks for the specified reserved parameter - * name passed. Resolves and evaluates the passed reserved parameter. + * name passed. Resolves and evaluates the passed reserved parameter. * This method ignores invalid parameters ( @see resolveParameter() ). - * + * * Example: preProcess("-HELP", options) will try to resolve any reserved parameters * and will evaluate if one resolves to -HELP. - * + * * @param fullReservedName the full name of reserved parameter being looked for * @param reservedParams the list of reserved parameters for resolving parameter name - * - */ - void UserInterface::preProcess(QString fullReservedName, + * + */ + void UserInterface::preProcess(QString fullReservedName, std::vector &reservedParams) { - for (unsigned int currArgument = 1; currArgument < (unsigned)p_cmdline.size(); + for (unsigned int currArgument = 1; currArgument < (unsigned)p_cmdline.size(); currArgument++) { - + QString paramName = p_cmdline[currArgument]; QString trueParamValue = ""; vector paramValue; - + // reserved parameters start with - if (paramName[0] == '-') { - + // grab the current argument getNextParameter(currArgument, paramName, paramValue); paramName = paramName.toUpper(); - + // grab the argument's value if ( paramValue.size() ) { trueParamValue = paramValue[0].toUpper(); } - + // resolve the reserved parameter token paramName = resolveParameter(paramName, reservedParams, false); - + // evaluate the resolved parameter if it matches fullReservedName if (fullReservedName == paramName) { evaluateOption(paramName, trueParamValue); @@ -986,8 +995,8 @@ namespace Isis { } } } - - + + /** * This interprets an array value from the command line. * @@ -995,7 +1004,7 @@ namespace Isis { * format (a,b,c) * * @return std::vector Values in the array QString - * + * * @throws Isis::IException::User - arrays not starting with '(' are invalid * @throws Isis::IException::User - arrays ending in a backslash are invalid * @throws Isis::IException::User - invalid array format @@ -1108,34 +1117,34 @@ namespace Isis { return values; } - - + + /** * This resolves a reserved parameter token on the command line to its fullname. - * Matches with the list of reserved parameters (options). + * Matches with the list of reserved parameters (options). * Resolution necessary for evaluateOption(). - * + * * Example: an -h token on the command line will resolve to -HELP * * @param unresolvedParam the parameter name that needs to be resolved * @param reservedParams the list of reserved parameters for resolving parameter name - * @param handleNoMatches boolean value defaulted to true for handling invalid reserved + * @param handleNoMatches boolean value defaulted to true for handling invalid reserved * parameters - * + * * @return @b QString the resolved parameter name - * + * * @throws Isis::IException::User - unresolved reserved parameter is ambigious * @throws Isis::IException::User - reserved parameter cannot be matched (invalid) - * - */ - QString UserInterface::resolveParameter(QString &unresolvedParam, - std::vector &reservedParams, + * + */ + QString UserInterface::resolveParameter(QString &unresolvedParam, + std::vector &reservedParams, bool handleNoMatches) { // index of the reserved parameter in options that matches the cmdline parameter int matchOption = -1; // determine if the reserved parameter on cmdline is shortened (e.g. -h for -HELP) for (int option = 0; option < (int)reservedParams.size(); option++) { - + // If our option starts with the parameter name so far, this is it if ( reservedParams[option].startsWith(unresolvedParam) ) { if (matchOption >= 0) { @@ -1153,17 +1162,17 @@ namespace Isis { if (matchOption < 0) { QString msg = "Invalid Reserve Parameter Option [" + unresolvedParam + "]. Choices are "; - + QString msgOptions; for (int option = 0; option < (int)reservedParams.size(); option++) { // Make sure not to show -PID as an option if (reservedParams[option].compare("-PID") == 0) { continue; } - + msgOptions += reservedParams[option]; msgOptions += ","; - + // this condition will never evaluate to FALSE - // this condition is only reachable when reservedParams.size() == 0 (empty) - // if this is the case, this for loop will never be entered @@ -1171,11 +1180,11 @@ namespace Isis { // msgOptions += ","; // } } - + // remove the terminating ',' from msgOptions - msgOptions.chop(1); + msgOptions.chop(1); msg += " [" + msgOptions + "]"; - + throw IException(IException::User, msg, _FILEINFO_); } } @@ -1185,5 +1194,5 @@ namespace Isis { else { return reservedParams[matchOption]; } - } + } } // end namespace isis -- GitLab From da925b6fd7d2c8dad4e06787f82c516f3148cbc9 Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Fri, 20 Apr 2018 15:46:09 -0700 Subject: [PATCH 171/620] Added history comment. --- .../base/objs/UserInterface/UserInterface.h | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/isis/src/base/objs/UserInterface/UserInterface.h b/isis/src/base/objs/UserInterface/UserInterface.h index d8e382d89b..e85c443e8f 100644 --- a/isis/src/base/objs/UserInterface/UserInterface.h +++ b/isis/src/base/objs/UserInterface/UserInterface.h @@ -69,7 +69,7 @@ namespace Isis { * documentation * @history 2005-10-03 Elizabeth Miller - changed @ingroup tag * @history 2005-12-21 Elizabeth Miller - Added command line options - * -BATCHLIST, -SAVE, -ERRLIST, -ONERROR, + * -BATCHLIST, -SAVE, -ERRLIST, -ONERROR, * -PREFERENCE, and -PRINTFILE * @history 2006-01-23 Elizabeth Miller - Renamed -HELP to -WEBHELP and made * it accept abbreviations of reserve params @@ -128,25 +128,28 @@ namespace Isis { * @history 2014-06-09 Ian Humphrey - Added PreProcess() and ResolveParameter() * functions to replace redundant code in LoadCommandLine(). * These functions evaulate -HELP and -WEBHELP flags regardless - * of errors on commandline. Fixes #552. - * @history 2014-06-10 Ian Humphrey - Fixed issue causing parameter name values + * of errors on commandline. Fixes #552. + * @history 2014-06-10 Ian Humphrey - Fixed issue causing parameter name values * on the -HELP flag to only evaluate if uppercase. Fixes #1735. * Reorganized header and cpp layout. Renamed private member functions * to follow code convention. Began modifying unitTest.cpp. - * @history 2014-06-11 Ian Humphrey - Added throws to evaluateOption() so that if the parameter + * @history 2014-06-11 Ian Humphrey - Added throws to evaluateOption() so that if the parameter * is -HELP or -WEBHELP unitTest.cpp can catch and continue running. * @history 2014-06-12 Ian Humphrey - Modified logic in loadCommandLine() throw statements so * an exception is thrown when -BATCHLIST is used with -GUI, -SAVE, * -LAST, or -RESTORE options. Added bool usedDashRestore. - * @history 2014-06-17 Ian Humphrey - Added to unitTest.xml to test -HELP=value. Renamed + * @history 2014-06-17 Ian Humphrey - Added to unitTest.xml to test -HELP=value. Renamed * application name from 'hist' to 'unitTest'. Modified logic of * resolveParameter() to give appropriate error message to user * when using an invalid reserved parameter (e.g. -x). - * @history 2014-06-18 Ian Humphrey - Finished developing unitTest.cpp and reorganized. + * @history 2014-06-18 Ian Humphrey - Finished developing unitTest.cpp and reorganized. * Added lacking [at]throws documentation to UserInterface.cpp. * @history 2016-04-05 Jesse Mapel - Changed bad histroy file error message to reflect that * the history file could be for a different application. Fixes #2366 - * + * @history 2018-04-20 Adam Goins - Modified loadHistory() to print out the last command + * so that users can see the actual command that the -last arg loads. + * Fixes #4779. + * */ class UserInterface : public IsisAml { @@ -162,8 +165,8 @@ namespace Isis { */ bool AbortOnError() { return p_abortOnError; - }; - + }; + /** * Returns the size of the batchlist. If there is no batchlist, it will * return 0 @@ -173,7 +176,7 @@ namespace Isis { int BatchListSize() { return p_batchList.size(); }; - + /** * Indicates if the Isis Graphical User Interface is operating. * @@ -190,8 +193,8 @@ namespace Isis { */ int ParentId() { return p_parentId; - }; - + }; + /** * @return the Gui */ @@ -201,24 +204,24 @@ namespace Isis { QString GetInfoFileName(); bool GetInfoFlag(); - + void SetBatchList(int i); void SetErrorList(int i); - + void SaveHistory(); private: void loadBatchList(const QString file); void loadCommandLine(int argc, char *argv[]); void loadHistory(const QString file); - + void evaluateOption(const QString name, const QString value); - void getNextParameter(unsigned int &curPos, - QString &unresolvedParam, + void getNextParameter(unsigned int &curPos, + QString &unresolvedParam, std::vector &value); void preProcess(QString fullReservedName, std::vector &reservedParams); std::vector readArray(QString arrayString); - QString resolveParameter(QString &name, + QString resolveParameter(QString &name, std::vector &reservedParams, bool handleNoMatches = true); @@ -227,23 +230,23 @@ namespace Isis { //! Vector of batchlist data. std::vector > p_batchList; //! This variable will contain argv. - std::vector p_cmdline; + std::vector p_cmdline; //! FileName to write batchlist line that caused error on. QString p_errList; //! Pointer to the gui object. - Gui *p_gui; + Gui *p_gui; //! Boolean value representing if it's in debug mode. - bool p_info; + bool p_info; //! FileName to save debugging info. - QString p_infoFileName; + QString p_infoFileName; //! Boolean value representing whether the program is interactive or not. - bool p_interactive; - //! This is a status to indicate if the GUI is running or not. - int p_parentId; - //! Name of program to run. - QString p_progName; + bool p_interactive; + //! This is a status to indicate if the GUI is running or not. + int p_parentId; + //! Name of program to run. + QString p_progName; //! FileName to save last history to. - QString p_saveFile; + QString p_saveFile; }; }; -- GitLab From 0998e2e44830c7fccc0623ef1f921d377c2228f0 Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Tue, 24 Apr 2018 12:47:02 -0700 Subject: [PATCH 172/620] Added optional parameter to emitted signal. Check to ensure captured event is still accepted before closing window. --- .../ViewportMainWindow/ViewportMainWindow.cpp | 18 +++++++++++++++--- .../ViewportMainWindow/ViewportMainWindow.h | 8 +++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp index 22471ac425..100c211df5 100644 --- a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp +++ b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.cpp @@ -103,15 +103,27 @@ namespace Isis { * signal and ignores the close event. * * @param event + * + * @internal + * @history 2018-04-24 Adam Goins - Added optional parameter QCloseEvent to + * the closeWindow() signal so that the close event can be caught + * and set to rejected by listening applications (such as qnet). + * Fixes an issue where closing qnet and clicking 'cancel' from the + * proceeding popup dialogue would still close the window but leave + * the application running. Fixes #4146. */ void ViewportMainWindow::closeEvent(QCloseEvent *event) { if (p_workspace->confirmClose()) { - emit closeWindow(); - MainWindow::closeEvent(event); + emit closeWindow(event); + if (event->isAccepted()) { + MainWindow::closeEvent(event); + } + else { + event->ignore(); + } } else { event->ignore(); } } } - diff --git a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h index a0ff5b00db..6e44d6a303 100644 --- a/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h +++ b/isis/src/qisis/objs/ViewportMainWindow/ViewportMainWindow.h @@ -33,12 +33,18 @@ namespace Isis { * when exception occured * @history 2012-05-29 Steven Lambright - Updated closeEvent() to ask the user to save any * unsaved modifications to the opened cube. References #854. + * @history 2018-04-24 Adam Goins - Added optional parameter QCloseEvent to + * the closeWindow() signal so that the close event can be caught + * and set to rejected by listening applications (such as qnet). + * Fixes an issue where closing qnet and clicking 'cancel' from the + * proceeding popup dialogue would still close the window but leave + * the application running. Fixes #4146. */ class ViewportMainWindow : public MainWindow { Q_OBJECT signals: - void closeWindow(); //!< Signal called when the window receives a close event + void closeWindow(QCloseEvent *event = NULL); //!< Signal called when the window receives a close event public slots: void displayWarning(std::string &pStr, const std::string &pExStr); -- GitLab From e352528b647f6f97d008a32f96c57f3bccad6f13 Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Tue, 24 Apr 2018 12:48:00 -0700 Subject: [PATCH 173/620] Added optional parameter to accept a possible close event and if the popup dialogue's "cancel" option was selected, set the event to unaccepted so that the window doesn't close. --- .../src/qisis/objs/QnetTools/QnetFileTool.cpp | 21 +++++++++++++------ isis/src/qisis/objs/QnetTools/QnetFileTool.h | 16 ++++++++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp b/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp index 7fd4863831..929cd80e93 100644 --- a/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp +++ b/isis/src/qisis/objs/QnetTools/QnetFileTool.cpp @@ -82,7 +82,7 @@ namespace Isis { FileTool::addTo(menu); } - + ControlNet *QnetFileTool::controlNet() { return m_qnetTool->controlNet(); } @@ -219,11 +219,19 @@ namespace Isis { emit newControlNetwork(controlNet()); } - /** - * Exit the program + * Exit the program + * + * @internal + * @history 2018-04-24 Adam Goins - Added QCloseEvent optional parameter to + * set the CloseEvent triggered by an onwindowclose + * to ignore the event if the 'cancel' option was selected + * after clicking the close button of the viewport window. + * This fixes an issue where clicking the close button and then clicking + * 'cancel' from the QMessageBox would close the window but keep the + * application running. Fixes #4146. */ - void QnetFileTool::exit() { + void QnetFileTool::exit(QCloseEvent *event) { // If control net has been changed , prompt for user to save if (m_isDirty) { int resp = QMessageBox::warning((QWidget *)parent(), "QnetTool", @@ -236,14 +244,15 @@ namespace Isis { saveAs(); } if (resp == QMessageBox::Cancel) { + if (event) { + event->setAccepted(false); + } return; } } qApp->quit(); } - - /** * Save control network with given file * @internal diff --git a/isis/src/qisis/objs/QnetTools/QnetFileTool.h b/isis/src/qisis/objs/QnetTools/QnetFileTool.h index c67ccac021..b7e5db5952 100644 --- a/isis/src/qisis/objs/QnetTools/QnetFileTool.h +++ b/isis/src/qisis/objs/QnetTools/QnetFileTool.h @@ -24,6 +24,7 @@ */ #include "FileTool.h" +#include class QString; class QWidget; @@ -71,14 +72,21 @@ namespace Isis { * signals. * @history 2011-07-07 Tracie Sucharski - Disable Open Ground and Open Dem * until list & net open. - * @history 2011-11-01 Tracie Sucharski - Added save slot. - * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis + * @history 2011-11-01 Tracie Sucharski - Added save slot. + * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis * coding standards. References #972. - * @history 2012-10-11 Debbie A. Cook, Updated to use new Target class. References Mantis tickets + * @history 2012-10-11 Debbie A. Cook, Updated to use new Target class. References Mantis tickets * #775 and #1114. * @history 2016-04-22 Jeannie Backer - Modified to use cube labels to set * ControlNet's target instead of the TargetName. * References #3892 + * @history 2018-04-24 Adam Goins - Added QCloseEvent optional parameter to slot "exit()" to + * set the CloseEvent triggered by an onwindowclose + * to ignore the event if the 'cancel' option was selected + * after clicking the close button of the viewport window. + * This fixes an issue where clicking the close button and then clicking + * 'cancel' from the QMessageBox would close the window but keep the + * application running. Fixes #4146. * */ @@ -103,7 +111,7 @@ namespace Isis { public slots: virtual void open(); - virtual void exit(); + virtual void exit(QCloseEvent *event = NULL); virtual void save(); virtual void saveAs(); void loadPointImages(ControlPoint *point); -- GitLab From 7d1c719bbd10e747e30d6e9c9a823e8a88539e4c Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Tue, 24 Apr 2018 12:48:47 -0700 Subject: [PATCH 174/620] Supplied optional parameters to the ViewportMainWindow's closeWindow() and the QnetFileTool's exit() slot. --- isis/src/qisis/apps/qnet/qnet.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/isis/src/qisis/apps/qnet/qnet.cpp b/isis/src/qisis/apps/qnet/qnet.cpp index cdcfe8ae6c..330c75275e 100644 --- a/isis/src/qisis/apps/qnet/qnet.cpp +++ b/isis/src/qisis/apps/qnet/qnet.cpp @@ -221,8 +221,11 @@ int main(int argc, char *argv[]) { /**** EXITING ****/ // Connect the viewport's close signal to the file tool's exit method // Added 2008-12-04 by Jeannie Walldren - QObject::connect(vw , SIGNAL(closeWindow()), - ftool, SLOT(exit())); + // Added 2018-04-24 by Adam Goins - Added in optional parameters to the closeWindow() signal + // And the exit() slot so that the window's closeEvent can be handled + // Appropriately. Fixes #4146. + QObject::connect(vw , SIGNAL(closeWindow(QCloseEvent *)), + ftool, SLOT(exit(QCloseEvent *))); //----------------------------------------------------------------- vw->show(); -- GitLab From 3accdd899af41972675db0f7b1853654f7f91c8e Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Sat, 28 Apr 2018 14:06:13 -0700 Subject: [PATCH 175/620] Edited colors of control points. --- .../MosaicSceneWidget/ControlPointGraphicsItem.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp index 289c43e789..69955aa2fd 100644 --- a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp +++ b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.cpp @@ -52,15 +52,13 @@ namespace Isis { if (cp->IsIgnored()) { // Was red setPen(QPen(QColor(255, 255, 0), 0.0)); // set point marker yellow } - else if (cp->IsEditLocked()) { - setPen(QPen(Qt::magenta, 0.0)); + else if (cp->IsEditLocked()) { // was magenta + setPen(QPen(Qt::red, 0.0)); } - else if (cp->GetType() == ControlPoint::Fixed) { + else if ( (cp->GetType() == ControlPoint::Fixed) + || (cp->GetType() == ControlPoint::Constrained) ) { setPen(QPen(Qt::magenta, 0.0)); // Was green } - else if (cp->GetType() == ControlPoint::Constrained) { - setPen(QPen(Qt::red, 0.0)); //was darkGreen - } else {// Free setPen(QPen(Qt::green, 0.0)); //was blue } -- GitLab From 9b61036d41cf01bd0539ff1940a3cbddb52c3cfb Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Tue, 1 May 2018 12:52:58 -0700 Subject: [PATCH 176/620] Added history entry. --- .../MosaicSceneWidget/ControlPointGraphicsItem.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h index ff6bcfde46..5ed3ac1dbd 100644 --- a/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h +++ b/isis/src/qisis/objs/MosaicSceneWidget/ControlPointGraphicsItem.h @@ -20,7 +20,7 @@ namespace Isis { * * @internal * @history 2011-05-09 Steven Lambright - Fixed known issue with paint() when zoomed in. - * @history 2011-05-10 Steven Lambright - Added arrow capabilities, fixed problem with + * @history 2011-05-10 Steven Lambright - Added arrow capabilities, fixed problem with * boundingRect() that seemed to cause a crash. * @history 2011-06-07 Debbie A. Cook and Tracie Sucharski - Modified point types * Ground ------> Fixed @@ -34,8 +34,12 @@ namespace Isis { * @history 2016-10-20 Tracie Sucharski - Remove obsolete code that was commented out. * Fixes #4479. * @history 2017-08-02 Tracie Sucharski - Draw the current edit Control Point as a circle with - * center crosshair in red. Fixes #5007, #5008. - * + * center crosshair in red. Fixes #5007, #5008. + * @history 2018-05-01 Kaitlyn Lee - Changed colors of control points to match qnet. + * Colors Changed: free from blue to green, ignored from red to yellow, + * locked from magenta to red, and constrained (was dark green) and + * fixed (was green) are now both represented with magenta. Fixes #5401. + * */ class ControlPointGraphicsItem : public QGraphicsRectItem { public: @@ -70,7 +74,7 @@ namespace Isis { bool m_colorByMeasureCount; //! Are we coloring the movement arrow based on max CM residual magnitude bool m_colorByResidualMagnitude; - //! Measure count threshold for colored vs. black + //! Measure count threshold for colored vs. black int m_measureCount; //! Residual magnitude threshold for colored vs. black double m_residualMagnitude; @@ -78,4 +82,3 @@ namespace Isis { } #endif - -- GitLab From 38bcb97c9fdbd469196d6c12d13b0bfdf0f9c95b Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 9 May 2018 09:22:35 -0700 Subject: [PATCH 177/620] Initial copy from himos to tgocassismos --- isis/src/tgo/apps/tgocassismos/Makefile | 7 + .../tgo/apps/tgocassismos/tgocassismos.cpp | 320 ++++++++++++++++++ .../tgo/apps/tgocassismos/tgocassismos.xml | 101 ++++++ isis/src/tgo/apps/tgocassismos/tsts/Makefile | 4 + .../apps/tgocassismos/tsts/case01/Makefile | 10 + .../tgocassismos/tsts/case02pole/Makefile | 10 + 6 files changed, 452 insertions(+) create mode 100644 isis/src/tgo/apps/tgocassismos/Makefile create mode 100644 isis/src/tgo/apps/tgocassismos/tgocassismos.cpp create mode 100644 isis/src/tgo/apps/tgocassismos/tgocassismos.xml create mode 100644 isis/src/tgo/apps/tgocassismos/tsts/Makefile create mode 100644 isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile create mode 100644 isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile diff --git a/isis/src/tgo/apps/tgocassismos/Makefile b/isis/src/tgo/apps/tgocassismos/Makefile new file mode 100644 index 0000000000..7578f0b21d --- /dev/null +++ b/isis/src/tgo/apps/tgocassismos/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.apps +endif \ No newline at end of file diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp new file mode 100644 index 0000000000..2fe79d8745 --- /dev/null +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp @@ -0,0 +1,320 @@ +#include "Isis.h" + +#include "Application.h" +#include "Camera.h" +#include "Cube.h" +#include "FileList.h" +#include "IException.h" +#include "Pvl.h" +#include "IString.h" +#include "Longitude.h" +#include "OriginalLabel.h" +#include "Process.h" +#include "ProgramLauncher.h" +#include "TProjection.h" +#include "UserInterface.h" + + +using namespace std; +using namespace Isis; + +#include + +//functions in the code +void CompareLabels(Pvl &match, Pvl &comp); + + +void IsisMain() { + + // Get the list of cubes to mosaic + + UserInterface &ui = Application::GetUserInterface(); + FileList flist(ui.GetFileName("FROMLIST")); + + + vector clist; + try { + if(flist.size() < 1) { + QString msg = "the list file [" + ui.GetFileName("FROMLIST") + + "does not contain any data"; + throw IException(IException::User, msg, _FILEINFO_); + } + + // open all the cube and place in vector clist + + for(int i = 0; i < flist.size(); i++) { + Cube *c = new Cube(); + clist.push_back(c); + c->open(flist[i].toString()); + } + + + + // run the compare function here. This will conpare the + // labels of the first cube to the labels of each following cube. + PvlKeyword sourceProductId("SourceProductId"); + QString ProdId; + for(int i = 0; i < (int)clist.size(); i++) { + Pvl *pmatch = clist[0]->label(); + Pvl *pcomp = clist[i]->label(); + CompareLabels(*pmatch, *pcomp); + PvlGroup g = pcomp->findGroup("Instrument", Pvl::Traverse); + if(g.hasKeyword("StitchedProductIds")) { + PvlKeyword k = g["StitchedProductIds"]; + for(int j = 0; j < (int)k.size(); j++) { + sourceProductId += g["stitchedProductIds"][j]; + } + } + ProdId = (QString)pmatch->findGroup("Archive", Pvl::Traverse)["ObservationId"]; + QString bandname = (QString)pmatch->findGroup("BandBin", Pvl::Traverse)["Name"]; + bandname = bandname.toUpper(); + ProdId = ProdId + "_" + bandname; + } + bool runXY = true; + + //calculate the min and max lon + double minLat = DBL_MAX; + double maxLat = -DBL_MAX; + double minLon = DBL_MAX; + double maxLon = -DBL_MAX; + double avgLat; + double avgLon; + for(int i = 0; i < (int)clist.size(); i++) { + TProjection *proj = (TProjection *) clist[i]->projection(); + if(proj->MinimumLatitude() < minLat) minLat = proj->MinimumLatitude(); + if(proj->MaximumLatitude() > maxLat) maxLat = proj->MaximumLatitude(); + if(proj->MinimumLongitude() < minLon) minLon = proj->MinimumLongitude(); + if(proj->MaximumLongitude() > maxLon) maxLon = proj->MaximumLongitude(); + } + avgLat = (minLat + maxLat) / 2; + avgLon = (minLon + maxLon) / 2; + TProjection *proj = (TProjection *) clist[0]->projection(); + proj->SetGround(avgLat, avgLon); + avgLat = proj->UniversalLatitude(); + avgLon = proj->UniversalLongitude(); + + // Use camera class to get Inc., emi., phase, and other values + double Cemiss; + double Cphase; + double Cincid; + double ClocalSolTime; + double CsolarLong; + double CsunAzimuth; + double CnorthAzimuth; + for(int i = 0; i < (int)clist.size(); i++) { + Camera *cam = clist[i]->camera(); + if(cam->SetUniversalGround(avgLat, avgLon)) { + Cemiss = cam->EmissionAngle(); + Cphase = cam->PhaseAngle(); + Cincid = cam->IncidenceAngle(); + ClocalSolTime = cam->LocalSolarTime(); + CsolarLong = cam->solarLongitude().degrees(); + CsunAzimuth = cam->SunAzimuth(); + CnorthAzimuth = cam->NorthAzimuth(); + runXY = false; + break; + } + } + + //The code within the if runXY was added in 10/07 to find an intersect with + //pole images that would fail when using projection set universal ground. + // This is run if no intersect is found when using lat and lon in + // projection space. + if(runXY) { + double startX = DBL_MAX; + double endX = DBL_MIN; + double startY = DBL_MAX; + double endY = DBL_MIN; + for(int i = 0; i < (int)clist.size(); i++) { + TProjection *proj = (TProjection *) clist[i]->projection(); + proj->SetWorld(0.5, 0.5); + if(i == 0) { + startX = proj->XCoord(); + endY = proj->YCoord(); + } + else { + if(proj->XCoord() < startX) startX = proj->XCoord(); + if(proj->YCoord() > endY) endY = proj->YCoord(); + } + Pvl *p = clist[i]->label(); + double nlines = p->findGroup("Dimensions", Pvl::Traverse)["Lines"]; + double nsamps = p->findGroup("Dimensions", Pvl::Traverse)["Samples"]; + + proj->SetWorld((nsamps + 0.5), (nlines + 0.5)); + if(i == 0) { + endX = proj->XCoord(); + startY = proj->YCoord(); + } + else { + if(proj->XCoord() > endX) endX = proj->XCoord(); + if(proj->YCoord() < startY) startY = proj->YCoord(); + } + } + + double avgX = (startX + endX) / 2; + double avgY = (startY + endY) / 2; + double sample = proj->ToWorldX(avgX); + double line = proj->ToWorldY(avgY); + + for(int i = 0; i < (int)clist.size(); i++) { + Camera *cam = clist[i]->camera(); + if(cam->SetImage(sample, line)) { + Cemiss = cam->EmissionAngle(); + Cphase = cam->PhaseAngle(); + Cincid = cam->IncidenceAngle(); + ClocalSolTime = cam->LocalSolarTime(); + CsolarLong = cam->solarLongitude().degrees(); + CsunAzimuth = cam->SunAzimuth(); + CnorthAzimuth = cam->NorthAzimuth(); + runXY = false; + break; + } + } + } + if(runXY) { + QString msg = "Camera did not intersect images to gather stats"; + throw IException(IException::User, msg, _FILEINFO_); + } + + // get the min and max SCLK values ( do this with QString comp.) + // get the value from the original label blob + QString startClock; + QString stopClock; + QString startTime; + QString stopTime; + for(int i = 0; i < (int)clist.size(); i++) { + OriginalLabel origLab; + clist[i]->read(origLab); + PvlGroup timegrp = origLab.ReturnLabels().findGroup("TIME_PARAMETERS", Pvl::Traverse); + if(i == 0) { + startClock = (QString)timegrp["SpacecraftClockStartCount"]; + stopClock = (QString)timegrp["SpacecraftClockStopCount"]; + startTime = (QString)timegrp["StartTime"]; + stopTime = (QString)timegrp["StopTime"]; + } + else { + QString testStartTime = (QString)timegrp["StartTime"]; + QString testStopTime = (QString)timegrp["StopTime"]; + if(testStartTime < startTime) { + startTime = testStartTime; + startClock = (QString)timegrp["SpacecraftClockStartCount"]; + } + if(testStopTime > stopTime) { + stopTime = testStopTime; + stopClock = (QString)timegrp["spacecraftClockStopCount"]; + } + } + } + + // Concatenate all TDI's and summing and specialProcessingFlat into one keyword + PvlKeyword cpmmTdiFlag("cpmmTdiFlag"); + PvlKeyword cpmmSummingFlag("cpmmSummingFlag"); + PvlKeyword specialProcessingFlag("SpecialProcessingFlag"); + for(int i = 0; i < 14; i++) { + cpmmTdiFlag += (QString)""; + cpmmSummingFlag += (QString)""; + specialProcessingFlag += (QString)""; + } + + for(int i = 0; i < (int)clist.size(); i++) { + Pvl *clab = clist[i]->label(); + PvlGroup cInst = clab->findGroup("Instrument", Pvl::Traverse); + OriginalLabel cOrgLab; + clist[i]->read(cOrgLab); + PvlGroup cGrp = cOrgLab.ReturnLabels().findGroup("INSTRUMENT_SETTING_PARAMETERS", Pvl::Traverse); + cpmmTdiFlag[(int)cInst["CpmmNumber"]] = (QString) cGrp["MRO:TDI"]; + cpmmSummingFlag[(int)cInst["CpmmNumber"]] = (QString) cGrp["MRO:BINNING"]; + + if(cInst.hasKeyword("Special_Processing_Flag")) { + specialProcessingFlag[cInst["CpmmNumber"]] = (QString) cInst["Special_Processing_Flag"]; + } + else { + // there may not be the keyword Special_Processing_Flag if no + //keyword then set the output to NOMINAL + specialProcessingFlag[cInst["CpmmNumber"]] = "NOMINAL"; + } + } + + + // Get the blob of original labels from first image in list + OriginalLabel org; + clist[0]->read(org); + + //close all cubes + for(int i = 0; i < (int)clist.size(); i++) { + clist[i]->close(); + delete clist[i]; + } + clist.clear(); + + // automos step + QString list = ui.GetFileName("FROMLIST"); + QString toMosaic = ui.GetFileName("TO"); + QString MosaicPriority = ui.GetString("PRIORITY"); + + QString parameters = "FROMLIST=" + list + " MOSAIC=" + toMosaic + " PRIORITY=" + MosaicPriority; + ProgramLauncher::RunIsisProgram("automos", parameters); + + // write out new information to new group mosaic + + PvlGroup mos("Mosaic"); + mos += PvlKeyword("ProductId ", ProdId); + mos += PvlKeyword(sourceProductId); + mos += PvlKeyword("StartTime ", startTime); + mos += PvlKeyword("SpacecraftClockStartCount ", startClock); + mos += PvlKeyword("StopTime ", stopTime); + mos += PvlKeyword("SpacecraftClockStopCount ", stopClock); + mos += PvlKeyword("IncidenceAngle ", toString(Cincid), "DEG"); + mos += PvlKeyword("EmissionAngle ", toString(Cemiss), "DEG"); + mos += PvlKeyword("PhaseAngle ", toString(Cphase), "DEG"); + mos += PvlKeyword("LocalTime ", toString(ClocalSolTime), "LOCALDAY/24"); + mos += PvlKeyword("SolarLongitude ", toString(CsolarLong), "DEG"); + mos += PvlKeyword("SubSolarAzimuth ", toString(CsunAzimuth), "DEG"); + mos += PvlKeyword("NorthAzimuth ", toString(CnorthAzimuth), "DEG"); + mos += cpmmTdiFlag; + mos += cpmmSummingFlag; + mos += specialProcessingFlag; + + Cube mosCube; + mosCube.open(ui.GetFileName("TO"), "rw"); + PvlObject &lab = mosCube.label()->findObject("IsisCube"); + lab.addGroup(mos); + //add orginal label blob to the output cube + mosCube.write(org); + mosCube.close(); + + } + catch(IException &e) { + for(int i = 0; i < (int)clist.size(); i++) { + clist[i]->close(); + delete clist[i]; + } + QString msg = "The mosaic [" + ui.GetFileName("TO") + "] was NOT created"; + throw IException(IException::User, msg, _FILEINFO_); + } +} // end of isis main + +//Function to compare label - CompareLabels +void CompareLabels(Pvl &pmatch, Pvl &pcomp) { + // test of the ObservationId + PvlGroup matchgrp = pmatch.findGroup("Archive", Pvl::Traverse); + PvlGroup compgrp = pcomp.findGroup("Archive", Pvl::Traverse); + QString obsMatch = matchgrp["ObservationId"]; + QString obsComp = compgrp["ObservationId"]; + + if(obsMatch != obsComp) { + QString msg = "Images not from the same observation"; + throw IException(IException::User, msg, _FILEINFO_); + } + + // Test of the BandBin filter name + PvlGroup bmatchgrp = pmatch.findGroup("BandBin", Pvl::Traverse); + PvlGroup bcompgrp = pcomp.findGroup("BandBin", Pvl::Traverse); + QString bandMatch = bmatchgrp["Name"]; + QString bandComp = bcompgrp["Name"]; + + if(bandMatch != bandComp) { + QString msg = "Images not the same filter"; + throw IException(IException::User, msg, _FILEINFO_); + } +} diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml new file mode 100644 index 0000000000..381c9fdbc6 --- /dev/null +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml @@ -0,0 +1,101 @@ + + + + + Produce an output mosaic of TGO CaSSIS images from the same observation and filter. + + + +

+ ** The output from this program is required by hirdrgen **
+ If the final product wil not be an RDR, mapmos or automos can be used to produce a mosaic. + This program produces a mosaic and adds keywords to the label group "Mosaic" that are required + by hirdrgen.
+ + The input cubes to this program must be from the same observation, same filter, and map projected.
+ + A new label group, required by tgocassisrdrgen, called "Mosaic" is added to the image labels of + the output cube. The original label blob is also propagated from the first file in the input list.
+

+ +

+ processing sequence for single filter products that will become RDRs
+ cam2map - project the cube.
+ tgocassismos - mosaic files and add keywords to the mosaic group.
+ tgocassisrdrgen - produce a RDR product.
+

+ +
+ + + Trace Gas Orbiter + + + + + Original version. + + + + + + + filename + input + + Input list of files + + + A single colume list of TGO CaSSIS files that will be mosaiced together. The input + files must be from the some observation and be from the same filter. The files must also + be map projected. + + + *.lis *.lst *.txt + + + + + cube + output + + Output mosaic + + + the output mosaic cube with the new mosaic label group added. + + + *.cub + + + + + string + + ONTOP + + The priority of pixel placement + + This parameter is used to select one of two ways to masaic the + pixels in areas of overlap. + + + + + + + + + +
diff --git a/isis/src/tgo/apps/tgocassismos/tsts/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/Makefile new file mode 100644 index 0000000000..46d84c74c2 --- /dev/null +++ b/isis/src/tgo/apps/tgocassismos/tsts/Makefile @@ -0,0 +1,4 @@ +BLANKS = "%-6s" +LENGTH = "%-40s" + +include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile new file mode 100644 index 0000000000..4b21ac1ab0 --- /dev/null +++ b/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile @@ -0,0 +1,10 @@ +APPNAME = himos + +include $(ISISROOT)/make/isismake.tsts + +commands: + $(LS) -1 $(INPUT)/*.cub > $(OUTPUT)/cube.lis; + $(APPNAME) fromlist=$(OUTPUT)/cube.lis \ + to=$(OUTPUT)/test_himos_070418.cub > /dev/null; + catlab from=$(OUTPUT)/test_himos_070418.cub to=$(OUTPUT)/himos.pvl > /dev/null; + $(RM) $(OUTPUT)/cube.lis; diff --git a/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile new file mode 100644 index 0000000000..f4eaa16dd6 --- /dev/null +++ b/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile @@ -0,0 +1,10 @@ +APPNAME = himos + +include $(ISISROOT)/make/isismake.tsts + +commands: + $(LS) -1 $(INPUT)/*.cub > $(OUTPUT)/cube.lis; + $(APPNAME) fromlist=$(OUTPUT)/cube.lis \ + to=$(OUTPUT)/test_himos_pole.cub > /dev/null; + catlab from=$(OUTPUT)/test_himos_pole.cub to=$(OUTPUT)/himos_pole.pvl > /dev/null; + $(RM) $(OUTPUT)/cube.lis; -- GitLab From 8905e85e73515b99d9a3f9a5f7cc3c61cc497577 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 9 May 2018 09:36:09 -0700 Subject: [PATCH 178/620] Update Makefile --- isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile index 4b21ac1ab0..5f8a14e890 100644 --- a/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile +++ b/isis/src/tgo/apps/tgocassismos/tsts/case01/Makefile @@ -1,10 +1,10 @@ -APPNAME = himos +APPNAME = tgocassismos include $(ISISROOT)/make/isismake.tsts commands: $(LS) -1 $(INPUT)/*.cub > $(OUTPUT)/cube.lis; $(APPNAME) fromlist=$(OUTPUT)/cube.lis \ - to=$(OUTPUT)/test_himos_070418.cub > /dev/null; - catlab from=$(OUTPUT)/test_himos_070418.cub to=$(OUTPUT)/himos.pvl > /dev/null; + to=$(OUTPUT)/test_tgocassismos_070418.cub > /dev/null; + catlab from=$(OUTPUT)/test_tgocassismos_070418.cub to=$(OUTPUT)/tgocassismos.pvl > /dev/null; $(RM) $(OUTPUT)/cube.lis; -- GitLab From 21921c46f846fdb5bdeff102d819c105525419b6 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 9 May 2018 09:36:49 -0700 Subject: [PATCH 179/620] Update Makefile --- isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile b/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile index f4eaa16dd6..6d29b20f08 100644 --- a/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile +++ b/isis/src/tgo/apps/tgocassismos/tsts/case02pole/Makefile @@ -1,10 +1,10 @@ -APPNAME = himos +APPNAME = tgocassismos include $(ISISROOT)/make/isismake.tsts commands: $(LS) -1 $(INPUT)/*.cub > $(OUTPUT)/cube.lis; $(APPNAME) fromlist=$(OUTPUT)/cube.lis \ - to=$(OUTPUT)/test_himos_pole.cub > /dev/null; - catlab from=$(OUTPUT)/test_himos_pole.cub to=$(OUTPUT)/himos_pole.pvl > /dev/null; + to=$(OUTPUT)/test_tgocassismos_pole.cub > /dev/null; + catlab from=$(OUTPUT)/test_tgocassismos_pole.cub to=$(OUTPUT)/tgocassismos_pole.pvl > /dev/null; $(RM) $(OUTPUT)/cube.lis; -- GitLab From c95d3a8d31f30330bbe298f157f05a6fe8cbc741 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 9 May 2018 09:43:34 -0700 Subject: [PATCH 180/620] Update tgocassismos.xml --- isis/src/tgo/apps/tgocassismos/tgocassismos.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml index 381c9fdbc6..8e97867c94 100644 --- a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml @@ -7,7 +7,6 @@

- ** The output from this program is required by hirdrgen **
If the final product wil not be an RDR, mapmos or automos can be used to produce a mosaic. This program produces a mosaic and adds keywords to the label group "Mosaic" that are required by hirdrgen.
@@ -62,7 +61,7 @@ Output mosaic - the output mosaic cube with the new mosaic label group added. + The output mosaic cube with the new mosaic label group added. *.cub -- GitLab From e275807dd9a5747a83b05cff9365e88f89608668 Mon Sep 17 00:00:00 2001 From: Jeannie Backer Date: Wed, 9 May 2018 12:46:59 -0700 Subject: [PATCH 181/620] Added changes requested by Lucille Le Corre, Hayabusa. --- isis/src/hayabusa/apps/amicacal/amicacal.cpp | 12 ++++++++---- isis/src/hayabusa/apps/amicacal/amicacal.xml | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/isis/src/hayabusa/apps/amicacal/amicacal.cpp b/isis/src/hayabusa/apps/amicacal/amicacal.cpp index aa0bb34070..8ceecb5fae 100644 --- a/isis/src/hayabusa/apps/amicacal/amicacal.cpp +++ b/isis/src/hayabusa/apps/amicacal/amicacal.cpp @@ -295,6 +295,7 @@ void IsisMain() { g_timeRatio = g_tvct / (g_exposureTime + g_tvct); g_darkCurrent = g_d0 * exp(g_d1 * g_temperature); + g_calibrationScale = 1.0; QString g_units = "DN"; if ( !sunDistanceAU(startTime, target, g_solarDist) ) { @@ -303,7 +304,12 @@ void IsisMain() { _FILEINFO_); } - if ( QString::compare(g_iofCorrection, "dn", Qt::CaseInsensitive) != 0 ) { + // Add DN/S as an output option + if ( QString::compare(g_iofCorrection, "dn/s", Qt::CaseInsensitive) == 0 ) { + g_calibrationScale = 1.0 / g_exposureTime; + g_units = "DN/S"; + } + else if ( QString::compare(g_iofCorrection, "dn", Qt::CaseInsensitive) != 0 ) { /* Note - this radiance calibration scaling factor is applied to both radiance and iof * * Units of RADIANCE @@ -776,10 +782,8 @@ void calibrate(vector& in, vector& out) { imageOut[i] = pow(imageOut[i], g_gamma) + g_L0 * imageOut[i] * exp(g_L1 * imageOut[i]); - // 3) DARK Current - Currently negligible and removed -#if 0 + // 3) DARK Current imageOut[i] = imageOut[i] - g_darkCurrent; -#endif // 4) HOT Pixel Removal diff --git a/isis/src/hayabusa/apps/amicacal/amicacal.xml b/isis/src/hayabusa/apps/amicacal/amicacal.xml index 2efdee260d..8aa504ca2d 100644 --- a/isis/src/hayabusa/apps/amicacal/amicacal.xml +++ b/isis/src/hayabusa/apps/amicacal/amicacal.xml @@ -536,11 +536,15 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica Updated radiance calibration to divide by exposure duration, as done with reflectance. - Updated amicaCalibration????.trn file with latest radiance scale factor for sz - (value provided by L. LeCorre, PSI). + Updated amicaCalibration????.trn file with latest radiance scale factor for zs + (value provided by L. Le Corre, PSI). Updated to use filter V solar flux on all calculations. Brought code closer to ISIS3 coding standards. Fixes #5243 + + Added DN/S as an output option. Apply dark current current as it was disabled + in earlier versions. + @@ -641,6 +645,15 @@ xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Applica + + -- GitLab From 185f97fb6c4f3d1ed9f2d57370a4fbf8b6a5417a Mon Sep 17 00:00:00 2001 From: Kristin Berry Date: Wed, 16 May 2018 13:14:40 -0700 Subject: [PATCH 193/620] Added support for reingesting Mapping groups --- .../apps/tgocassis2isis/tgocassis2isis.cpp | 34 ++++++++++++------- .../apps/tgocassis2isis/tgocassis2isis.xml | 3 ++ .../tgocassis2isis/tsts/exportedFile/Makefile | 2 +- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp index 4d4fed35eb..01f956e658 100644 --- a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp +++ b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp @@ -51,18 +51,28 @@ void IsisMain() { translateLabels(xmlFileName, outputCube, transRawFile); } catch (IException &e) { - translateLabels(xmlFileName, outputCube, transExportFile); - PvlGroup &dataDir = Preference::Preferences().findGroup("DataDirectory"); - QString missionDir = (QString) dataDir["Tgo"]; - FileName mapTransFile(missionDir + "/translations/tgoCassisMapping.trn"); - - // Get the translation manager ready for translating the mapping label - - XmlToPvlTranslationManager labelXlater(xmlFileName, mapTransFile.expanded()); - - // Pvl output label - Pvl *outputLabel = outputCube->label(); - labelXlater.Auto(*(outputLabel)); + translateLabels(xmlFileName, outputCube, transExportFile); + + // Try to translate a mapping group + try { + PvlGroup &dataDir = Preference::Preferences().findGroup("DataDirectory"); + QString missionDir = (QString) dataDir["Tgo"]; + FileName mapTransFile(missionDir + "/translations/tgoCassisMapping.trn"); + + // Get the translation manager ready for translating the mapping label + + XmlToPvlTranslationManager labelXlater(xmlFileName, mapTransFile.expanded()); + + // Pvl output label + Pvl *outputLabel = outputCube->label(); + labelXlater.Auto(*(outputLabel)); + } + catch (IException &e) { + Pvl *outputLabel = outputCube->label(); + if(outputLabel->hasGroup("Mapping")) { + outputLabel->deleteGroup("Mapping"); + } + } } FileName outputCubeFileName(ui.GetFileName("TO")); diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml index eaf8f24068..9931c24a35 100644 --- a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml +++ b/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.xml @@ -112,6 +112,9 @@ Updated to ingest images which have been exported using tgocassisrdrgen. Fixes #5418. + + Updated to ingest Mapping groups from images have been exported using tgocassisrdrgen. Fixes #5418. + diff --git a/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile b/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile index 20e58ce073..65cf613c2e 100644 --- a/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile +++ b/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile @@ -11,7 +11,7 @@ commands: $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.50.30.181-RED-01012-B1_rdrgen.xml \ to=$(OUTPUT)/reingested_unproj.cub > /dev/null; catlab from=$(OUTPUT)/reingested_unproj.cub \ - to=$(OUTPUT)/reingested_proj.pvl > /dev/null; + to=$(OUTPUT)/reingested_unproj.pvl > /dev/null; # projected -- GitLab From 6e55b8817e02018b7ad5c3631ba812d570b706e3 Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Wed, 16 May 2018 13:15:16 -0700 Subject: [PATCH 194/620] Added padding. --- isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp index a1a5ed78f4..a1614aa843 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp @@ -43,7 +43,7 @@ void IsisMain() { throw IException(IException::User, msg, _FILEINFO_); } - if ( ui.WasEntered("PRODID")) { + if ( ui.WasEntered("PRODID") ) { PvlGroup &archiveGroup = label->findObject("IsisCube").findGroup("Archive"); try { PvlKeyword &prodId = archiveGroup.findKeyword("ProductId"); -- GitLab From 2c6426885ba4b5df2de7205a5332d53053f7b522 Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Wed, 16 May 2018 14:56:24 -0700 Subject: [PATCH 195/620] Added default value to PROID. --- isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml index 0b25099f91..f8988c2a4a 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml @@ -73,6 +73,7 @@ string + No Value Poduct ID value -- GitLab From 90b3bf225b8417cf72a5164b413ddb85de717253 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Wed, 16 May 2018 15:38:02 -0700 Subject: [PATCH 196/620] Changes ProcessExportPds4 to better match pds4's validate tool specs. --- .../ProcessExportPds4/ProcessExportPds4.cpp | 19 ++++++++++++++----- .../ProcessExportPds4/ProcessExportPds4.h | 2 ++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp index 3219f153b6..622b2281aa 100644 --- a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp +++ b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.cpp @@ -59,7 +59,7 @@ namespace Isis { QString xmlModel; xmlModel += "href=\"http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1800.sch\" "; - xmlModel += "schemetypens=\"http://purl.oclc.org/dsdl/schematron\""; + xmlModel += "schematypens=\"http://purl.oclc.org/dsdl/schematron\""; QDomProcessingInstruction header = m_domDoc->createProcessingInstruction("xml-model", xmlModel); m_domDoc->appendChild(header); @@ -404,7 +404,7 @@ namespace Isis { xmlModel += xmlnsURI; xmlModel += "/"; xmlModel += sch; - xmlModel += "\" schemetypens=\"http://purl.oclc.org/dsdl/schematron\""; + xmlModel += "\" schematypens=\"http://purl.oclc.org/dsdl/schematron\""; QDomProcessingInstruction header = m_domDoc->createProcessingInstruction("xml-model", xmlModel); m_domDoc->insertAfter(header, m_domDoc->firstChild()); @@ -753,9 +753,18 @@ namespace Isis { // Create the "Modification_Detail" element and add it to the end of the // "Modification_History" element. QDomElement detailElement = m_domDoc->createElement("Modification_Detail"); - detailElement.setAttribute("description", description); - detailElement.setAttribute("modification_date", date); - detailElement.setAttribute("version_id", version); + + QDomElement modDateElement = m_domDoc->createElement("modification_date"); + PvlToXmlTranslationManager::setElementValue(modDateElement, date); + detailElement.appendChild(modDateElement); + + QDomElement versionIdElement = m_domDoc->createElement("version_id"); + PvlToXmlTranslationManager::setElementValue(versionIdElement, version); + detailElement.appendChild(versionIdElement); + + QDomElement descriptionElement = m_domDoc->createElement("description"); + PvlToXmlTranslationManager::setElementValue(descriptionElement, description); + detailElement.appendChild(descriptionElement); historyElement.insertAfter( detailElement, historyElement.lastChildElement() ); diff --git a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h index 7170511ee7..c56f9b2f4d 100644 --- a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h +++ b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.h @@ -71,6 +71,8 @@ namespace Isis { * @history 2018-02-05 Kristin Berry - Updated WritePds4 to remove the .xml and add a .img * if the user inputs something of the form filename.xml as the image * output name. + * @history 2018-05-16 Christopher Combs - Fixed typo in xml namespaces and changed History + * attributes to elements. Matches pds validate tool specifations. */ class ProcessExportPds4: public Isis::ProcessExport { -- GitLab From 988604097dbf4759d8636eabc037b7e865182618 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Wed, 16 May 2018 16:14:54 -0700 Subject: [PATCH 197/620] Updated ProcessExportPds4 unitTest to remove typo. --- .../objs/ProcessExportPds4/unitTest.output | 324 ++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 isis/src/base/objs/ProcessExportPds4/unitTest.output diff --git a/isis/src/base/objs/ProcessExportPds4/unitTest.output b/isis/src/base/objs/ProcessExportPds4/unitTest.output new file mode 100644 index 0000000000..0345804b2d --- /dev/null +++ b/isis/src/base/objs/ProcessExportPds4/unitTest.output @@ -0,0 +1,324 @@ +Testing ProcessExportPds4 + +Testing default object + + + + +Testing defaulte CaSSIS export + + + +0 + 3 + Last Index Fastest + + IEEE754LSBSingle + 1.0 + 0.0 + + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + +unittest: Exporting +0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed + + + +0 + 3 + Last Index Fastest + + IEEE754LSBSingle + 1.0 + 0.0 + + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + +unittest: Exporting +0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed + +Testing xml input +unittest: Exporting +0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed + +Testing export pixel types + + + +0 + 3 + Last Index Fastest + + SignedMSB2 + 1.0 + 0.0 + + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + + + + +0 + 3 + Last Index Fastest + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + + + + + +0 + 3 + Last Index Fastest + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + + + + + + +0 + 3 + Last Index Fastest + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + + + + + + + +0 + 3 + Last Index Fastest + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + + + + + + + + +0 + 3 + Last Index Fastest + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + +Testing missing start and end times +unittest: Exporting +0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed + + + +0 + 3 + Last Index Fastest + + IEEE754LSBSingle + 1.0 + 0.0 + + + Band + 1 + 1 + + + Line + 254 + 2 + + + Sample + 2048 + 3 + + + + + +Testing exporting a map projected product + + + + + +0 + 3 + Last Index Fastest + + IEEE754LSBSingle + 1.0 + 0.0 + + + Band + 1 + 1 + + + Line + 2371 + 2 + + + Sample + 2371 + 3 + + + + + +Testing errors + +Test creating a standard Pds4Label with no input +**PROGRAMMER ERROR** Must set an input cube before creating a PDS4 label. +Test translating units with a non-existant config +**I/O ERROR** Failed to read unit translation config file [not a file]. +**I/O ERROR** Unable to open [not a file]. +Test translating units with a bad config +**ERROR** Failed to load unit translation config file [$tgo/testData/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub]. +**PROGRAMMER ERROR** No PDS4 standard specified for for [Instrument]. +Test adding a history to an empty label +**PROGRAMMER ERROR** Could not find Identification_Area element to add modification history under. +Test a missing target +**PROGRAMMER ERROR** Unable to translate and export instrument information. +**ERROR** Unable to find a target in input cube. +**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [/usgs/cpkgs/isis3/data/base/translations/pds4ExportTargetFromMapping.trn]. +**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [/usgs/cpkgs/isis3/data/base/translations/pds4ExportTargetFromInstrument.trn]. -- GitLab From e50168914957f3e538a71c8a413bcce100357400 Mon Sep 17 00:00:00 2001 From: chrisryancombs Date: Wed, 16 May 2018 16:35:52 -0700 Subject: [PATCH 198/620] Created new ProcessExportPds4.truth, removed unitTest output --- .../ProcessExportPds4/ProcessExportPds4.truth | 74 ++-- .../objs/ProcessExportPds4/unitTest.output | 324 ------------------ 2 files changed, 37 insertions(+), 361 deletions(-) delete mode 100644 isis/src/base/objs/ProcessExportPds4/unitTest.output diff --git a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth index e4baf12895..0345804b2d 100644 --- a/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth +++ b/isis/src/base/objs/ProcessExportPds4/ProcessExportPds4.truth @@ -2,13 +2,13 @@ Testing ProcessExportPds4 Testing default object - + Testing defaulte CaSSIS export - - + + 0 3 Last Index Fastest @@ -38,8 +38,8 @@ Testing defaulte CaSSIS export unittest: Exporting 0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed - - + + 0 3 Last Index Fastest @@ -75,8 +75,8 @@ unittest: Exporting Testing export pixel types - - + + 0 3 Last Index Fastest @@ -104,9 +104,9 @@ Testing export pixel types - - - + + + 0 3 Last Index Fastest @@ -129,10 +129,10 @@ Testing export pixel types - - - - + + + + 0 3 Last Index Fastest @@ -155,11 +155,11 @@ Testing export pixel types - - - - - + + + + + 0 3 Last Index Fastest @@ -182,12 +182,12 @@ Testing export pixel types - - - - - - + + + + + + 0 3 Last Index Fastest @@ -210,13 +210,13 @@ Testing export pixel types - - - - - - - + + + + + + + 0 3 Last Index Fastest @@ -243,8 +243,8 @@ Testing missing start and end times unittest: Exporting 0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed - - + + 0 3 Last Index Fastest @@ -275,9 +275,9 @@ unittest: Exporting Testing exporting a map projected product - - - + + + 0 3 Last Index Fastest diff --git a/isis/src/base/objs/ProcessExportPds4/unitTest.output b/isis/src/base/objs/ProcessExportPds4/unitTest.output deleted file mode 100644 index 0345804b2d..0000000000 --- a/isis/src/base/objs/ProcessExportPds4/unitTest.output +++ /dev/null @@ -1,324 +0,0 @@ -Testing ProcessExportPds4 - -Testing default object - - - - -Testing defaulte CaSSIS export - - - -0 - 3 - Last Index Fastest - - IEEE754LSBSingle - 1.0 - 0.0 - - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - -unittest: Exporting -0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed - - - -0 - 3 - Last Index Fastest - - IEEE754LSBSingle - 1.0 - 0.0 - - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - -unittest: Exporting -0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed - -Testing xml input -unittest: Exporting -0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed - -Testing export pixel types - - - -0 - 3 - Last Index Fastest - - SignedMSB2 - 1.0 - 0.0 - - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - - - - -0 - 3 - Last Index Fastest - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - - - - - -0 - 3 - Last Index Fastest - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - - - - - - -0 - 3 - Last Index Fastest - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - - - - - - - -0 - 3 - Last Index Fastest - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - - - - - - - - -0 - 3 - Last Index Fastest - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - -Testing missing start and end times -unittest: Exporting -0% Processed 10% Processed 20% Processed 30% Processed 40% Processed 50% Processed 60% Processed 70% Processed 80% Processed 90% Processed 100% Processed - - - -0 - 3 - Last Index Fastest - - IEEE754LSBSingle - 1.0 - 0.0 - - - Band - 1 - 1 - - - Line - 254 - 2 - - - Sample - 2048 - 3 - - - - - -Testing exporting a map projected product - - - - - -0 - 3 - Last Index Fastest - - IEEE754LSBSingle - 1.0 - 0.0 - - - Band - 1 - 1 - - - Line - 2371 - 2 - - - Sample - 2371 - 3 - - - - - -Testing errors - -Test creating a standard Pds4Label with no input -**PROGRAMMER ERROR** Must set an input cube before creating a PDS4 label. -Test translating units with a non-existant config -**I/O ERROR** Failed to read unit translation config file [not a file]. -**I/O ERROR** Unable to open [not a file]. -Test translating units with a bad config -**ERROR** Failed to load unit translation config file [$tgo/testData/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub]. -**PROGRAMMER ERROR** No PDS4 standard specified for for [Instrument]. -Test adding a history to an empty label -**PROGRAMMER ERROR** Could not find Identification_Area element to add modification history under. -Test a missing target -**PROGRAMMER ERROR** Unable to translate and export instrument information. -**ERROR** Unable to find a target in input cube. -**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [/usgs/cpkgs/isis3/data/base/translations/pds4ExportTargetFromMapping.trn]. -**PROGRAMMER ERROR** No value or default value to translate for translation group [TargetName] in file [/usgs/cpkgs/isis3/data/base/translations/pds4ExportTargetFromInstrument.trn]. -- GitLab From fd7e7edfc3febe329d9a4586042acb96009935fc Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Wed, 16 May 2018 16:52:58 -0700 Subject: [PATCH 199/620] Added test and changed paramter name to ProductID. --- .../apps/tgocassisrdrgen/tgocassisrdrgen.cpp | 6 ++--- .../apps/tgocassisrdrgen/tgocassisrdrgen.xml | 6 ++--- .../tgocassisrdrgen/tsts/default/Makefile | 27 ++++++++++++++++++- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp index a1614aa843..c7dacc68b9 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp @@ -43,14 +43,14 @@ void IsisMain() { throw IException(IException::User, msg, _FILEINFO_); } - if ( ui.WasEntered("PRODID") ) { + if ( ui.WasEntered("PRODUCTID") ) { PvlGroup &archiveGroup = label->findObject("IsisCube").findGroup("Archive"); try { PvlKeyword &prodId = archiveGroup.findKeyword("ProductId"); - prodId.setValue( ui.GetString("PRODID") ); + prodId.setValue( ui.GetString("PRODUCTID") ); } catch (IException &e) { - archiveGroup.addKeyword( PvlKeyword("ProductId", ui.GetString("PRODID")) ); + archiveGroup.addKeyword( PvlKeyword("ProductId", ui.GetString("PRODUCTID")) ); } } diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml index f8988c2a4a..768729c8f8 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml @@ -30,7 +30,7 @@ Moved code to write out .img and .xml PDS4 data to WritePds4 in ProcessExportPds4. - Added parameter PRODID to set the ProductId keyword. If the keyword does + Added parameter PRODUCTID to set the ProductId keyword. If the keyword does not exist in the label, it will add it. @@ -71,9 +71,9 @@ - + string - No Value + None Poduct ID value diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile b/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile index 51212eb085..a3b3901f8a 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile +++ b/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile @@ -2,7 +2,7 @@ APPNAME = tgocassisrdrgen include $(ISISROOT)/make/isismake.tsts -commands: +commands: $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.img \ > /dev/null; @@ -41,3 +41,28 @@ commands: $(OUTPUT)/templabel1.txt \ $(OUTPUT)/templabel2.txt \ $(OUTPUT)/templabel3.txt; + + # Test PRODUCTID parameter with same input + $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ + to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.img \ + PRODUCTID=placeholderId \ + > /dev/null; + + $(SED) 's+\Product_Observational.*>+\Product_Observational>+' \ + $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.xml \ + > $(OUTPUT)/templabel1.txt; + $(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \ + $(OUTPUT)/templabel1.txt \ + > $(OUTPUT)/templabel2.txt; + $(SED) 's+\PEHK_HEADER.*>+\PEHK_HEADER>+' \ + $(OUTPUT)/templabel2.txt \ + > $(OUTPUT)/templabel3.txt; + $(SED) 's+\Modification_Detail.*>+\Modification_Detail>+' \ + $(OUTPUT)/templabel3.txt \ + > $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.xmlLabel.txt; + + + $(RM) $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.xml \ + $(OUTPUT)/templabel1.txt \ + $(OUTPUT)/templabel2.txt \ + $(OUTPUT)/templabel3.txt; -- GitLab From 312c6b5157ef8fa73fb2bec42c0685ed7bb1c5f0 Mon Sep 17 00:00:00 2001 From: Kristin Date: Thu, 17 May 2018 07:43:48 -0700 Subject: [PATCH 200/620] Replace #???? comment with actual ticket number --- isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile b/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile index 65cf613c2e..faee5a626a 100644 --- a/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile +++ b/isis/src/tgo/apps/tgocassis2isis/tsts/exportedFile/Makefile @@ -1,7 +1,7 @@ # This test checks to see if images exported from tgocassisrdrgen can be # re-imported using tgocassis2isis. # -# history 2018-05-16 Kristin Berry - Original version. References # ???? +# history 2018-05-16 Kristin Berry - Original version. References # 5418 APPNAME = tgocassis2isis @@ -20,4 +20,4 @@ commands: catlab from=$(OUTPUT)/reingested_proj.cub \ to=$(OUTPUT)/reingested_proj.pvl > /dev/null; -# do mosaic later. +# add mosaic test later. -- GitLab From b696d47ac780ab3432753e59b9d537ff75779101 Mon Sep 17 00:00:00 2001 From: Kristin Date: Thu, 17 May 2018 07:45:01 -0700 Subject: [PATCH 201/620] Update tgocassismos.xml --- isis/src/tgo/apps/tgocassismos/tgocassismos.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml index 8e97867c94..9743552c7b 100644 --- a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml @@ -8,8 +8,7 @@

If the final product wil not be an RDR, mapmos or automos can be used to produce a mosaic. - This program produces a mosaic and adds keywords to the label group "Mosaic" that are required - by hirdrgen.
+ This program produces a mosaic and adds keywords to the label group "Mosaic".
The input cubes to this program must be from the same observation, same filter, and map projected.
-- GitLab From cc43e328841fdb5ee6efd9c54676288452e2b442 Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Thu, 17 May 2018 14:35:30 -0700 Subject: [PATCH 202/620] Product Id will take on the ObservationId value if not specified by the user. --- .../apps/tgocassisrdrgen/tgocassisrdrgen.cpp | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp index c7dacc68b9..c7141bdec8 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp @@ -43,16 +43,20 @@ void IsisMain() { throw IException(IException::User, msg, _FILEINFO_); } + // Add the ProductId keyword for translation. If a product id is not specified + // by the user, set it to the Observation Id. + // This is added before the translation instead of adding it to the exported xml + // because of the ease of editing pvl vs xml. + PvlGroup &archiveGroup = label->findObject("IsisCube").findGroup("Archive"); + PvlKeyword productId = PvlKeyword("ProductId"); if ( ui.WasEntered("PRODUCTID") ) { - PvlGroup &archiveGroup = label->findObject("IsisCube").findGroup("Archive"); - try { - PvlKeyword &prodId = archiveGroup.findKeyword("ProductId"); - prodId.setValue( ui.GetString("PRODUCTID") ); - } - catch (IException &e) { - archiveGroup.addKeyword( PvlKeyword("ProductId", ui.GetString("PRODUCTID")) ); - } + productId.setValue( ui.GetString("PRODUCTID") ); } + else { + QString observationId = archiveGroup.findKeyword("ObservationId").QString(); + productId.setValue(observationId); + } + archiveGroup.addKeyword(productId); /* * Add additional pds label data here -- GitLab From 7a222fdccffbf72c36b073c1af6948f98cb483cb Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Thu, 17 May 2018 14:39:15 -0700 Subject: [PATCH 203/620] Modified history entry. --- isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml index 768729c8f8..c7696e79b1 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.xml @@ -30,8 +30,8 @@ Moved code to write out .img and .xml PDS4 data to WritePds4 in ProcessExportPds4. - Added parameter PRODUCTID to set the ProductId keyword. If the keyword does - not exist in the label, it will add it. + Added parameter PRODUCTID to set the ProductId keyword. If the product id is + not specified by the user, set the ProductId keyword to the observation id. -- GitLab From 1784b8209465089dfc030939e608ed474b2bf3fe Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Thu, 17 May 2018 16:11:16 -0700 Subject: [PATCH 204/620] Observation Id is going to be in the Instrument group not archive group. Changed ProductId to ObservationId when mosaicing an image. --- isis/src/tgo/apps/tgocassismos/tgocassismos.cpp | 8 ++++---- isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp | 8 +++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp index d23882769b..6772eb3f63 100644 --- a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp @@ -62,7 +62,7 @@ void IsisMain() { bandname = bandname.toUpper(); ProdId = ProdId + "_" + bandname; } - + bool runXY = true; //calculate the min and max lon @@ -173,7 +173,7 @@ void IsisMain() { QString startClock; QString startTime; for(int i = 0; i < (int)clist.size(); i++) { - // himos used original label here. + // himos used original label here. Pvl *origLab = clist[i]->label(); PvlGroup timegrp = origLab->findGroup("Instrument", Pvl::Traverse); @@ -213,7 +213,7 @@ void IsisMain() { PvlGroup mos("Mosaic"); - mos += PvlKeyword("ProductId ", ProdId); + mos += PvlKeyword("ObservationId ", ProdId); // mos += PvlKeyword(sourceProductId); mos += PvlKeyword("StartTime ", startTime); mos += PvlKeyword("SpacecraftClockStartCount ", startClock); @@ -251,7 +251,7 @@ void CompareLabels(Pvl &pmatch, Pvl &pcomp) { // PvlGroup compgrp = pcomp.findGroup("Archive", Pvl::Traverse); // QString obsMatch = matchgrp["ObservationId"]; // QString obsComp = compgrp["ObservationId"]; -// +// // if(obsMatch != obsComp) { // QString msg = "Images not from the same observation"; // throw IException(IException::User, msg, _FILEINFO_); diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp index c7141bdec8..5d78c8376d 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp +++ b/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp @@ -47,16 +47,18 @@ void IsisMain() { // by the user, set it to the Observation Id. // This is added before the translation instead of adding it to the exported xml // because of the ease of editing pvl vs xml. - PvlGroup &archiveGroup = label->findObject("IsisCube").findGroup("Archive"); + PvlGroup &instrumentGroup = label->findObject("IsisCube").findGroup("Instrument"); PvlKeyword productId = PvlKeyword("ProductId"); if ( ui.WasEntered("PRODUCTID") ) { productId.setValue( ui.GetString("PRODUCTID") ); + instrumentGroup.addKeyword(productId); + } else { - QString observationId = archiveGroup.findKeyword("ObservationId").QString(); + QString observationId = instrumentGroup.findKeyword("ObservationId")[0]; productId.setValue(observationId); } - archiveGroup.addKeyword(productId); + instrumentGroup.addKeyword(productId); /* * Add additional pds label data here -- GitLab From dbaa14e3b34c504711fce769b83379228a727644 Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Thu, 17 May 2018 16:53:30 -0700 Subject: [PATCH 205/620] Added spacecraftName and instrumentId to mosaic group --- isis/src/tgo/apps/tgocassismos/tgocassismos.cpp | 13 ++++++++++--- isis/src/tgo/apps/tgocassismos/tgocassismos.xml | 9 ++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp index d23882769b..1710e0a294 100644 --- a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp @@ -62,7 +62,7 @@ void IsisMain() { bandname = bandname.toUpper(); ProdId = ProdId + "_" + bandname; } - + bool runXY = true; //calculate the min and max lon @@ -172,8 +172,11 @@ void IsisMain() { // get the value from the original label blob QString startClock; QString startTime; + QString instrumentId; + QString spacecraftName; + for(int i = 0; i < (int)clist.size(); i++) { - // himos used original label here. + // himos used original label here. Pvl *origLab = clist[i]->label(); PvlGroup timegrp = origLab->findGroup("Instrument", Pvl::Traverse); @@ -181,6 +184,8 @@ void IsisMain() { if(i == 0) { startClock = (QString)timegrp["SpacecraftClockStartCount"]; startTime = (QString)timegrp["StartTime"]; + instrumentId = (QString) timegrp["InstrumentId"]; + spacecraftName = (QString) timegrp["SpacecraftName"]; } else { QString testStartTime = (QString)timegrp["StartTime"]; @@ -214,6 +219,8 @@ void IsisMain() { PvlGroup mos("Mosaic"); mos += PvlKeyword("ProductId ", ProdId); + mos += PvlKeyword("SpacecraftName", spacecraftName); + mos += PvlKeyword("InstrumentId", instrumentId); // mos += PvlKeyword(sourceProductId); mos += PvlKeyword("StartTime ", startTime); mos += PvlKeyword("SpacecraftClockStartCount ", startClock); @@ -251,7 +258,7 @@ void CompareLabels(Pvl &pmatch, Pvl &pcomp) { // PvlGroup compgrp = pcomp.findGroup("Archive", Pvl::Traverse); // QString obsMatch = matchgrp["ObservationId"]; // QString obsComp = compgrp["ObservationId"]; -// +// // if(obsMatch != obsComp) { // QString msg = "Images not from the same observation"; // throw IException(IException::User, msg, _FILEINFO_); diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml index 9743552c7b..c4f7e7c3c3 100644 --- a/isis/src/tgo/apps/tgocassismos/tgocassismos.xml +++ b/isis/src/tgo/apps/tgocassismos/tgocassismos.xml @@ -7,12 +7,12 @@

- If the final product wil not be an RDR, mapmos or automos can be used to produce a mosaic. + If the final product wil not be an RDR, mapmos or automos can be used to produce a mosaic. This program produces a mosaic and adds keywords to the label group "Mosaic".
- The input cubes to this program must be from the same observation, same filter, and map projected.
+ The input cubes to this program must be from the same observation, same filter, and map projected.
- A new label group, required by tgocassisrdrgen, called "Mosaic" is added to the image labels of + A new label group, required by tgocassisrdrgen, called "Mosaic" is added to the image labels of the output cube. The original label blob is also propagated from the first file in the input list.

@@ -33,6 +33,9 @@ Original version. + + Added SpacecraftName and InstrumentId to mosaic group. + -- GitLab From b2e3e9405f988112dbaffadb3c63f075d7a5b98e Mon Sep 17 00:00:00 2001 From: Kaitlyn Lee Date: Thu, 17 May 2018 17:16:46 -0700 Subject: [PATCH 206/620] Changed input cube to one that has the ObservationId in the Instrument group. --- .../tgocassisrdrgen/tsts/default/Makefile | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile b/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile index a3b3901f8a..15fdd4f818 100644 --- a/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile +++ b/isis/src/tgo/apps/tgocassisrdrgen/tsts/default/Makefile @@ -3,28 +3,24 @@ APPNAME = tgocassisrdrgen include $(ISISROOT)/make/isismake.tsts commands: - $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ - to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.img \ + $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \ + to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.img \ > /dev/null; # Reingest the PDS4 data - raw2isis from=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.img \ - to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ - SAMPLES=2048 \ - LINES=254 \ - BITTYPE=REAL \ - BYTEORDER=LSB \ + tgocassis2isis from=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xml \ + to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \ > /dev/null; # Compare the output cube from raw2isis to the original input cube to # ensure that they are identical - cubediff from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ - from2=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ + cubediff from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \ + from2=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \ to=$(OUTPUT)/cubediffresults.txt \ > /dev/null; $(SED) 's+\Product_Observational.*>+\Product_Observational>+' \ - $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.xml \ + $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xml \ > $(OUTPUT)/templabel1.txt; $(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \ $(OUTPUT)/templabel1.txt \ @@ -34,22 +30,22 @@ commands: > $(OUTPUT)/templabel3.txt; $(SED) 's+\Modification_Detail.*>+\Modification_Detail>+' \ $(OUTPUT)/templabel3.txt \ - > $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.xmlLabel.txt; + > $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xmlLabel.txt; - $(RM) $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.xml \ + $(RM) $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.xml \ $(OUTPUT)/templabel1.txt \ $(OUTPUT)/templabel2.txt \ $(OUTPUT)/templabel3.txt; # Test PRODUCTID parameter with same input - $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00.cub \ - to=$(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.img \ + $(APPNAME) from=$(INPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1.cub \ + to=$(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.img \ PRODUCTID=placeholderId \ > /dev/null; $(SED) 's+\Product_Observational.*>+\Product_Observational>+' \ - $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.xml \ + $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.xml \ > $(OUTPUT)/templabel1.txt; $(SED) 's+\FSW_HEADER.*>+\FSW_HEADER>+' \ $(OUTPUT)/templabel1.txt \ @@ -59,10 +55,10 @@ commands: > $(OUTPUT)/templabel3.txt; $(SED) 's+\Modification_Detail.*>+\Modification_Detail>+' \ $(OUTPUT)/templabel3.txt \ - > $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.xmlLabel.txt; + > $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.xmlLabel.txt; - $(RM) $(OUTPUT)/CAS-MCO-2016-11-26T22.32.39.582-BLU-03025-00_modifiedId.xml \ + $(RM) $(OUTPUT)/CAS-MCO-2016-11-22T15.45.50.984-BLU-03000-B1_modifiedId.xml \ $(OUTPUT)/templabel1.txt \ $(OUTPUT)/templabel2.txt \ $(OUTPUT)/templabel3.txt; -- GitLab From 736c982ddd3a70562d2307ac5fcbece41e8eb4ee Mon Sep 17 00:00:00 2001 From: Adam Goins Date: Thu, 17 May 2018 18:13:17 -0700 Subject: [PATCH 207/620] Added ingestReingest cattest to tgo --- isis/src/tgo/tsts/ingestReingest/Makefile | 24 ++ .../tgo/tsts/ingestReingest/input/input.dat | Bin 0 -> 2064384 bytes .../tgo/tsts/ingestReingest/input/input.xml | 237 ++++++++++++++++++ 3 files changed, 261 insertions(+) create mode 100644 isis/src/tgo/tsts/ingestReingest/Makefile create mode 100644 isis/src/tgo/tsts/ingestReingest/input/input.dat create mode 100644 isis/src/tgo/tsts/ingestReingest/input/input.xml diff --git a/isis/src/tgo/tsts/ingestReingest/Makefile b/isis/src/tgo/tsts/ingestReingest/Makefile new file mode 100644 index 0000000000..4151ad4250 --- /dev/null +++ b/isis/src/tgo/tsts/ingestReingest/Makefile @@ -0,0 +1,24 @@ +APPNAME = + +include $(ISISROOT)/make/isismake.tsts + +commands: + tgocassis2isis $(TSTARGS) \ + from=$(INPUT)/input.xml to=$(OUTPUT)/ingested.cub > /dev/null; + + spiceinit $(TSTARGS) \ + from=$(OUTPUT)/ingested.cub ckp=t spkp=t > /dev/null; + + tgocassisrdrgen $(TSTARGS) \ + from=$(OUTPUT)/ingested.cub to=$(OUTPUT)/exported.img > /dev/null; + + tgocassis2isis $(TSTARGS) \ + from=$(OUTPUT)/exported.xml to=$(OUTPUT)/reingested.cub > /dev/null; + + cubediff $(TSTARGS) \ + from=$(OUTPUT)/ingested.cub from2=$(OUTPUT)/reingested.cub > /dev/null; + + $(RM) $(OUTPUT)/exported.xml; + $(RM) $(OUTPUT)/exported.img; + + diff --git a/isis/src/tgo/tsts/ingestReingest/input/input.dat b/isis/src/tgo/tsts/ingestReingest/input/input.dat new file mode 100644 index 0000000000000000000000000000000000000000..94e4f63c2fc990fdd679152d4216ff969a162280 GIT binary patch literal 2064384 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

q4zOB{&0^61;g|=Zn`L;?sQFg-r#vW;J=X0or-C zzLRro{T}7oN^Z`z?QqDqO;9Ve-SHvE)_z8w?M~)g+nEK~w#VBFY|lK-vCYfRv#r>f zW19@xKi!yP+h37w`>#0P_Plkj?N89&!Bu&-byst2PwmaOZ57G2mD!wa>!y)!+uxFB zD^OHuD`j73`}Rtn?JC=1TjmRewk79_Y;7kM*-q~+ur=OMXnQax-*(Nm0$Zo4MYbXz z3c>Xa*Ruj!yVwF-UeK8B#XMWKpZT_RXNzn#Zs*!+*cRBH$uF>-{WsTE>0Ykwp40iZ z>Yy`!C*|9^{?4f<8YBeU{tmH7*7e#3hU(CKB>>QT`N#v z>vbpJcHQ?JTWya#+k@8&Y`wSV*`Dmrvt^x7VEa=j-}b?dTw6z@d|TbV0^2ung|-Q+ z@@(C%=h;4Q&a)MIl5hKbNxp66mpt3Uu6eeu{ROsq_X}+QwH4aNY8Tojm=)RDRuWVzuo+|~mE0-16CY&#{W!_m}%gtY4dsef+*5_D(t<3a%Tbs^2 z+jUlXw%am`Z6AKhvz_=M-`0Fyj;*XnzU|5Vxwd%?1-1;8dA4GY^KGqH6xe>S&$a!P zop0OSo@09?F3-`+ttXsLZeZTT-H*d(Yz4(8Qwp}{UHuG_wZQAra+w6z=wh^ki zw%RvyZ0F3+wLKb@XSQT^K4hL=Gh+klW!{$mT#Mu zk!Sn6C(kx2AP(p=jDjy&7<_wsBX?#r@0^C!!8^Mf4QA3Zs?O^VKRBPS^W97!H#*h>5KAg z^Oxt@PB6){P4&;Wt=f`n`$9V3_RrHi+wh=#+sEa(wpRmlZRKa>+TL1}Z<}48Ydc?{ z!1k?JzU}eFdA2fTxwdwadA9F(b8Qc$_UGFgT`#ar-)Zp*>3omYr8!m+m<`0z&2r0t}Saqo-Om!eA};6^K3a=3T;)m^K2_#6xn{? zl4on=oo5>vnrrJfITw5uu4jIZ?VrwE+kDYH+Y6iXZQG~h+wR+4Xsh!*&o(0~&vwz= z0^4;KdA1+&bHR82UPvso)o#uM&ryAw4mxKx-&XxozOB1uf$i6?dA7_wxwg?lIku`- zb8X`eXV~_3=GqGQ<=JYT%dr&}&$H!ukz*^xlWY6wYmV*WWjVHddva{~a&v48rE+a2 zug*8G7tLgc+?vjPJ zipO(pozwGeC#n?M))?j52JgtX)%VV`O}ELn?YW<2t93Hh)-?!p#$cXp=9MhlZ3Q{D zB0F+zOD^Zxu2#;oUCWSX`}9w)?eEPwwl8b)Y`O2`*fKxQu{CGRvlX11Yb*XL$2R3| zt}Vl{eA{K_xwe9Pb8Xk~rSxeIJ3UdXqV*Uq=S<62<*>Oz6- z71Mm%hk6CJtEKa8rZwh7w`Y}eh$x1G#gU~8t4 zZ|lyRZ|gRrz&5qD$o8O5p>0fDq3z_}0^67C3v5l!<=8Hl&$Z31&$s<$Twu%UTwpul zP_Avw?>yUwEAnmkY%8!`Yn^91ZA-o_vrU05hghENKi2}=EvW^z8$|MLTkq%CYG&ox zsvgX@y(?X4%dA~stM@F|_H9(5?e58iwukxiY;Ww!xBZb(V0(FczHMe@fo)8BuI=WG zJlmg73Tzh#=Gn5&DYA{Zl5d;(I@dOkDbF@9xWLvqzreQqK%wm$`9j+p;sv(7zw&MW z1?AhW-dAXw`l7&ArI8WQ|A}h&QU3{-C9;?8{%4MYqPk}R-3cHcJi`( z+d79l+lJKzwh^lfZ9Vtp+r9`Yu#Gb`L=iO7ud=w z7uYTl&b8f~m2WFKJI~g!EzfqLM!xN?raap@2lH(WXBOJJ-paLox+ULsqhNvU-H-XU zuZr_*r}O67HU#I{`V|(~z6;B<-Mlu}_R`G)+ZU&EZ1pS)Yo70RHg#5>t+{@lZF^3xZS~eX+lM0gwvU(R+Acm- zV0%=uz_xXJp6!{wd|TH1T-)#N*|q|{xwcPl=Ge-}Q$+rE!FWXl1V~*{A z^*q}HOLJ}S3uW7?nC99xn`PTh;?1)?CYNoir=M+GBamY&KQGsIQ!nI>_D7$xZKprZ zu~ihvwUu+uvHh=;YrD}s+jidUTwA_Z*|v^1vTd*B=G%Ug%(XqsoohQeDA!iTDcAOg zbiVD*z`hS+KnPI+d&;M-OT8k{(lGH5Q4FS2f zTbpxiTU>K&9~9)--Yv|v^=HkoEn1dio5!1DyZ=g#EvrMWZOGJITQ1QYTb|||+qLO= zwydGKwpC(Tw#yoFZCT`UY~S`}+uEPVvAz7Yz_wW`&$ih*-!^tD$tje~1gwUskTIX-b|g z>#bbd;QP6@eHwYT3)bh_*2m}Da_`Nt)sii+J#U$BTW}q;E->F#N;%*5@QWPVn=^84 zZ!_oFE-x>zT@s#WyJuRSZLw;;t$lvJZNFE(Ez^#C+w?EFwza==ZNpFJ+vY#bwN>va zuucA#YkT)uj;;RWT-zuAvu$(Zb8J24=Go4y%(k7*ns2*7G}rdU_Z-`s?{jUJ&CCVY zPqLhOwtKec*$TVm*}i#|XL~*;*S2t$(Cz-=TDxkD`URx7l}MuYu-Ft z8L1rG)R;Wmt%CWsk1pie>cwZ(8}~+MHwC{5{v!bXUGDOJ0GkWI?X&jof_O&YWCZ zsi}FkpZW4_g(N|1{&H=nN#)t5i@@%``8)HtZAOD*z|l`Z_r*Q z&H~$em4&vvpYv_kMdjHZkMB^e%qXH8~;7W);KQLwmB=$Ha|GeHYYsCw&O;g?Ka~A+XG@nwx<$u zZA*XT*{YZ4+fJ;{vu)m)XWQD5Z@Y@Cz*aLj&z5sfzHP(XJX`y(`L<0ixwd5jg|-b# z^K5;)a%^XN6xd#ypKlwtD%W;>f1YjW{Q_GJ#UfkT=mOhI;rX_YA`5Njy(qA43n;Sv z@wUkJiC=;353>T>fcQe&CARstqAHN}Vu$zS*e<-1XS;S+j_qBZ0^4iN1-6qf<=U2T z=h{lY$+uk-m~Sh;FVEHxbg!0Wfo+>Xp>0ZTzODFzeA@%{1-4l?3T)N3g4RA4*(!w< z*t%*L+OBfQv-N*aVEe---*!!6uI(+3JlomNb8V;n%d_3@muH*SmTwy@RA_s2S%Izg zo_yOL-y+-T&3U$0&g9yz2rRUn7@Kdqowv}|@L8d)*1Q5+!-@H}C;AI*Cw?ffoy}Wl zyDK%{Ha|AsRxBys_LxSlt^0`r+rL|KZI^#5uyye)u$9m#v|W&%58l(j5>RBDuruHG z%IN~z&HsvR7b+Ims^{k0-gnIdw*xXl3vJi(7uwdW$hU3XSZMnIbO(!2f$a&qeA``a z1-6PD`L5PS85A0^9A23T^MtEwH^YztEQP zR)OvIbA`4+Ecv!IvkPr~E%I#>atmxfu@~A#sTJ9-uPLyVZ_2ZM98h4pHK@?`(e*sr zHHn3`*30v4`|S#CHzwrUM*YvT6}8W|{l$@Q%k!_mw(vy0?aF6)w#r2XwhUtVwk!d8 zw!WQtwi8a}+g^3cwS88QZ|i@&!1g3Zq3sNXeA~xT1-2h==i9zGT4<{~CEqs5pupDm zQ=V;lWv=b+BYCzm8U?nd;RUvGXY*`JHssm%T+FdewaB%#ew=G-pPp^|_D`Oz!rDUH z8U6*foBtNrPWzu{yVxe*mVaM?tzdqhZQHqA+w`mXwn~%oY*|uw>b8NTq z<=DD}WZO>H$hJN5Cd2lEO|~t^+-zIN_nEdAB(rT@0<&zd$7R{7ZOpQ@OUtxv)5*4- z@g>8SgC)y0S1Qx?hfSt!;fGAyb5Ys0L1)u#JD4+UJ#S~)x=qWr4KvNQb$Xs*>wiDf zwm2x$_WIi_+wD@>whoVTY`1ge+OFctvUN|$w#^C6v}N0sW2-bT+qRxH$M(^$EZdyM z9NS6iIkvO^&~-%wJXcEdS{;PwAp#K z|LbyXZ-?jFTG-{-GIHeFJ~^IeySp^UR;nq>cIWF{+byB_wsQMHVV7&$QJih7TaaU0 z!IfvbwJ_Iqg;pa!zCOqHNmZ`xytO&D ztgCZvy_e_N9$%hodzT^CHnl&?mR&!`wkjsq_F8hTt-EiI?Sa@_@c4O~LzeAgwH(`o z#aXs4yE1GK{?D{Ec${bZfho^c<8P+z|K+*18cf-?96>p@3F+CkterWw?Xo$x76nga87F1ix+mw@I!EW&ep#Jk`|xhI?LX;k+x3lEw(~FL*gB=<*w$ub+v-c_ z+P+}UvDNvWYkMa=*S5?&+xEc&$l1sl-8r^bH)YzMTbXUU)h)-i*)`jC%K2>DU+vkp zI=(r!H*0cil_%%g2ASp9+K1-aa_q~tWuBa4`^q%Wc41PEZNZ)#TeFqfwnC!WwzJG~ zY~{joZ5QmwvDJylwSAS5Yn!$|%QmSz*R~}%$5uEZ*H)7;%XXG!u5G16u5E%C?S+=c*vu*VRGi>K~WZKrSW!tvz&bBoW&bEEzoN1e6pK1G)Da%&f zCD-=wl`PxTWm&e1{j+UbB(iNkyQQ+AYJjetm}RD!+7F zh6kCpYNs-7U2mk@2J>dv_T0{}y{DIDyDc))_C#)mt(0rI%@YMj^}gYigFQzGkLvqC=+bqo_>V-=&$hTYEBX zb*WjiY= z$M)9REZfgHIkswk*|u9YX4^hJnQi-PZjP-+MviUtlWg0V85y=`=j7Oi2V~m@9nJxt zWigpQ$9Ch@Y};$a*|yz3vTP>`X4yVEkZs$%6m$komTl0_99wVAY+Es{9NSm_vTXVL zvuuxV&bIwtk!!o+Vz%vu#!TC`igeq}%QI}hOv|#}>z!q5mz`rPZ=Y%Vw>i`HQDd6z z>>Zi53$rq9W8E`sMf5XlZ*R%8ZMdFctIv>TtMDw@sskdg?n*7YReP5q#YrQ@*;ZW6wLQ(1Wt-)hX{)Z7Y5Pn!!?ry;%XZ1nbX!J;Oxv8qY}-A&*|t{g z*|rOEGi@{8W!WCxlx2IXJi|8KBg>ZGBinY5MV9Ts_ZhZpHl*3g9?h^dI+<>pUy@<_ ztUkkb-LEuTf4g+s+U2RXe^b(J#V2Lj&Rw2i%i@<|yL?B6t+qm@Z75s1?Yf{0+ZjjG zY<&-B+0H(jY3npQ-S%>Fy6u|CEL(BE3|sL_>9*{SS+=<$nYJ&QGHu<@XW4o(_MKgh?Zw-C`V9Piu$F}-NuI*XZ0^1Y+a&4zS%e9quDzyDGG1vCns$AQOgnZl0$MS6_ z{miw^PtCUd9aLcZqAkZ(bwjT0T$Vyx_f>he9PI_RpZN=H*J>5mZb&Y$6}q2etJ9Qk zTb7$=t1XmoTXH$yw#p;VHYq>fb{9{+t^2wH+r7aBw$Y&b7(DWA1yu`d`%V_v8Z6GU z{g<9=J99_AZIf)it)FC`?aD_5wrk9DZEyPJ*`}7{+8#fjZQE;-XY1&nZJR2cV|$M; z-*%&Mo^9ERd|S6!xwb2B=GlHeo@-m%nrHj|Zmw;qN}jF##BAH$1-Z80=j7RLyIf$K zcq9)ze)id@z}ECqp6x@wJlmb|dA7d~ z`;ueJ5SwGG+n;MImz-Bp z26N}wE)UAH-PV?G`}%8+?f1{wwlk*Z+WyqZu|2aq$F|-j+m>HG-_~q?o-O;WEZf~I z1-AK?xwbnR3vB<2v&h!Ty3qFV-CWx+!#vw-OgXmPGKIFGvvX`e zH0RmwU6pUk8(d&(lbvtNv$nw2&?nnArz*$R^Jb1M!?ZkGqjmYVF+BOU_4D&>rR8#M zg&MMLGg5PG^@R&;!=-a1+1{_pwype~V_PE)+P9En%Mz1i>$f4>R#QI9_Pc9_Z8qpG zla_4TciGvt+_&>=qy4jOeUx)-GePkepJRJ?Q?{-2>0Dbbo?KgIzFb>x%N$!q!(3b2 z+FV;dj(l4Q#sb?TQhB!XPv+a2$rac(MCID9XUMlzHOjI5dLzd+a8aJ^YrQ<%)XBNF z)mL+DgD>aV{=S!ETQfh;cDie}?Ps}M+tZJ-Z5dj#Z5N6a*#6#}XKVE{-!}Mvk?qsQ zVq4j71-9C^ifrvAifvuIi)`mFEVNzzzu5L_exYqgMu~0GrD9vtz#?1U%0k-?=>pqE zfg)QGjzZi2?fJHsWAkn2Z7#HZ-cV?JwX@JRaYupe;ow5s_qXzFV@wNdFWMK_T2$uS z&TB8UJ@u;4HjJ~-_H1>5t?i@&+ZLu`TU&)<+ura(+tSO0wxu(RZTFiN+umU;w%vBD z$W~mU*tRXE$X4?~q3xNOCAL0WOKrC-EV2E;SY+Efx5&1Sp~&_~RH5w@`663sg(BO? zwS~3TeDi_+W)hV>KZ7Z;K+gxaCTUl(Y=T>6-(W%(BsiVl&XLGUb z9LplxOLaxIky6FBmb#_3yB?R>PCH+0%a>JRd-qbQZH{w^?PQ-)+sr3rw!Vg?wwdK+ zwjm!&ZI>-BwzZciu?;>`Vq2MAVteOTzU}|Rg|^>9ifn(&7uhoT7ui0#k#8H94>{lB z@{c0h_tu5BhyE7WZgeiO)$c8|mGUpL4P_~`J+!LGR#T|RHea#GmffhxR$8*eHaM=p zc1>xK?e__VwhPx3+CBvNrLowSo z+xBHewjKIKwp_=H!1vEbEGn^W{8ePT$FIaTytBYob3>8s^^JwLVwQ!rPASEV@0;H28Fiko)y_f zF&Ej+-&kzRxTx6Hy{6FCSE9)FiBXBI{-S)_R)-SXf9pZ}QHyLnOp9&LeJ`?o>sw%Z zaAJ||j3b4%V%v*t8J3pV_RAI7dROGyS}5n+rb*}9nnvZ?9u6$DUAd&d_El?>w1%2H_i26X;GRmG9#$x{-MX{D){>#fHdL#`_Uo@=+n1jTY%Nj?Y=w>%*zRpDu>HzaVw?A_ z$oB8PB3sr61-7vdifr|3ifnU0^MFiwwmbG0+R8E)*v?s9Y^!%S-}b*}f$c}`0^9!9 z0$aDKg|;)@@@((*7TI>r%D0X6EU-PhA>TGItiblf+d|vZON(rmSQXjY94xd=d{kn4 zk+aa2C#=|3QlZ3F`dX3gC(UBpevJ~_!+FKFJIYFI>-H7fR$MQ%U9_RtmdmWbHi5Uu zc9wXt?U{}OTh00++bgRIY#II**s3@d+8)m-v~9bcYx^xX-&X8!u5Cj{uB|3lzOCJl z99y-{eA}dxdA2_;=Gne~pAVjIz06o-yLEP+?W$9GwudzGZ71>M+7_l|+a{+L*w)nL z*)EUEwe`M{Yx}!1$JRhC&-M^suI-iPJn(tAnG14kllJG@X4d7|zA?-LuMzmymT$XQ zz0h{iiUQjy?S;1SGDWtwd-H8WWQuI7SLWMtCg$7r1s2%)Tq&@XYZ+lU!z&87Gp6y$iLfdJExwhVS3T)e#7ufzREUBvKZ>z+SV_PUzV5=0C zZ~J*dfvrz{zO9^hp>4w;X{bvN^DePVKKovrh1 zC!Nl*oy?qL+a#H9yK8%%?Uc|wTV?G$TX)MmTeHSI+jZ@^w);Qk*}l7*YwN~RVEb4g z$2M9l&z9#)u5DR=uI(Dbd|TC(`L;cE1-2r#dA3^{^KH{-=Gj`G$+NXi%C()5USRw2 zOs=i+=Nwxbt880q`E1*RhjMLGGxBU7EX}cfH8;n$?rOH}p0pg>mhK$etgE@U?|kxX z%Z#&Z?WgD19(kQ(`)ygi?TPETwmn68w%cNJZC6L<+upyIXS>=PG@g@hn{ceaw%IDr z)>FRFHgbEu?U{FZwtp;gZQqyV+y3{?vkg%!w7vW_$2P+aVn(xXj_tgjTw5u{Jlkyc zeB0$8^K3V-$+v9_$hV!vUSM0Vk!L$EC(rir`#jqTiTSq2^YUz;oXN9|{gr3?@kg%h zb=O?m1A37AdG#CfY}=;i+2%JD+L~46+S+^M*y^3mw|(ZGWc%-Io~`0r$iApmFS2d( z`*UrXxbtj%M2l>*baHKLKjzv_`IT*JFfGsa`tKZDtF!sGV)JrsRafNMo|4V6ow+B^ zcHY8VTi2+3TT`t9+x!*zwl8jF+y0Htw_V_vZ<`XBZ@c4ho^7d9p6wd5d|R8PdA5J= z}NT)Z|~&UHkjwxTJFsT@0)*gD%WvC<=bn|Wh zi{#tx-=1r0mX&LJdsV)z+1FfKkyH7$i=+!}zx~X!o#|F!8<>=9TlqiN_Ge$7ZPUy= zTjzIqwl>~*w$od3Y?~J3*p|%Cv%NPb&vuqzp6%bA`L-v%=GaDcXW8ae=h>bR%Cohb zmTOzFEYJ4jhdkT9139)Y9%S22IG=0Fb127lesqrQ1?N255B+(zWrex6YO%StS5mWW z*Zt11J@Gl)c1L|4_@0QG>$$cEw&mI`YR$FX29e;uCri6UkqRu>9&-y&u zLce_5{!RI|xng;?O_uq#na^@;`>peAomOPq?q8W_d+Bekt({knt($9}?U|xH+l32q zZ4*A_+sa-qu>&b8fr zCfnBKOOEY#u0q@HCHc0hzw&H_F6P^QnO11~x+T}vWm2xK)zW<1-kL(&b;0?z#rg%d zzQ6NrTes%fK3`N|%cPNSd&V@^RXAFc~QQtgmi)Jb*Fq=uerIlOQz)6Mlu!K9&gCAU2jrg z+kd{;_KkIct>d43+i;FTTitnuwo|(bZNC*2+cLKn*?L_nu$A4EXM32x(DuyLT-%HZ zMYc-o@@?n!f$kB^v3--7Z>ttoWVVZKEo3Z4*J`EpG~J-IDTb8GQ0>;}+%FM)l>|K7W&I zTYojn_Q&ZQ+X?E~wrtn)ZQDHZY@2j)ZKZzZ*y@_+*t%QifyXIWC*|6@Fz47F4au=x zsg`TI=}fk5dTXxje}*jEJf~dSjYZkE=}Eb^L0(z5{-L?H+wNuCGHuSW4gZ*Bn-`d4 zEBh(iR^KDn_MvQ!?F*k=Tm6z8TmEM`ww%JbwwubcZ9n_u+4e2TvE6<%&o*5y&sL~2 z*Oq-*zU^#Ko_UpT`_nkjHttk`t!!$Z?F_bj+wVoWw%2mDv!#>CM3Fy8V^*mdh z8+o?VOml6I_2tN;B8i`(Cc?*4=KwsR#4Z1Wc9+IC*bwtW|tYkRLe&(_8*&(_o-+xC=I zuC3CMeA^Ggxwe-3vu$e^=Gvxz$+5lRkYk%Ao^2b*m}gsXCkH%Esr)+ER!b@0cA-a} z?e)Gw+Y5X1Z7(m)vCWCiwVj)hXZwOb&o)pa&-T1_uI<0;dA4tU=Ggx7%Cmh@mSfAj zJKwhIUaoChf1d5qv-!4CW_h-sF6G!RmwiAa_DE5lt@W#1TeHAC+iUCdY@@E_fzMNUzBk`C z&@Ina@=(655ML2^jp?8Jxwa=b@@!2Ri)`oJE3kEy%(Is(uo@B-WZ3AwiaEAnjJHs;#usukG!?aH_H+mvgYzbemGMK<5|TV=kji9o(>Ie)(G z5u04w{^(rWpb7c5s~GZaeb?mLz7or|-ToujcHiMV+jS=Swl1zYwtL^@+WIQx+CICS zXX_f9ZM*Sto~@5{zO7(ozHR!GEZe4>JlnF0d|M@#0^0+bdA7Hb@@@a7ua&3Di=h)`o$gzFCDaUq^S%IxmY>w?hy*%(d zwZP&WTPv7@+xEO(o-Kb%j_rrrIkww2 z<=GZY&$nd?%(u1R&$acsm210mdA{vjg*@BSb-A_{T)DOzOLJ_`zt6Xo_Rq7`{a#?3 zsF7>iJ~7X>Br?zT?aDmcdcj=V;~hD+yn?y5$A0G77R}1By~>zpn^v1+YyTHi2j<#_ zpUkthiOjZbnwDpKPBO>Ve{!xZqj0Y6m56*>k&St_AD`se*8MK9UGg%|cFCIp+l$+C zZ8tII*~)Itv+a;9uCf_!yJKr{VW1;Q(@1V1?^KJLEmu)LF zFW0v0SGH~Zkv!WU{du+z;`3}<>vL`GnsaRTvE|v8T+Fw<0xH+cb8JHla&4Di%(Hzn zEywoyo;=$-#<{ku74mH#T+X$fqmpCGJ2TJLttroTQ)iy-^V(e7@4IqrPt4D^HP$Jx zl@-geebAR@YipBldoU&6R#7s~*5PNK?KjhW+w&LmY!$TgZR>>!ZCSZr5H*Y~M2G+iKVq+Lrs~+e-5n*czP6vDFjGwOzrJ zXIsA`7rfuvuqw~C>}rnf7aA78Tl> zR_EJ(`H*k>KDE#`Nu$8_@b*I6egBJW-PsFm|4S9x_IniA>aNeXwbm}O<=a$f%jJ=0 zYcW07)+saJcGdA*+kaVkw#E#F;C3kRFAHt|bQjvb zzExy9>q~*H)7}DGNBsiZ-;WDyPaG<+tz;{-ov55|tL0N@Tc%rJ%ey7t*4?$h_D)Tq ztz&VX?f!}a+wb4=Y*)O`vz5MGVEdfCz;@c-T-)pU`L^8i3T>T43T@N>qwgz8vY;WGqx9#~*Xd7-{U|VksIUDX#ae-~{={(zcbMkH5 z1Bz_BC+FL?>@2W7dm_*FW^9q|!<2m6{}&2ue}@*>9=wrnoB5!?*0ep(_FHqFEx&ZW z?VOeQwqFv9Y(=gW+NOvU+fJQYXxrqOXX})jZ`&~|-*)Y+Jlo}Rg|=zs#kMJxdA14W z1-7563T(fX7ubexDzH5-oNv2~C*M{>yU=!nQlV|Zze3xS@ddW=`31HQSPN}$T`#ol z^)9qsw6V~3l1#qsyh(Ysvkv9imPHrZE@dya<(4Y2^*>QyyW>xut;(T%+Zp`%wjs9* zY_EkD*ajTWx1FG0XzSKgXnXEcuI=WE0^1ie3T$_F=h=ShE3{qGoNKF{m2Z3Bzrgmd zM!xN-yZN>ivAMQWbMkCkFX!8yUz=x}IW5n&$SKeE!}WaITHk!z3Ey&UHBJ@S>VC|# zT{x%EmL)0A_S+NCI=Ot?$kq9_>mze*Z-^AwhP&k1PIfD>jee15%O6~5d;5Ey?dsbF z;B~+%>;<+3)rGcSuI1Xk&?vC2f0%2#NIT!weSVJZ_O-dTcbal-H?`;4-nP!M4Z5FW z`^+lWR_b@I?aR6x+wS}v+bvIWZ2OpVZO@qJ*lyjPYg<;8YuofJ)7JQCwyiu%o~^fQ zmTh=wwrxR5j;*ahmMtSgj;(u1wr#<>Y}o zK^8f-WiRt=<#Kau)0pyYzkB4^9t_L1{ZpG`E1QsGd%!fuw&{Jg?d_CY+Y@HFwy^=Z zwhF8AY_~7VvJFnivrYP(W6Ru@YrB3@uI(DLY+I?_S+)x6b8K%g=h?3On`yheD#Nz@ zSB@>~vuxWok4)Q8muy?FOWC%D4>E0YEi!F0-)Gw<*yh+8cxBmsYR zrIl;D+bzdd?0B}V`hqOm#Vt9usdhQGb`@E+QnRvbgRF9F-Hftq*{9~(-d4=9-D{U? zyWvK*ZIx8EZO6$>+bEAL+qFX3wmt3HwsG7!w&!wlY$t8bvemkqW4mr?wynnYEL+Vp z*|xi^b8P>_W!om*$+ew$Ajfu-Qm*ZM{eY0&X1v72Kr)AmRzm#P=i!sM` z)~p;`uY?@i|2%oN`EFUZTIaKD6BcFL=IqP0)qS01dn+=>*2^=~mOC@kb`@Wy?LOUX z+mDa3Y~2rM+wv)A+b;IZv3)r^%XVQsFUhc7kdt9snw(|(B`?EPsXNQ|l0&Agw@0R}(T8+fW}gh(D4A^A8+kdl ze1=)J>tb?jugPZFTD{1&T_>Dvdt`o&t&v%_ZP>JgZLdwww$1vQZENC` zW4q5M$2QU~%QoX%T`}G%hq~RmhC*IEZb_<9NP}B9NP~TS+*O@b8SEHX4yXcn`!Hi zlWto-Bh$9uFU$7Rtt?w6$qd`J`B}Cqj+wR`d1hX*>04wk>yHjxB?7j%~J6u5I<4bX%YGnYQk;vTRGsvTbj7WZP!wX4}?$ z%Cb%O%d%y1&#-;Wlx_QScDC)+-&wX-J2P!(t;w{#)stzPE0t|~^m~?VUVetHba{sD zTH!3)msy#%@4jc+I(*Nty;6~7Yw|GDcBgHYtvpYL?cOPwwmrQWw$sBiY(LM;vXy4d zv`u-RVVlyBZhKTI(^fVw-S*qz3|qUa>9%H(S+@IUrrVzVl5Tq>HOscvIm`AkXdQ%H zhOM+thV7|}Ok2YhnYNE7X4p#ErQ1%j$gn+VnPr=|ILG!0OSbJbp)6bRx#_mKYcg%C z-salg+mmfu6Od*5;Z&CGC#Ec0?a%49=YD0{mY>S9burJfy*VMr_MuX??UAZX+kcy~ zY=Z)_Z0DC}*#^DOw5<=%v~|eLv0Z;6(^kAa%ht3m%eGZN$M&FlmaX3PY+DtcTwD3D zT-zqceA{=;xwfz8M;Kjqj; zq~zG%os?s1&y{Wadug_<)6rbp&gHqbCcHVeJMU)Ma^A_Z%|DT2doMlPw(4Jw?S9iN z+YgU2ZDaOl*`{91vi)kBZEL5IWh=fr+xCb>w(Z_MS+*z5vTSoNXWG8`oooB^RhF&h zjT~FPXF0avRhhP7@;SC!ICE@W6tZml`SNXxxN>d(N#@wj+mUCh+M8qh;z^e6`>ENs zCna)ig%yYb1-6CH@@!S-W!oEcyT!6?Z^h=?mX_w&YFp&lPG!%tUF4fAm99s#!Jn$KSar3fm%MH_qXnQ-Yz}DYrEiJwrxmaf$hc4LR+boxwg`C3v6A! zWd`}S2e`6qpDfI=mHe4yJ9TBI z?XKP&+rVWxwuj_%Y+q>Q*hU@Cu{ATwv&~mZYBdoCi!*3CT6_6<*-ZOHF@+j6E{ zTe)}nwryaE=%lsT$_kt{2zoj|0PXx1VAB5-FF4xYs-Q=5PyR#w7R;wzHSb$?lC+qF60 zw)k3+tqoJL?RKpK+eU)|Tkeg;w%b*UZTC(su)QH&V*7YmiEU(5k?lsMV%zU;i*0Xd z71?&`me}eUm)dGQF0d6nUSgZMw%C@@w8YkbTd8gEjuP8h!X>u#ugh#L@08odEh@HM z9a(D2sb6AyYD=l@l$2uI+TeWKzgr4y{ap%ey+0M&s)ZNYUQa8sr&mPNMu z8;We>Cl=d^-YB&FwZGW*QD~8^a7dADHgA#bcatL9`7I^3Z&QkFV-A$qnoTLPRq-ga zeN|9oE8|mQdq1SmR=%>>_Wk2x+Zooyw$r3bY!3t!+5TxMvNe+|vehsxv~7Q0XnT=A z-?n{1fo*O#kLDwifzv&7TX?vRAg&;q|i3dq`>x^c8TqkQw6qH z1&VF$d5UcRbr#xg?J2U2KT=}5Ii|$cU{0|uJAbL|@&|>sb+(1JiFJjxH>VcZdfmte z@0~MdDzbfPUuly7^Hwb&MP7ocukk*#lWv2CGnv8}gck*$Pyk?kv{BHM*3#kR9A z7um9l72Eb-DYD(_T4cMPC)f6aQ@-uR|M|AFrSom&rWD!k`Ce%I*rU)k;7OjXKzqJz z*S37y%UOlCb&CsZ51SU+zAnkLJ-4#Rme0Jv_P<$?t@yhF+o0w`+v1E|+dA(&+k#p7 zwuuJ{ZToHVY)zgN+HQ6!u&uAjx1F>--*&oJzHR&RJX_oL0^5xXa%{On3vCT#3v8e6 z$hZCZx7e2Ddx7m=^&;DOLix6i6N_vmZ{^#1ek!sxPAjl&5Gt_UomgnQSH0L)?^B`e zV}=6T%Yp^A5nBpvw`vyJRwx$Q9yKemeI{LCD_d7;JEObU_R7y<+X)Oswu_mHZQC!G z*#2BsV!Ll^f$j0K0^9z=0^5TLIkr1q<=f_6D74)nS!jFtX}+!MtvuVjZ8^3Z4iwn- zOf0gUcro90l5DQ+>hwZekDx-^O)m;;Yn}6LbsUOq1>fY`axX5jb-7#sUh}bKPN8l1 z-vV2`)?!{t{2$83@^5Q{ju1V|4Y8@+GjU}J-J$JRp z*5ymF?Z#BW^KB>i<=Y;alW)86Sf1?~_B`8JSMqGF_U74oywA7& zc{kTKu`172^mo3k*pvd>#)Y}I-NU$ zcEid7+tmI7TM36E+l;M+woPsMwsxF_w#^?4ZBsuN*fx3=*y=vbx8+?_WLtNjz;=IJ zk*)lP0^9E^3v8Vpi=D6rk8TVUJjo^M6cAZv{?Zo6l+r1VAwlnq?*j}|N zu+8Miv(=tcU>ob6Z+nWl!1ms}eA@)MV%z1(MYi{Y^KD;T%(wk^zR>pT$z0nX%ZqFc zrxx1o(=W0W+)`lcqf%rm9i4BxudK+{(6GSv)7b)B1JwfC`%wk94j=Pum(0tv{p(z4 z8|_|T8*f}_+tQhD+XUL1G&kQ?U{0>B{@pxV)ulPMm+t4-J`&8e<=LKZtMf45HZd*F z_Lg>@ZP4Z%TZgMTw!fC-*;f3>vpsn{-?mAqz&5NU&o)Xt&z6&?(6;eswyj-CzHOL% zp6#iOeA_z}*|z#>dA2+{xwg6?Ikumk=GgYt=GmT!%eM{OoomYi8V7iiYumCR$F}%T zzU}LOdA5OOdA56Fa&0#}&9ObQAjftQYmRNyhdkT0dva_|K=Y}$@@-!T=h>d$TVQ*4 zdY)}Ya-Oa3i#*$q?i|}&q1m<~pR#R1_Z<5M<=JYhWZUwt%CRl}nr-_kJO?aS*O+6= zdnViV)`eVK72N{cZ;wG|>Ezl@2AykbkZYT~G1oQ^w1??Yp{?if0^40{a&0Ao z^K5Vb%e9TXR$%)#Ki77Ta-OaK_I%q#zjAFS8t2)nZ^*M1x|M5NJ156>$IV>Zt1k*{ z6F%hFGG^u39%0J2{rf4;wk09Yw*Ppp?OOjr+sM*fTZTWmwkxI<*gAd4w^ifFw>@ww z&vxUk0$cxt0^3^~3v3_GF0kc`%e9>sool;jajvaHbe^qd6X@>WJln4a@@#dP@@(xv z`&_ma*+#qO*`C{y4?aipR!)Jf@0NVq`^WNZ7vIjcJ$WS8_SvBv+gGZ2wt^?~ZG+_V zY^N3E*}j!30H5EiYL{=D!CqkN8Bt{0wYI?av0|Pr>t4|MwgOw5(>b=f^|`k9>ho^ZGu`<`z>Qjy_w_}d&pS(QVONqI*>@0bSvpRxvKmHeRy8Hb*4S zb~b;Zt)NQ2tyV|A?T?9twu%4pY=!gkY%@gjZFd>w+GaUG&W}>A&bPIHm2VrkJkPf7 zX`by2@dDesFY;{9rRUpbr{~$;Xw0>(Va&Jn@Xxp1$C_`umO0P1XllOg&A=ktqwEE? z`lfldh35ITA#4S+J5=k?^-S_S3Xetws4TPTrhySF>Xc1}jV?Ni4*+k38gw$W2Sd$ICu^|JG9<(K5! zO5D%04L_7?8xm7!>tk48+cYEJ_C9mIZJ%hit+#5vt+q_Q?d*(PTaMOT+uhF!Y!y5U zZ09U0v=!KuYisr<*S39auB|{vfo=EkB3lcmeA|GWB3u52g|?A3g|?+7`L>pC^KB>B z=G*RU&$pd1G0)a=MxO1=vw5~J8uM(YX6AwC0R_YJYzU?p2{lH$JHP(f;vIh!mQ@-Tc?tGnZE1r>WyT~)&_VLm@+m?Iz zwrNibZ2$btx4o{AZ+mA|zU}IgY+LyidA5_E=GzKL7TCsu?wu&lwOyN$Z@aW8&sJ_> zo^9rzT-*Lv`L?S%^K8XA@@%^$@@&_#7TFex=iAmb=i5&Fm~UIioM+qVSYW$ZDc|;o zRi15lM855ltp&CwN_n=PMg_KkD{^g5b?4hIG%2t>qL62Mzox)eV}8EvY^%KrZNJCn+on1c*!~8c zRnc2$n_H1*yELP~c9(LYZA4|E?JI?R+Z`c=w&JskY&ShEvh|WKv0eQl-}ZG?o^9Rt zJX^in`L;*G3v6X{3v5pd71&;3%ePGl&$qP_F0^H~F0kF*Q(!xHM!xOt!@0H%J-N1; zvkGjFSr*t9spi}ISLEBWhUeRMXcgGn&&jvl^vT~$T47cvWM z&sP@M8q6-RZ91NBn|7> z-!^Vtp6$O|`L-#~IkwJv*|sw+a%`s?W!vV0&i63Q zwLS1T$9DFNT-!fQIkrOXdA6Z*^K88i<=BQL=h||<&$bo6pJN+Xm}9$hdcN%x>0DdW zf*ji;IXSjg>AAN09Qn2z@^WlfT*$SJNY1uho|R{N^JKQ||0}t+HM8?=`R(&;SDWP8 zR%qth)}GC^T_>4sdo(7?_Q<;&+wZY}@0Da&43SvuziYW!u&- z%C$W;DHnYH=)!Bcw%@dJZCxvJY_GfL+WuG1wl$fQZQJlU+m_8c*S7m$o~`}2JX@cR zT-zhNa%@Zd^K2h%&bBRon{9jhd5-P2-?_FW5;?Z#nR9JJ_vP5Gevo4uX_{vno|a>q zzdzU3V@a;HiseC_VS86+ZUzzwxBb8 z9xceRov|cE;IU+r78*Y`2u>fcGpRIO5s?Ex?-MJ~x_Tj@^TPeXD+naiMwvGyUwrj-lY-jJ!wVm}d z-k;J^8ki{^i+z z)GV-7mC3X9@+h!XKA3N7c0AX1<*__lkDxqT(W|+(UD5frwM==oGe75p*Ehc4DX@)M zns58>Z@z8)f;?Lv$$Z<~iTSo0B=T*eHS=wiBl2whRr75dy7O$$D(2eW(9N|?2+Fe! zjLEaj1l3I+^K2Ct=Gmrx&a-`2oo8#>k#8GYnrr)QMZT?nVS%kgPN6M7Pp<9W-Fdd% zH}h;=c=K(S9?7*0kuI>E|1{6`+}u1{Hr{+&$HO_ckKX0l9@(E~yZ=j$ZK`9o?R58i z+YI$=+v}@xY(wtm*ycaXv5j%dvz_uS$F?gd$5xIh+cwoC-!}ApuI+}40Wm=YJYj7kNeD~(fvw5~L^0~HbTk~wW`EzYon&;U*t;?}>?#{E-2+y-+ zI+ky1;-6=09F%A4z>sTu`h2dfrcHtEkGeeDzEgR&tf%vA&n4v9GW^Z6wW!Lm)y~ef z{l=JYd+0)et@GO)+dVsSY+ZcvY!l)j=Ur^NlVe+&lxNGNpKB{#l?OgIUp73)R^@pv z_)e}`u6)~GuUy-k|8i}QCFI)PTUKD3y1l^GA}P;y#^O9%(|LKei5GHh)AVy~7hTM= z4SJMg`$aw9w)k0|E&H)NTdBSr+kl>Y+oYy0qJo~_Z}9NV}rdA8y=@@%(7=h=pE=i2HkNp;app@^&cK4oK+wQ7-TW`Gr+Xk*YTgBJ8;Qs9T z_&i&qH958>*}1mjPI!u74|9R7 z{Ja8NXUPKFvJ1Jk8FdA=%$xmponC1B3$(6qLxJr-%UoNf$)Gh61-A2&@@*|a{mGxXw(F+k*ecz~vn_v- zZ5tg>XsczFYb(cDWE;|0U~B(7&(>s4uI;|_`L+qd1-7pW^KH{=3T&C}3T(rt=i92! zE3~zlTxdI8zR33Z=R#ZAqo6f!g|@E8^TBP7g^Y!^+wT|H?r<-(?Q+kvWu2C9TPIU& zJLPbptp;16ZIOC`t;Ez^+XL70Z7bahY*QcS*>2P*uobr~u=UIHFtODELl?ApF+zV_aqw;JI zuFbP`KUrXF?^s}a{c@h|;xC1^tNjaYJs;=We&)`zP2OK*%k(10cGI##+kT0BTPv9& zTltm}+YZel+djrZ+nR;~+dBIqTczYe+oj^gwu^iUY;W!?ur2;kX!~hif$i5_dA4#w z`L8~&mem#5y57mR zz5Aok_P0Qu?bUq+wn~--wtGYKZTl7%*s`VP*-Dq@+nPk?+sc~c+g@fav|Y_sV0+0j z-*)1bJX^JE1-4>t`L=8F3T#VHP z_T}0>%FMT&{yN{*CotDGvMA5?zeAzz_WyadRl)hTLZ*4PGhgM|w%pINJvTYm_V523 zTg5}5vb@0djUZ?pQ=zT#^8(xF@ddUQ^Yd-{4DxK7Omb|KwDN8L2tkNwQH?K+fWd-P+j?XHw0+gWq7Y-jss*lsk*wUsx?wUu?u zvuzK}wq5UnlX^yRYd$#SmRk^nB9_HBA3Fg{fsLHWzxSnmhzaqMt;w+UGg^1b_wVV&TYB2S-sh|n%{D4nY{)?8&j+rJ4(#&--edW2^r*%l6@cY}<%QS+@0>nYQMUnYKR-b8MFgWZS-} z&az#XpJ!V$H{14Ie3q@<(;VBPN7=Tv+Bvq5O0sMv)3R)pn6qp>E3<9YK4;m^mCCR! zzn*D(<8iia!tX3wA@NLGtuNWO)-$tgzx!m_$~$D)_UzBHy(gG$yJK#aZNjTe+r`Io zZ8LZ>ZRHnd+3riru-&&J!&dlyx^2;>4BJM&blXiFX|{cT({0NSXW2TmXV~V>%(Pt^ zlWDt6Jj2%db*8Ps{0v)_)->CxOEYZuYGl|>TA5+n&6sKHESF)cZ<}GOGc(KfKU21C zeRYm)L|-=e9Ds!X*|ul@W!Q2XW!RRm<=AS9=h!m3=GZo_%CYUU$hQ5jkz;%Aa*pky zupHY+(7xLGEZfLcIkrzOXW8oZX4$TMm}$F_JIi)+SBC9p!A#r3%xSj1pEGUUlrn66 z|7F_dZp^eb+>~MaRUp@vpEcLEqchJo%OcD6_}&~_jkTG!$2jtA`wO#d^H$~9K9tO| zu@y3_O@iU?J=<|+dcAGww77hw*O1AY(I5o+q(VFw5{~ZvTb;jX&a!KWqXVx z$5uKi%eLZ3wyp5f99zjX8MdFhb8KfTWZAYF=Ge-u%C`NSm1WB#n`zrzpJl7FHQP2r zGs`yQcebtH2US5StnOire4 zDno{?NJF~qwY+p&w(2ZfrJb3!%GWY&|2Svb?t7JGd-+tB?cd}~+ezOuY&UCW**ee8 zv<=eCvW+atv7K})%hoz5+jhpoY};a~Y}>yJvTcJ)vTc=RGHrjk=Gbnr&#_Hjm|?4C zkZs%ZDa%%BPloNzC7HGpN-}Jpm}J;ygXZqFvTW;Srr9!Bx zvQZhfd3Vxnx!z^ia)xHx&iRsIYi^Kf+ZvW`yRSLR_A6Jq?SzS$whjj~ZPz$v+CF8@ zvenPevNigdWxHA_)7Gpg%XWQlrfqm$w(Zv3OxyEWnYOkkGi>|*X4}ZfzLB-or<$?5{+qubEw)%m&w)2nV*v>hV zZTnX^*H&I8-?sH-uB}L5j%~kgwr%Lo9NUbxY+J20*|z?*S+*BmYB0j*U(o@x78HOF?UUAAp?RF*Bnw_Mw0 z3v+Dmtj@B{md~+el*+YboRw|sAChC+B$H_?xGe{~4xMvtc{+t686G%XvD-)~_Vr_GnbTt!zl1ZG2*`?YX`@TTh={+nU;Z+wU=X zwiA!!+uEAu*{-O_wSD$0$M(a9Tw90uJX@V7xwb#w<=J)%7TB&|nrr)%KhO4}U7@W` zL9VT~PrmJg-~!vLt8;DVU(K~WdnecSm1v%=kaK};(6fBo1Ap^uzj77Yp8c9{n3NHhW5e?Yv`owg=_%ZM&Zq*e(|+unql{Yny&F&o=y9zU}GR zxwZ`(b8Rmk&A0soswU6g0*zcSDE z+PoawkYl;FFOBkTx60<)_EzWFe%h36>$Wh@_D)ist;>b8HWu$hLjFBiAT+yZWpZo_ zVsmXJpJdvu+nZ~MI`L=5Jb8RO{=GZ=z&a!hwzWZp zwhTE%wogwN+3Kek*e;UFw~g?~w^gkzv=v%iXdCTcWNWaZ!1nm5Jlmcn`L=)bifv7o z<=T2*$hVz2xxjY$y8_$XX@$0ntBP$66H08wP88Xmd|PN6q?m8}bZ@ckwRy$1j^7Jy zkNhaM-Pc@ftJG0qdvr^o?b?^k2xvt1|j(?GD2t%>0EKiYbLs_wHMre`kq4}k@*HcSuA3rO$t-D=fD=t@T zYoAqUd&9HH_SwrK+vP09wwtFH+a5_OvQ-KxuuVQ+Xd8T|&^9%)!1kJGiLH5af$g95 z#kLGW#kQUqMYi|n6xfEoEwuHqE3#!(DYA9=QDl35Z>ep)Ws$ATo)X*nTZ?V8dW&uS z&5LcN+=^`dXBXL?k}0yCeyG5XCAJq<6xc5DF0u80T4cMmtH}1{&m!BY$%VG>wiMW&5-+m#yisiH zz)@&>d1JAyz{Mh4k(EWZEB#7rpWiOAopZm?HvCJmZCpcvE!)0A+Y`I;Z5d<>Y=f(d zZB6GD+CFM7vUQOuwiS3)X#4VQk*)LELfgqaMYd9tN^Ir$3T+QPEwXL1DYAWaA>a0D zT7j+3=>psLym_|%i?eOd73AAacPy|~(#x}*m04)Z{IbwC2z0j1lLFi8w+n5fvI}er zk_v4-b&G9VO^R%bw2EvOT`I6;J5XfnW>#eD8kJ{jJ*B|5_(-m;^{;%}>+HF-}Y`)fo<~k0$Zhz1-4Fy@@?yc3T@v>71~Dd7ubq7=iByl6xzDP72B%s zDY8|$Szue5TV#84SFvqkQnBr^Akg{y#kMZiCAPoXifq3(6x(jyS8UrISZMp;4zHQ$9LR5uw=A$N56`nb%b8<){z-wY;D&tL^6GrsqyBlecYo&FI<^+rZr07W zU9v3Cw!t~i)~d9?c0qHV?NgO}+m|*4w%MJzw&i?wQCA(&20*8qkW5Qd;AJ)gYOjBt_vu#eWzAv8?0YoYrHYf z)}6n=_So)x+q8uRwt4FLw%Tv=Y*psv+nyB2w>A5kXX`qv&^B{tt}TOPfvx18eA~57 z`L>x8b8J(WOZ*ET~j*Vgk{j_qxh9NXqyxwZ#xcV*}i?0V>@G0j%}q>p6w>( z9NX0kb8K%I=GmU#mSyXooo#E=nPa=+cebs#Z;q|ju1wo#_iWp`x!Ja-f8^Ls)626J z?#Z#W<}9#X@Hxk}HmJZ>bxWS@hWtERjhXqji<|Rond0(oXE5d4wn*mMrXI_;{gaeu zdvy+j_6dvlYCNZ@c4Up6x8Xd|M^eTw4*{JlhG=a&49T z^K94L&aoA{S7>Xcn{R8Soo6e4G~YJCIo~$lIM4Q2d!g-(MftXttogPTT=}*?H|5z* z;wrFJx6iko##mtc_Eo-Z!qj|QX3acXn_v01W$W^6cg)YXwTvmW{r)81_Md5i?G)L3 z+uiy_wigTXY;SfH*t)(iu-)BUU|aAu*Y@zSeA|SaJX?{Cg|;vH@@y49=h_o<=HZb zZ#&mI*EYa0&(=vG*Vgk(o-NCdTw7t5TwC4P9NXJ7vu)?R&9$|5%(D&e$hIwdoo5@E zkz>2$Nv`cpiEP_4<2+mK4cWHo>$7c-cIMko|CVR#%b9C?TrJ1;)T>NerUN;)@%_2B zm#VUD9i4J){{?5;I$h7PUGgc*_FZI-t!PA^ZFP38?c=OGTmQB^+c)!bZ3`de+v@Y? z+P=DwV>@GIf$hg-dA4&6@@!8e=h!N(%(LC`CfAnxSB~wz8?2XSo3$g?R>&&P_RFRm+xJ)VY#&d` zw{4WpvsDtvw_SBE&o(GG*Vc1(zOBAxp6#yCeB1wG`L=2wa&2E7&$X?bT3{=qmv1ZY zQDFN7z%8+ z>*w1Ve#o~?=_{}mxK>~*&sJ!A^lYx}`=lbr;?#`(skR?U}xO+s_Ab zZJ&S1x77;Hv)#I+!1jP+fvu56o~?dbfo*|wp>4pq0^8ZvMYi+x^K4T<>43Y)Heh0* z?Mi_H+XXvvZDR`aZU5{qu&u~1vYmb*&$jGSfvrPUo~^z@fo;n7eA}fz3v6e<%C}`R zF0ggjU1)piU4gCGraarTr*mw5x(aM(9?G-*bS~eP`$n#9;jcW~m$wUTi{1hpp>0J}zHNpZFRQi+iniZx4pocZ@Xwtp6&LQ0^5xJdA8YU1-5}+`L-ef`QZJ>LSlKgOGWc+ zXI;#(eg7`kHb^+v_VBV?+wUv#Y~2%bZQteO+6Fh}*>2sRYirD!YnwVF*VbWKj%}<= zuC4E+T-%!NEL+*#IkpKgxwb}Ia&5EyvuzI*=h*ICoMZdZCEND$n=D(-<=M6}rrEYV z_i}9CdFI$UX6M=JZqBhi{3O?wgD1y!hC-fg$jcnt2Ohb$3mkK7A3n>rU1FSLyYF$9 z?fcd|TW+p=Tc*xjTbXCMwh`L-w#gBNw!v5OZRMxu*)DvQZ=0lD2tE@d>0zNQ|F;5L z)9E?3oGWu|HM|RKZ5QO*x?j(=UCWtm>+W7)8~G^L_D+7jZI@K8t&Uo*?XtjJTZa8P zwrulqY}uo7Y-g^|wvExxwPn@Lw$1vIZEKpDX}jS-j%~(|9NVK8a&3*bW!s)A&astI z&$j(FCCm1BbC&IAfoxl`>DjiG-*Ro=TIblZDCXEc=*_W}f1hLf*e~1mcy6}s3(y^i z0=c%+rsvpd?#r=N;Lo@H(4A{*BAaKsTR6`)c6W|#Pfw1m8mMk?$g(}MF4s1EWsdEd z^SQPz>+@_`D|2n5|7O{8gZ4kq&9Su;$hGZc&b57DlxOQ}n`_&$CC64JIp21>PM+;e z_I%q7`?GDo_2t^GGt0B(w#v2rXqsy)z9G-{R&$>1SIazGrM?{729pBY($D#}6-))T znfisci|n#(W7lQd9+SzlwR6a}rmG)|zK4EuU}u&oIw+v2~&CHS-+X52gjS zsxR|w7YpUt{#7Wjm7bMvd&a%M_S5cs+wPZnwt63OY~%kH+J15@v<;Rnv<>Ynu)Ppj zVB4IRZyWNU(Dry~p6w})JX=w|0$XpE9NWZ{0^6CHdA9EJa&70>=i9FQn`T}P zDd^t7eA~<4b8RCw=Gi_8&bQrMm1ld$cv0U3*NAhi7iRIV| zdFR+}jn1R>l|Cg@Lb!4FLP}@JaTQP_~qKxN95Yhzm#jM+>~ouFPmqZwJgUrVojc{oK3E+ z&#oNXo!fJ5=YrZqlk;u)|L5BFcjep0{>-&qE>viH(m&sJ+oN3DjOBT@TtzvyPqK4t zAKl2Yy~3Vr+qx&$_Doui?X8))w$FTXZDSMjY`^@^w_Tl;XRDf5V7v5YzU}O`T-(*J za%_{f=G(>>+XZzx1p6!$y zS+*hl`L-deb8QcO%d+kXC?Yg;CrYkNVv(AFj|*Y>VeuI<(}`L@k*1-1n@^KBdR3vDBQ=Gy97 z=G$(#m~VU2w7~ZHy?k4(9l5rfcIDeP{mZiz^~tl%wac=d?3HW#Wo5ptut=V5&8>Xf zjT7>0Hwoq2&M3*Z&EUwhUAidW)=MzYcJh&Y+ka>BZKs;&+UDKMx2;spvkl&qYwNW? z-*$mtp6wIHLfh(vxwcdI@@!c&@@&^>{qt-$xEI)N<0-OjO)9iy>@Tpr`zPO);Z45ny|7%{74!0K z)tn1$lU4F;Wo-*>&5z{U?%$mc4#S^vg|=sH@@(aT^KGRi^KB=Hvuh8HKhyk$JX`4f(d|3VF81_d)xz^KDJ1TONEOmIY+Y?LkZ8;9-+6LY!uytQlXq&h`&vu?>q3ywc*|xJL=GjUp6xjMK z&$E3qJ=Zqcw!rq&fqdHolL~DYbQjq!?JBfo_@8fkmc77MBqiV0yQIkWK|zu2*Sm$b ze%uAN-_{q{?%tMfYiw0$8{%7N8}TmBmMx;dma{j{c3EGcZSSpo+tn&XwgslSwjbOI zZ2#8h+Gfwqvppi0Z+pF`!1fSVzU|{pr2 zQiZnrZ3=8VON(rG-z>20{hDVhVpd@Lad(kzw?~0(vqXU{r$C+lr+W*gmo^w5>}lwB@uZvgP|&VEZyK-g|^GC-Zwi_Ri#d+gT?IY?p=S+p31;**lF&$Ml^ z%Cr@Y%(j)~%(Q*;IMep8QHJdkjcnW5wpq3;-!g4i7iQV=IAqyo&C9l3Uzcs$m6U0_ z>13wu^;@~NY#t(9Bb(wQ)m&NDWT2<%T zRvgQ*ReX_WJLzz)Z7@fkZKQa%ZSV0MTj`fMwj4sawl@-TZF_lgZR3)2ZJUng*k*z9 zE@*FGSDx*u)I9K7>Pgwzw&D9TZBMMuv(+!iwLKJ&Yb&9jYs<7R&-Q9dj_s7_Jlk89 zIkpz!xwf9nIkq|bb8J`K%(1-`o@;yRN3LyEQ=aW}!yMb`Eui&EIksOT@@$z~b8H`S z<=OU4%C-H~kZYSLlw(_8oMmgbBG>j+ajq@*y*|zLo^K7|Kb9Iku5!vTQf5%e3wNo@FcJm0`=voNYV7F2}YjHQP41H_NusKHGM^ zZ=UVt#2njudfB$dY+1HvW@XuWh-TX+D`wj!7iQZoaDnW9_i@X%?fjKx`*=o+Wt4ovpp%DW6Ro?X*+RRrmgU#EZcc}dA58zvTaj-X4%Sa z%d(x2k!5RrEytD-6eiKxwpIHxZGUdgv^7k~vi+@|Yio2l%l6aOY+EJvOxsMCEZYrx zGHvq?W!mO_%eMXbGt1T#w7)tc!MP%6;m1fy~waB#fnww?Yb1&2O(~?ZvjYrdM zml$Q*P883yjXRWSd%HHr_ElG|?Zb{7+x$;CwyE9Owg;a>)*x8wW!Xk$WZIsZkz>2+ zNS19*N4D)h)=XQ?o7uKr`kA)Tr8%~{UuN4*D$25*T%2i}ppj|2=1!(N=ZJTLpc_+;_ zUoX?Pqch8v?Mb%n3+*ghqtDs4nLo2^nKRRE_uWsky=|IhyZUOnZBSsk?M{~r+Y_wm zwnv_%+xm)S+Af)vW&5!|)0VR>%l4apmTkrE4BI(tvu(L$Gi|qKWZQ1qonyP~LZEZgeY znYPngGi_i0%dq7S$+DH{%d(vmo?*KwH_P^(XSVHgqYPUyw+!1liEP{AyQ#LW>r-uQ z4rbVL^rqW})@Im#f0<@GYiqi#sb{_SIzC>O9G`-LfphmdPs1 zR?IBj_9$wnw#P*?Yzw@zY^S_Uw~aZKZL1)cVH{8cHeVsw}Q@0x5=?p?#i*fcQe;^-MuW^-9kCG zo~qfljjcJhsgc>XS=_m{k9l%!tDfcA23O?Sy2NDJR(NFF#xKvc?aa=$ecq65`%Edz zR;4WmoL)Q)vus%$vuuOAGi+3_R-Q@TlU_3+f%9qwue^a*^=^KCzY)-87D+rG6du)Xp-*VfB3-*&!x zo~>U?o~^P=f$j2xxwax-3v7d{a&0@s^K7dY<=KXv%CpT`m17&RGRIc zEAng=KIhubvdOc}v(2^ruU2Sl?~!k7ekI#hgFVN#MJ~^F{=yvF)84tZ{kplf&CL0> z`y=vftpf9H&(F`ZZ7$2Ree98EyZB$W?R3L@+sK1?whiL>wwHzSZ1?pP*h>56+giNM zu~jh4v%L|OXR9WjZ!32(*Y@6qJloBe^K9o?=i4eT$g|B1$Oq4Fd}++q&pnTlbB*wng1Jw#!U%Z6)%v zY;*PUY(0weZSNc8+j4Eov5hFmv0b($*VaxT&z8v}*Y@R|JX;-|T-&nNd|Mvg0^4S- z0^7}IdA3rs@@)P7=h+_j&bPg=JIB`hS-x%A+&o(^$2?m$n|xc3Y5BHKYI1G+?ibiD ztSYee7AdfmmMpL>wa&GjTAgF7xH{kVZE~KiMh<9yS%K|*?L6Csck*l>-^;UgdXi`R zd0oEk#PhkfIw$gMf9mGjb~@zSu6Ukjd+&6vZJcd^ZSlkc+ns-NZPR||*p_+a+WuXg zZ)+6}8hg*Rbz;i34LOrz>&=s6%fgvsyXab$E&IxBTe+86wjp9UwuN>%w#<{VZ4XV% zvaM0hwbky)v5n2nwoOdSwLRaSXDbzzW!oW>XX~buZ`%@+ZL4=B+jd`Ao~@5`o^9mJ z9NVt>Ikwre^K5^g&$0dc26Prcx~-2*wyhsuj_sO;OxwIwS+)yqRMZ6AZutVW@20q8CS^-|mHxuv${cS>v@ z?<=w0Hoe$(RY`&EE74-x#l6M0!KVvt-zgQ^hPW5newtHg`%XRI_QTNvTOO?}!f$fst`L@5l7TeZ~ z72D?jDzg36Qf!;~uh_P&tLANN17l+g*jW-(MBlI`NAhghFBjPI2j<((Wh}5&G%B!dU@EfZJfCMfXKsOQt$x1kR{a87 z#h_f9?8Ww9+QW1+3n*&^EpsY2T}o&wufm-B4pw&mD*r{{ymaP2o2+P>q@w~c(A zZ##2&p{;^{k*(?XLfb2rg|?>Z1-3^&725htEwnw{SzvonrO4L2rNCCLvC!76J>T{b zN3rc^$pYIZ?PA+KsYSN$d5dh9vJ~37zRkD&X;Nq_%~xPMWn-c3uM7FM$83viLoADJ z*BmRd-PBiLdq}*%_UFrd+w>**wrd;;Yzr3U*`5^6vz6VFYin>Q&(`)*p6wja9P7?} zTfZ&&woDB9wtS#{SDOlK58ckSE$hs+HRH*%ecF|0>+~$gc7j)yEz8+_+u(EgwvH3? zZ9(^>3a!bv<$0ZB8>EzLyTLNYc3xb*ZBTul?fh$bwoW$+Yz407+V0v?U_1Xqp6&C* zeA}&jg|^{Qg|^0VMYi^Zg|?nN1-5HLifqs7l-i1E6x!N0bhUME%U6^M(WkSAf)SrCY5Uv8-H%AL> zjV9*WhF;3Eo!63Ud(yJN_EUSF?OKjJ+Y=4Bwv+4gY*V)s*jBO@*eb2fwcQw=YnvmH zXZz|zo-I>Qk?m{Ad|Qtt`L@M%Ikxj&=G*3h&MoaJuw{EuVC%`BZ#%(0&(_i<-*#4d zo-Kz}p6#kv`L=3X^KDOq?vB}&fi16WzHR500^4tixwhv|=i0go720aW z=h^;TnQy!9ajxx+pLw>A+wyE#KxyerzU_j=dA2H-@@>Cf$hAE>KhJi;j2v5El>%F* zPX)GrSqf~ETJvmIT+Oq6Wu0s5F|EM%gg}w)3yoacKZ-fFSGQ!@)`{fWZV}0{b#KnK zZ9WNFSD$OEyC}zY+tw`GT_L%)pLXZjhMVWu-Yw3z)v?aC^%Kgqt*pdEmSD ztiKf4ZZXZbwY!>UyJ1?s?Y)CJwo-@lZLfF~*uJRDu|40NXUp4}Z+qfvzAYDHfvs;* zp{+%1zU^Pj0^5h}dA9D{xwb+HMYe+Tb8SBg=GmJ3&b19R&9i+OS74i+lV>ZYlW%)P zE8q6knta!J{Q=2pH^V&crVYk`cJN{bxoeFZECh{NkG2sex-cddy#pz zsH}kZ;@hHOF>JPL6F!SfT9_zkFL^ z(E?j>={#G$wme%s>3mye&pcakgIrtFtvR-5?&jIrbLH8pC+6BZD&^R=aTM4VCg<2* z-jHkCcp=v|QX|)P@2PCt(8D>l0Vi{8FYe5|$%V?TwD=Cm?yRk0M_F+Z7?IMpn z+lpj(79v# za%{u4dgIwFUZF#nLF67yAnCIC_&MB}>70I)e z0qwinoNN2*LXNHbqCDI3qj|Qza|>-FP8HfZ{L8hymRVri@H^i&cP{8I+d|t3-|}rw zF37Vr>d3P__qfnjsjAS{@_fGSe6D<3!C(2d?+@hJK9kC`-J4lxyE-c0cB*EP?T26a zwmSdwZ5LMM**=aauw6AT-`3E!z;@czLR-zm0^7jqJX>Gg0^5e>0$X9_0^9q}pmRqG zzR20$ZPh1-3jv zdA15MptDQ!ZTX@LZI4aMvwf?aZ>yM*XM6iYp>5Eb0$Z`41-9BJ3T@lf3Tn^ZeELaG>yC?r&fo+_3 zfvw+;B3qln0^8+M1-6Tq7TA_M6xgXYJu(jiTSqs_vG0IN9EgE3m4jou@u^-mFC+zdKcI> z*5%v&k}a@pzmRLI0lGKiZ-MRWE%~e*4fzo{2Sx<9q zxgX@)uAEkAdr%?Y_OxD(?b(tX+m9FXY}FO=Yy;wQY$JK{Z0(=t*q&Af&2Qz{UhvMf zE#H@8dn7N<_U+aj+Y1kJZ7bL1+A7@1w_Q_`YrDxZ&-O?jXs>^+?KX=X+utF1wl#S< zwoDBUY}a1Rv7G~I zS4_yUZ4J$_J)W6kd-qh1?UU^}wxz~7wo{XGY?;#YY>)S5+s6FPv;FZa-&VUQ&vwW8 zT-yh%xwcF%@@-eO=h`~`%(G>Dk!QOnC(jmicKz)2dA59>1-8=mg|>&a3Tz7#^KAuM zvu*c$&#~QRm23NCcaE(~cCPKB=Xthw?q=J1eaNx>eJaOxb#jjFtjJv37oK^xeE)K7 zt$6Zm>n`TnR@Z0SZkw5H8~Hrb_HRReUNASV1KUd zDYa}{!?vQsKb7FIB zvli#ru64_?W#i4Yl|G+qJC`HZ*5qrB?bUfXwr_3oY-f~!_SfdwHi7o+ndjQxn4f3s zwm-*~Z$mCvj^8fd_UDH@+YHTo+q&oZwmWR{ZJ+GQvo*e2VC(%Q&vx~KJlhn|86Qr0 zwxBym*k!O)w`?^2RR{lVq?Y=d6w)3J2Y^&zw+D>^`V7tY#!1ngC zd|Q8pJlnuOxwbd=<=dV+U0|EZns2MCnP>X|bmzvwd|QpiJX-_HeB0i~xwfkxNO@qX$7{|Cg$4CeVb()y)nnuL?O>Mbwi%5xMHqt zNL!w*Ht4RA$~@a=Cv$DjO6A*{9?rE*T9j++nUrf=e<06R=xU*@_}K#6kkTAm0qGpu zS!)VxW1RDCJ?G`yE>F$1-RGQZyZC6Xtf%bsr+m@})wY~B<-!`r<&(_^7&z7+%*LIC=p6%X^ z1-2KLWZS;d%Ci;F%(E@j&$nHAuE4f=Yp$)RMy_r2f?V74dvk5i&(5{Y+nR6tLpIm8 z-Y4JowoRVx|EL1nM~^^faOT=FZppLNFf6eBbtKm|?@7MxFZo>C@+yWwp<<{Th=CPA{mQ$Md*X7At%G2$ZRC|aTh0}r^BQt(n_uVJ7O522 zUMkJEO@5hUtF$QJmg7~ft;UH0+w`>sw$@d7wj0y(Yv;tedwEyBZEH=w zt>wjhThKkChffsPdU6-o+HESZ4L^}*>l0sSyMA)M?YtfNwlZr9Y(Kv#u$8navfY!G zYkToozU?BDeDE4=xxzx*{h|4`6BzPsxqcSf7BJ@7zF(AYyLor6ZDC!$?F2#4UWI&H z*XMb*ijNCz4K^3rF4&o8`(M7$R%UIU?M8({+oGUC+v}PIw)4b_Y!jvyfX{gPx-HlC za&3X_dEX*i>%RrIi?w@ryGw%rR_Pgz=QyS%E%wjjK~_Q8xo+shUO zwlVK=ZKrH2wB0r#-!?>`$TpoP&sM1>-PxI){trTMlA z3kz+ft{2$~SQgr@IFV<2`$BhdA7cL@@)-o=h~i)F0d`E$+O-4puo0uQGspWntWRa>pWXapFG=7G6l9K z6Y^}kn{#cArWV@PndIBgbdwNQN?FN~A+j|=Mwk0PEY`YKT*}hlGw)Ke5wY5H-XSXx!Jak0=c#|>6x}qw`AFRuw~im7iZeCmu1*8@6ED}b<44x{V>zE zVtw(H(z+h#n>u}#^Q zW&2`Hj;-jueA@?t1-6UM<=QS}%(L|=%(p#oEyq@yImec9dbaJ^J6X25+S#^ArUkZ* z={dH7vvO=3-{ji?wUzhFwyo>T zwcYYM+jd@dw(YlqY}?}>a&7Yia%=vxX|C<2mMq)4E19+{@8{SSP0q4C{VB)x^u%mi`N`R~<>uM8ccrs!y_V+K zrWHc&UlUlFW1Gd3Z5zEX%XY)s9NTNIxwhw8GHs*Y=Gabl&9OafkZsE^kYoGXJ;yfC zAltTAB**s7#vI#^i!yA5Kjqk-`J7>!?4D(-aw*F;q$JBWHY&^Z$gWJ=z`zXKi{%-% zA00Anf0U-%E|STzJuo}nw#+HrHj*>LcB*cs?X;>4+w_m=wiiC6+s5tAuwAH;VJqH~ zZd-FP-FC^BR9iElOj~cZEL+K$8MZ4sGi?Qpvusu4vurmQX4x)3kZId{Hrtl>JLo+2 zY}+l<^K2~)Gi+IGvuyvgXWH(2l4+aQm2KM~nPZ!?I?HzUsT|waSy{H*XXeqYo($V*^D=FBT4dVhoy)R4 zup`}8FfiNpNJ@t7p{-fAKh&~pm3XpjXBy<%&dtoV-N&C}yR;(5*4#PA_QLlZ+v?C< z+bNf_Z9UsFYz6YNZI_4E8A9HGTYYZdX_D7ZI-S4$xK^wiA>uPxlG%8ZCSQ|^)qZ!n$vCH zJ9*o_8Mf6=vCfugkQ(>y%|{bRox< zohQRqqA0`GsV2jA%fTGmzOoG43H}+j+gY-0nX9sFxr;Jvzs$+B?PtrdRXdz+YrQYS zR{OHVcT^!!**tOhHXM|hHd$aG+X|P zOxp`mnYL!WX}0NCGHov|%(Q(koMGFuJ>7QW*9_ZZQ_^j%(m4#nq%7Tb3=;n=IQbrd-=sD|2j3jq_~pYUJ4N49KxfJ)djK zvOCXKeM+9Kq*<=*)Mq)i%OrAbFBRt6p3}{Ht$%8+ZKipiZ7WN@tzAH_?We{(+gIXww#)bA*;>ft+NOZ+1JEw8 zeG6*OwG`L}M(5aaJj}HXx|U}fxjx6Xt1{2lOC{fSZ+*V)oT7Z&oNxKI^H=8CPW8&Q z&F#;#y?Q>!_VevLTiN6s+jo!hY?ZI&+CDgzZ>z+ZV;gIpYYQ49cbm}C1aFV}VxcdqT~Z3VXL{^Z%J&CRwI$jh>QT9aoRkeO?H zcX^)eGp>BwFE99vQS0^4AtLffjP`L>(x=GyLDSYUhf8EC$sz_#miuB}9IzOC()JX>kd zU2WG2Y;9Z$ZKs##+v?=z*j}~Gv+cT*XS?!Ku5D9fzU`H>`L=!5dA7z}dA8ExdA9p4 z3T)rn=h-r^&$fNBI^TA}jRM>MfAVZEissoKUzTH=CYEEH`!m;eQ*WN_7KJ?9qP$#N zL&tnukKMVp>m>4R-B@#N7pmphPQI0GyD~A`RyQl#mgPaNZHZK_?e>Scww#W6wyV!) z+nTP<=Wch=G*@JmuG9ZGS61! zWFGho!rHmHwiiKr$+>fErC(*+%B?G~^=!vTNd*5!Sk?Q#8V+pmmywsMzpY>Q{**xu0qoiCJYd*fxU z?b^y*+uzaIw*7OmZB;n(Y**!H+x|8Lotu$u+cYo7_Q;tm+f@&F3-?MEw-e%hJhvwQokjk}HOU<>NeId&>@MNy-X0?3V zkFD9Zo6YiVC%(wDW%SFo{dFYURzVN6KP%T(@N};2v!mIz?@V*R=WF~a$hT$Oo@@L6 zWuEPpIeE4@@rAY?Rt2`D0fn|7^9pQxjEimSWs7VhPZZd$yqIUZ;A?^HPR0UTrIK9R z_ToI-@v^`T#Ia+y2;9Xq&g8*mk30k?rlE zB3sAzMYaWZi)>{COKeTGN^K9FF0r+^Q)uh=ro{GrXsPY3#4_7AA*HtFGNrcRs|#)Q zHx=5dq?Oq23NEl+@HO9dw{VfIQDuQ`gFnH9F9WUf4arC*7`-Z_caP^I~?pHcBtgcE`4S+wztI+e6Cvw!2L7ZOdA7ZJ!tA+1mEz*(#*u*|urt z+Zt=++b#~vwN1a4Z<~KR*S1+d-&S~AfvwxiTw903g|;7`<=HygfD73BqlxKUq zq0lyhC(qXSRH1FEZNBX(+X7qZ+E3j=kQE1yHUu0_^QD~biTVOk(uF$rcrNDNIRH5xP=3?8m3kqyiT?%YBD;C)* zo-MM?x>I0VIj_)`QK!f@ya|*C3T;(2ifok*71~N07uqTvD6-xCqtMp+f1z!MM4_#y zZ;`EGX1?wJSNXR2uM2F~Z7Hx7-&0^)wYb1Gp*h#~vQ3_?RBfJZ<%V3_tbhVrd7T2= zOXu=!=UytX^O1^FG`8->b&H~$gU-E4)Y2?~YP$;mC-kfi{swv;L zAScgOdR@LPt7^XOhI@IoA)*Dg-0$*iKV2@cv$;7 z*7H-I?WC-HTaLN;wrcP4Z0~Rs*uKckvt73<-&VT1z;?&=d|Ru$0^7PRxwb!L3Tz!_ z<=g&^DX{&vG~f2p{sP;#>+)@1vKQKh*%aFDx{_;adM)3!Cb+=Xdr^U{yJeB>Z;k?6 zX4N8F`!@x)MRxhN2dnaI4=&EJojyC?meZ}k_M2*Fw`Go+sk zw!<~omg7#It+hdpt&&}~?e@An+YigKZI8v~+Pcf;*?L#x+j6YUvo*`hu~h=y)4C_e zwtywqRwyyY)`u(KmU}{u?VkJ`TQ7qgTL;x#+qLr9w!A)tw!TLBwsmv!Y!$QeY;RX& z*~*#b*oN)Tw(WbFYkS|Vz;<0quIa%>O% z&$YcWH_ukgG0*m=Y@Y2R)g0S2w>;Yzz5-j5-dtPD-Fdcqc=Bzxf62AwJ)LK}@oyL{U-QTetEUkhw)dh%`eu@~5O zsTA7wg3hW6&$T_HP++_FXRdAMfn3{i(7p1Wg|>HDL3_;dZC`@gmRWhW;-~X%pIYbI zN>_pAH}Y(oGV*Mf-`ipC@^?QBQMh&o0ig?Yf<9JB6XZRxBXb_QbJ#+XJg}Z69yWw_W-)&sMUo z!1i`}fvo{(o$dZSThE+4+e?-C;Clip|K!*{xtMSJlnb<8EZ>$@EZ;W4r@%JgL%yxT z(R|w|rUF|f=RDiFb$Pb8*X7xo)#TX*aTeG%i|5)h%jDaJPRO^txF^SU+0%U6hSogW z&2@RUZM$-9KWgUMst9D;URBAnwUNuSy>l_!)}J@m)}}Ap_Rp7GTg&Hpw$*dz&qU_0S-o~;#Au5IkA9NXRpIkrK4dA7^6^K5q(<=VcD&a*uN zy1#Bqj_sxMS+;56`L;8;a&0%8<=PfZ$g{ngo^Kl~R$%*MZ@#TCPo6DXPQLA1$$VQi z)&kosi+o$D1G%<-#d)?TYI1D-Q*vy#F3YoJIFf5y{WHgwUnj?QmQTKIid3F$ja8xT zIh}ml%x8JFF0T2uK6~?Q&5st^MoccS?I_N-t+mOwmDSC+EwC@J?Xt~+jdA5*v1?!unjKDw`Dq&YkOgGp{?S@9NUG{3vBbPi)kDjWO6S^6NG-4x^(e44U6W_adZp0T{8x^x@tOkLM_mQB79#n!juM5o z-TryDY0nC6#a0#BW`q>j+P3A}etT7D8<1XP8#S%a*1e<9w)0%R?Z@5uwp+gD+j0u$ z+fFbnuuXiPZ+jSY&ff6?TV2ZnTV0_d+tuCq;JvH69_8Dr=H%PT$mZCpOv`$Ss+4KV2)5ZC=96E)z2d3oP)(Pa>Zm}q^t!&S?1)cG7UpCjaTBp$V(EWVd6y`iz z`=|n2Ve5R`9gPLH`%?>S59{XJUR;)E`y6ynTuXs%QCgnudd584SDtycnrrfHo%iS4 ziq_}be(ue;-C9^+`>`Y6_C!1l?a9NTN}a&24F@@y}6 z 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%0AAv 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 z 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%0A-j^I(y^YznD~{&c3I^ocR-MnWeOZ=k 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

mZ?|OI%0I}qy>vC(cGLA7+uQQl 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


;nI?o^hoJzt*f59~&Vwx~MSmZ2xt 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 z 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

- +

Full ISIS3 Data Download

-- GitLab From 4bc6273f3cd0061283a4d2e70c1cd0e71d47bc67 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Mon, 5 Nov 2018 16:40:05 -0700 Subject: [PATCH 578/620] Updated the cmake version to 3.10 --- .gitmodules | 3 +++ gtest | 1 + isis/CMakeLists.txt | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 160000 gtest diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..110ccc43ce --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "gtest"] + path = gtest + url = git@github.com:google/googletest.git diff --git a/gtest b/gtest new file mode 160000 index 0000000000..529c2c6f4a --- /dev/null +++ b/gtest @@ -0,0 +1 @@ +Subproject commit 529c2c6f4af29dadb8ee5cddf6a7919caa5ca5f6 diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index bb51032961..dd46ea4aec 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -5,7 +5,7 @@ # Specify the required version of CMake. If your machine does not # have this, it should be easy to build from https://cmake.org/download/ -cmake_minimum_required(VERSION 3.4) +cmake_minimum_required(VERSION 3.10) # Point cmake to our other CMake files. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") -- GitLab From 7d55f34d564171116c358bb10e9db10d25761107 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Mon, 5 Nov 2018 16:40:48 -0700 Subject: [PATCH 579/620] Adding configurations for gtest --- isis/cmake/gtest.cmake | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 isis/cmake/gtest.cmake diff --git a/isis/cmake/gtest.cmake b/isis/cmake/gtest.cmake new file mode 100644 index 0000000000..40443d66f6 --- /dev/null +++ b/isis/cmake/gtest.cmake @@ -0,0 +1,19 @@ +if (NOT TARGET gtest) + set(GOOGLETEST_ROOT gtest/googletest CACHE STRING "Google Test source root") + + include_directories(SYSTEM + ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT} + ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT}/include + ) + + set(GOOGLETEST_SOURCES + ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT}/src/gtest-all.cc + ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT}/src/gtest_main.cc + ) + + foreach(_source ${GOOGLETEST_SOURCES}) + set_source_files_properties(${_source} PROPERTIES GENERATED 1) + endforeach() + + add_library(gtest ${GOOGLETEST_SOURCES}) +endif() -- GitLab From 5bd8c919ddf82c92d27b32898fd544b81a1c047a Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Tue, 6 Nov 2018 08:06:26 -0700 Subject: [PATCH 580/620] Tweaking things for gtest --- isis/CMakeLists.txt | 17 +++++++++++++---- isis/cmake/gtest.cmake | 10 +++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index dd46ea4aec..0b4ee73e9b 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -16,6 +16,8 @@ include(AddIsisModule) include(Utilities) include(TestSetup) include(InstallThirdParty) +include(cmake/gtest.cmake) +include(GoogleTest) #=============================================================================== #=============================================================================== @@ -28,15 +30,15 @@ set(PACKAGE "ISIS") set(PACKAGE_NAME "USGS ISIS") # Version number -set(VERSION "3.5.00.0") +set(VERSION "3.6.00.0") set(PACKAGE_VERSION ${VERSION}) # Full name and version number set(PACKAGE_STRING "${PACKAGE_NAME} ${VERSION}") # Other release information -set(VERSION_DATE "2017-04-24") -set(THIRD_PARTY_LIBS_VERSION "v007") +set(VERSION_DATE "2018-11-09") +set(THIRD_PARTY_LIBS_VERSION "v008") set(RELEASE_STAGE "alpha") # (alpha, beta, stable) # Define to the address where bug reports for this package should be sent. @@ -245,6 +247,7 @@ find_package(PNG REQUIRED) find_package(Kakadu) find_package(Geos 3.5.0 REQUIRED) find_package(Armadillo REQUIRED) +find_package(Threads) if(pybindings) find_package(Python REQUIRED) @@ -344,7 +347,7 @@ if(pybindings) file(GLOB SIP_GENERATED_SOURCE_FILES ${ISIS_SIP_CODE_DIR}/*.cpp) add_library(isispy MODULE ${SIP_GENERATED_SOURCE_FILES}) - target_link_libraries(isispy ${ALLLIBS}) + target_link_libraries(isispy ${ALLLIBS} gtest ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(isispy isis3) set_target_properties(isispy PROPERTIES LINK_DEPENDS isis3 INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}) add_dependencies(isispy sipfiles) @@ -459,3 +462,9 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts DESTINATION ${CMAKE_INSTA # the end of this file containing a CMakeLists.txt file which includes all of # the desired post-install commands inside. add_subdirectory(cmake) +option (BUILD_TESTS "Build tests" ON) +if(BUILD_TESTS) + include(CTest) + enable_testing() + add_subdirectory(tests) +endif() diff --git a/isis/cmake/gtest.cmake b/isis/cmake/gtest.cmake index 40443d66f6..5158598f9f 100644 --- a/isis/cmake/gtest.cmake +++ b/isis/cmake/gtest.cmake @@ -1,14 +1,14 @@ if (NOT TARGET gtest) - set(GOOGLETEST_ROOT gtest/googletest CACHE STRING "Google Test source root") + set(GOOGLETEST_ROOT ${CMAKE_SOURCE_DIR}/../gtest/googletest CACHE STRING "Google Test source root") include_directories(SYSTEM - ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT} - ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT}/include + ${GOOGLETEST_ROOT} + ${GOOGLETEST_ROOT}/include ) set(GOOGLETEST_SOURCES - ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT}/src/gtest-all.cc - ${PROJECT_SOURCE_DIR}/${GOOGLETEST_ROOT}/src/gtest_main.cc + ${GOOGLETEST_ROOT}/src/gtest-all.cc + ${GOOGLETEST_ROOT}/src/gtest_main.cc ) foreach(_source ${GOOGLETEST_SOURCES}) -- GitLab From 59c84691bfe4010cae3e883440e11db7a7233bc4 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Tue, 6 Nov 2018 11:37:01 -0700 Subject: [PATCH 581/620] Got gtest working and made a small example test --- isis/CMakeLists.txt | 2 +- isis/cmake/AddIsisModule.cmake | 4 ++-- isis/tests/CMakeLists.txt | 11 +++++++++++ isis/tests/FileNameTests.cpp | 18 ++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 isis/tests/CMakeLists.txt create mode 100644 isis/tests/FileNameTests.cpp diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 0b4ee73e9b..de658d8e34 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -347,7 +347,7 @@ if(pybindings) file(GLOB SIP_GENERATED_SOURCE_FILES ${ISIS_SIP_CODE_DIR}/*.cpp) add_library(isispy MODULE ${SIP_GENERATED_SOURCE_FILES}) - target_link_libraries(isispy ${ALLLIBS} gtest ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(isispy ${ALLLIBS}) target_link_libraries(isispy isis3) set_target_properties(isispy PROPERTIES LINK_DEPENDS isis3 INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}) add_dependencies(isispy sipfiles) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index f4a87169d2..1950f47c26 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -222,10 +222,10 @@ function(add_isis_module name) # - Base module depends on 3rd party libs, other libs also depend on base. # - Only the base module gets both a static and shared library. if(${name} STREQUAL ${CORE_LIB_NAME}) - set(reqLibs ${ALLLIBS}) + set(reqLibs "${ALLLIBS};gtest;${CMAKE_THREAD_LIBS_INIT}") set(alsoStatic ON) else() - set(reqLibs "${CORE_LIB_NAME};${ALLLIBS}") + set(reqLibs "${CORE_LIB_NAME};${ALLLIBS};gtest;${CMAKE_THREAD_LIBS_INIT}") set(alsoStatic OFF) endif() diff --git a/isis/tests/CMakeLists.txt b/isis/tests/CMakeLists.txt new file mode 100644 index 0000000000..9a8dc910cb --- /dev/null +++ b/isis/tests/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.10) + +add_dependencies(isis3 isis3) + +# Link runISISTests with what we want to test and the GTest and pthread library +add_executable(runISISTests + FileNameTests.cpp) + +target_link_libraries(runISISTests isis3 ${ALLLIBS} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread) + +gtest_discover_tests(runISISTests WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/../tests) diff --git a/isis/tests/FileNameTests.cpp b/isis/tests/FileNameTests.cpp new file mode 100644 index 0000000000..1e1a0e4eb1 --- /dev/null +++ b/isis/tests/FileNameTests.cpp @@ -0,0 +1,18 @@ +#include "FileName.h" + +#include + +#include + + +TEST(FileNameTests, BaseName) { + QString test = "test.log"; + Isis::FileName file(test); + + EXPECT_EQ("test", file.baseName()); +} + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} -- GitLab From 31dbbad1fad294022ffd09199c6c40eb828277dd Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Tue, 6 Nov 2018 11:48:20 -0700 Subject: [PATCH 582/620] Updated the cmake version to be 3.10 or greater --- environment.yml | 2 +- environment_gcc4.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index c96c1247c6..6aec932d69 100644 --- a/environment.yml +++ b/environment.yml @@ -10,7 +10,7 @@ dependencies: - bullet==2.86.1=0 - bz2file==0.98 - bzip2==1.0.6=1 - - cmake==3.9.1=0 + - cmake>=3.10 - cspice==66=h470a237_3 - curl==7.60.0=0 - doxygen==1.8.14=0 diff --git a/environment_gcc4.yml b/environment_gcc4.yml index 658ab336d3..98ee1458d4 100644 --- a/environment_gcc4.yml +++ b/environment_gcc4.yml @@ -11,7 +11,7 @@ dependencies: - bullet==2.86.1=0 - bz2file==0.98 - bzip2==1.0.6=1 - - cmake==3.9.1=0 + - cmake>=3.10 - cspice==66=h470a237_3 - curl==7.60.0=0 - doxygen==1.8.14=0 -- GitLab From bdf646dfb0769a5bf0f3a0ec8fcb35e8be59d9cf Mon Sep 17 00:00:00 2001 From: Kristin Date: Tue, 6 Nov 2018 21:35:08 -0700 Subject: [PATCH 583/620] Fix test truthdata for tgo camera ckwriter frame fix. --- isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth index 978866ee0f..23b4325cc5 100644 --- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth +++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth @@ -1,9 +1,9 @@ Unit Test for TgoCassisCamera... FileName: "CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub" -CK Frame: -143420 +CK Frame: -143410 Kernel IDs: -CK Frame ID = -143420 +CK Frame ID = -143410 CK Reference ID = 1 SPK Target ID = -143 SPK Reference ID = 1 -- GitLab From 8046da0aeba390f240a6f1a823b1f410cdc253fd Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 7 Nov 2018 14:19:41 -0700 Subject: [PATCH 584/620] Added test file discovery support and seperated the main into another file --- isis/tests/CMakeLists.txt | 8 ++++++-- isis/tests/IsisTestMain.cpp | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 isis/tests/IsisTestMain.cpp diff --git a/isis/tests/CMakeLists.txt b/isis/tests/CMakeLists.txt index 9a8dc910cb..dd5bf29f16 100644 --- a/isis/tests/CMakeLists.txt +++ b/isis/tests/CMakeLists.txt @@ -2,10 +2,14 @@ cmake_minimum_required(VERSION 3.10) add_dependencies(isis3 isis3) +file(GLOB test_source "${CMAKE_SOURCE_DIR}/tests/*.cpp") + + # Link runISISTests with what we want to test and the GTest and pthread library add_executable(runISISTests - FileNameTests.cpp) + IsisTestMain.cpp + ${test_source}) target_link_libraries(runISISTests isis3 ${ALLLIBS} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread) -gtest_discover_tests(runISISTests WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/../tests) +gtest_discover_tests(runISISTests WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) diff --git a/isis/tests/IsisTestMain.cpp b/isis/tests/IsisTestMain.cpp new file mode 100644 index 0000000000..472b173ed7 --- /dev/null +++ b/isis/tests/IsisTestMain.cpp @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} -- GitLab From 2be2cb47140440bdb5da16cc4e34d43927a88e31 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 7 Nov 2018 14:20:57 -0700 Subject: [PATCH 585/620] Added more tests for FileName --- isis/tests/FileNameTests.cpp | 121 +++++++++++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 4 deletions(-) diff --git a/isis/tests/FileNameTests.cpp b/isis/tests/FileNameTests.cpp index 1e1a0e4eb1..7671e8541e 100644 --- a/isis/tests/FileNameTests.cpp +++ b/isis/tests/FileNameTests.cpp @@ -5,14 +5,127 @@ #include +TEST(FileNameTests, OriginalPath) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("/testy/mc/test/face", file.originalPath()); +} + +TEST(FileNameTests, Path) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("/testy/mc/test/face", file.path()); +} + +TEST(FileNameTests, Attributes) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("", file.attributes()); + + QString testAtt = "/testy/mc/test/face/test.cub+Bsq"; + Isis::FileName fileAtt(testAtt); + + EXPECT_EQ("Bsq", fileAtt.attributes()); +} + TEST(FileNameTests, BaseName) { - QString test = "test.log"; + QString test = "/testy/mc/test/face/test.cub"; Isis::FileName file(test); EXPECT_EQ("test", file.baseName()); } -int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); +TEST(FileNameTests, Name) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("test.cub", file.name()); +} + +TEST(FileNameTests, Extension) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("cub", file.extension()); +} + +//TODO How is this going to work? Before we used ISISROOT. Will that still work? + +// TEST(FileNameTests, Expanded) { +// QString test = "/testy/mc/test/face/test.cub"; +// Isis::FileName file(test); +// +// EXPECT_EQ("cub", file.expanded()); +// } + +TEST(FileNameTests, Original) { + QString test = "$ISISROOT/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("$ISISROOT/testy/mc/test/face/test.cub", file.original()); } + +TEST(FileNameTests, AddExtension) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("txt", file.addExtension(".txt").extension()); +} + +TEST(FileNameTests, RemoveExtension) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + std::cout << file.removeExtension().extension().toStdString() << std::endl; + EXPECT_EQ("", file.removeExtension().extension()); +} + +TEST(FileNameTests, SetExtension) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ("log", file.setExtension("log").extension()); +} + +//TODO There are a lot of different tests for versioning. Do we want to replicate them all?? + +TEST(FileNameTests, isNotVersioned) { + QString test = "/testy/mc/test/face/test.cub"; + Isis::FileName file(test); + + EXPECT_EQ(false, file.isVersioned()); +} + +TEST(FileNameTests, isQuestionMarksNoExtensionVersioned) { + QString test = "/testy/mc/test/face/test??????"; + Isis::FileName file(test); + + EXPECT_EQ(true, file.isVersioned()); +} + +TEST(FileNameTests, isQuestionMarksExtensionVersioned) { + QString test = "/testy/mc/test/face/test??????.cub"; + Isis::FileName file(test); + + EXPECT_EQ(true, file.isVersioned()); +} + +TEST(FileNameTests, isDDMMMYYYVersioned) { + QString test = "/testy/mc/test/face/test{ddMMMyyyy}..cub"; + Isis::FileName file(test); + + EXPECT_EQ(true, file.isVersioned()); +} + +//TODO How do we want to deal with test data? + +// TEST(FileNameTests, HighestVersion) { +// QString test = "/testy/mc/test/face/test{ddMMMyyyy}..cub"; +// Isis::FileName file(test); +// +// EXPECT_EQ(true, file.isVersioned()); +// } + +//TODO How do we test equal operators? -- GitLab From 3c7c8d86b7c819be63b466f66a031cf9dab86454 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Wed, 7 Nov 2018 18:02:58 -0700 Subject: [PATCH 586/620] Updated with the new testing guidelines and added new tests. --- isis/tests/FileNameTests.cpp | 146 +++++++++++++++++++++++------------ 1 file changed, 97 insertions(+), 49 deletions(-) diff --git a/isis/tests/FileNameTests.cpp b/isis/tests/FileNameTests.cpp index 7671e8541e..bad5dc2b72 100644 --- a/isis/tests/FileNameTests.cpp +++ b/isis/tests/FileNameTests.cpp @@ -5,127 +5,175 @@ #include -TEST(FileNameTests, OriginalPath) { +using namespace Isis; + +class FileName_Fixture_Versioned : public ::testing::TestWithParam { + // Intentionally empty +}; + +class FileName_Fixture_NotVersioned : public ::testing::TestWithParam { + // Intentionally empty +}; + + +TEST(FileName, DefaultConstructor) { + FileName file; + +// EXPECT_EQ("", file.originalPath()); +// EXPECT_EQ("", file.path()); +// EXPECT_EQ("", file.attributes()); + EXPECT_EQ("", file.baseName()); + EXPECT_EQ("", file.name()); + EXPECT_EQ("", file.extension()); +} + +TEST(FileName, OriginalPath) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("/testy/mc/test/face", file.originalPath()); } -TEST(FileNameTests, Path) { +TEST(FileName, Path) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("/testy/mc/test/face", file.path()); } -TEST(FileNameTests, Attributes) { +TEST(FileName, Attributes) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("", file.attributes()); QString testAtt = "/testy/mc/test/face/test.cub+Bsq"; - Isis::FileName fileAtt(testAtt); + FileName fileAtt(testAtt); EXPECT_EQ("Bsq", fileAtt.attributes()); } -TEST(FileNameTests, BaseName) { +TEST(FileName, BaseName) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("test", file.baseName()); } -TEST(FileNameTests, Name) { +TEST(FileName, Name) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("test.cub", file.name()); } -TEST(FileNameTests, Extension) { +TEST(FileName, Extension) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("cub", file.extension()); } -//TODO How is this going to work? Before we used ISISROOT. Will that still work? +//TODO Waiting for GMock -// TEST(FileNameTests, Expanded) { -// QString test = "/testy/mc/test/face/test.cub"; -// Isis::FileName file(test); -// -// EXPECT_EQ("cub", file.expanded()); +// TEST(FileName, Expanded) { // } -TEST(FileNameTests, Original) { +TEST(FileName, Original) { QString test = "$ISISROOT/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("$ISISROOT/testy/mc/test/face/test.cub", file.original()); } -TEST(FileNameTests, AddExtension) { +TEST(FileName, AddExtension) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("txt", file.addExtension(".txt").extension()); } -TEST(FileNameTests, RemoveExtension) { +TEST(FileName, RemoveExtension) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); std::cout << file.removeExtension().extension().toStdString() << std::endl; EXPECT_EQ("", file.removeExtension().extension()); } -TEST(FileNameTests, SetExtension) { +TEST(FileName, SetExtension) { QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ("log", file.setExtension("log").extension()); } -//TODO There are a lot of different tests for versioning. Do we want to replicate them all?? - -TEST(FileNameTests, isNotVersioned) { - QString test = "/testy/mc/test/face/test.cub"; - Isis::FileName file(test); - - EXPECT_EQ(false, file.isVersioned()); -} - -TEST(FileNameTests, isQuestionMarksNoExtensionVersioned) { +TEST(FileName, isQuestionMarksNoExtensionVersioned) { QString test = "/testy/mc/test/face/test??????"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ(true, file.isVersioned()); } -TEST(FileNameTests, isQuestionMarksExtensionVersioned) { +TEST(FileName, isQuestionMarksExtensionVersioned) { QString test = "/testy/mc/test/face/test??????.cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ(true, file.isVersioned()); } -TEST(FileNameTests, isDDMMMYYYVersioned) { +TEST(FileName, isDDMMMYYYVersioned) { QString test = "/testy/mc/test/face/test{ddMMMyyyy}..cub"; - Isis::FileName file(test); + FileName file(test); EXPECT_EQ(true, file.isVersioned()); } -//TODO How do we want to deal with test data? +//TODO Waiting for GMock + +// TEST(FileName, HighestVersion) { +// } + +// TEST(FileName, NewVersion) { +// } + +// TEST(FileName, Version) { +// } + +TEST(FileName, ToString) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("/testy/mc/test/face/test.cub", file.toString()); +} + +// TODO Waiting for GMock +// TEST(FileName, EqualOperator) { +// } -// TEST(FileNameTests, HighestVersion) { -// QString test = "/testy/mc/test/face/test{ddMMMyyyy}..cub"; -// Isis::FileName file(test); -// -// EXPECT_EQ(true, file.isVersioned()); +// TEST(FileName, NotEqualOperator) { // } -//TODO How do we test equal operators? +TEST_P(FileName_Fixture_Versioned, IsVersioned) { + FileName file(GetParam()); + + EXPECT_TRUE(file.isVersioned()); +} + +const char* versionedFiles[] = {"tttt??????", "tttt??????.tmp", "tttt_?.tmp", "??tttt", + "?tttt000008.tmp", "junk?", "tttt{ddMMMyyyy}.tmp", + "tt{MMM}tt{dd}yy{yy}.tmp", "tt{d}tt{MMM}.tmp", "tt{d}tt{MMMM}.tmp", + "tt{dd}.tmp", "tttt{dd}.tmp", "$TEMPORARY/{MMM}-{dd}-{yy}_v???.tmp"}; + +INSTANTIATE_TEST_CASE_P(FileName, FileName_Fixture_Versioned, ::testing::ValuesIn(versionedFiles)); + +TEST_P(FileName_Fixture_NotVersioned, IsVersioned) { + FileName file(GetParam()); + + EXPECT_FALSE(file.isVersioned()); +} + +const char* notVersionedFiles[] = {"tttt"}; +//TODO These actually throw errors so they cannot be checked like this +//"tttt{}.tmp", "ttttt{}.tmp", "??tttt??", "tttt{aaaa}.tmp"}; + +INSTANTIATE_TEST_CASE_P(FileName, FileName_Fixture_NotVersioned, ::testing::ValuesIn(notVersionedFiles)); -- GitLab From 1e45b6b22c8daba3e534e8a24784240b11efd323 Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Thu, 8 Nov 2018 12:03:34 -0700 Subject: [PATCH 587/620] Added gmock --- isis/cmake/AddIsisModule.cmake | 4 ++-- isis/cmake/gtest.cmake | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index 1950f47c26..60f565ba7c 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -222,10 +222,10 @@ function(add_isis_module name) # - Base module depends on 3rd party libs, other libs also depend on base. # - Only the base module gets both a static and shared library. if(${name} STREQUAL ${CORE_LIB_NAME}) - set(reqLibs "${ALLLIBS};gtest;${CMAKE_THREAD_LIBS_INIT}") + set(reqLibs "${ALLLIBS};gtest;gmock;${CMAKE_THREAD_LIBS_INIT}") set(alsoStatic ON) else() - set(reqLibs "${CORE_LIB_NAME};${ALLLIBS};gtest;${CMAKE_THREAD_LIBS_INIT}") + set(reqLibs "${CORE_LIB_NAME};${ALLLIBS};gtest;gmock;${CMAKE_THREAD_LIBS_INIT}") set(alsoStatic OFF) endif() diff --git a/isis/cmake/gtest.cmake b/isis/cmake/gtest.cmake index 5158598f9f..1208baf31e 100644 --- a/isis/cmake/gtest.cmake +++ b/isis/cmake/gtest.cmake @@ -17,3 +17,23 @@ if (NOT TARGET gtest) add_library(gtest ${GOOGLETEST_SOURCES}) endif() + +if (NOT TARGET gmock) + set(GOOGLEMOCK_ROOT ${CMAKE_SOURCE_DIR}/../gtest/googlemock CACHE STRING "Google Mock source root") + + include_directories(SYSTEM + ${GOOGLEMOCK_ROOT} + ${GOOGLEMOCK_ROOT}/include + ) + + set(GOOGLEMOCK_SOURCES + ${GOOGLEMOCK_ROOT}/src/gmock-all.cc + ${GOOGLEMOCK_ROOT}/src/gmock_main.cc + ) + + foreach(_source ${GOOGLEMOCK_SOURCES}) + set_source_files_properties(${_source} PROPERTIES GENERATED 1) + endforeach() + + add_library(gmock ${GOOGLEMOCK_SOURCES}) +endif() -- GitLab From 24b56ae4c2eed0e21d8bb58a944a43c6648552a1 Mon Sep 17 00:00:00 2001 From: Kristin Date: Thu, 8 Nov 2018 22:11:11 -0700 Subject: [PATCH 588/620] Fix tgo cassis unit test correctly --- isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth | 4 ++-- isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth index 23b4325cc5..c8ccbcb7bf 100644 --- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth +++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth @@ -1,9 +1,9 @@ Unit Test for TgoCassisCamera... FileName: "CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub" -CK Frame: -143410 +Instrument Rotation Frame: -143420 Kernel IDs: -CK Frame ID = -143410 +CK Frame ID = -143400 CK Reference ID = 1 SPK Target ID = -143 SPK Reference ID = 1 diff --git a/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp b/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp index a1d0e25e52..14bf753135 100644 --- a/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp +++ b/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp @@ -58,7 +58,7 @@ int main(void) { Cube c("$tgo/testData/CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub", "r"); TgoCassisCamera *cam = (TgoCassisCamera *) CameraFactory::Create(c); qDebug() << "FileName: " << FileName(c.fileName()).name(); - qDebug() << "CK Frame: " << cam->instrumentRotation()->Frame(); + qDebug() << "Instrument Rotation Frame: " << cam->instrumentRotation()->Frame(); qDebug() << ""; // Test kernel IDs -- GitLab From 02a66024e5f09f0657a8b2d89ae4d37ff23c6ace Mon Sep 17 00:00:00 2001 From: Kristin Date: Fri, 9 Nov 2018 09:39:40 -0700 Subject: [PATCH 589/620] Fix tgo cassis unit test correctly (#544) --- isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth | 4 ++-- isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth index 23b4325cc5..c8ccbcb7bf 100644 --- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth +++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth @@ -1,9 +1,9 @@ Unit Test for TgoCassisCamera... FileName: "CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub" -CK Frame: -143410 +Instrument Rotation Frame: -143420 Kernel IDs: -CK Frame ID = -143410 +CK Frame ID = -143400 CK Reference ID = 1 SPK Target ID = -143 SPK Reference ID = 1 diff --git a/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp b/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp index a1d0e25e52..14bf753135 100644 --- a/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp +++ b/isis/src/tgo/objs/TgoCassisCamera/unitTest.cpp @@ -58,7 +58,7 @@ int main(void) { Cube c("$tgo/testData/CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub", "r"); TgoCassisCamera *cam = (TgoCassisCamera *) CameraFactory::Create(c); qDebug() << "FileName: " << FileName(c.fileName()).name(); - qDebug() << "CK Frame: " << cam->instrumentRotation()->Frame(); + qDebug() << "Instrument Rotation Frame: " << cam->instrumentRotation()->Frame(); qDebug() << ""; // Test kernel IDs -- GitLab From f75a84d70bd7c7ef5b2df822121c778c8a11329f Mon Sep 17 00:00:00 2001 From: Makayla Shepherd Date: Fri, 27 Jul 2018 12:30:53 -0700 Subject: [PATCH 590/620] Fixed two bug with AutoReg. One occurs with one dimensional pattern cubes and the other causes the revious registration sample/line to be returned on sub-pixel registration failure. --- isis/src/base/objs/AutoReg/AutoReg.cpp | 27 ++++++++++++++++++-------- isis/src/base/objs/AutoReg/AutoReg.h | 6 ++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/isis/src/base/objs/AutoReg/AutoReg.cpp b/isis/src/base/objs/AutoReg/AutoReg.cpp index 9d1343e607..76bd3a2d86 100644 --- a/isis/src/base/objs/AutoReg/AutoReg.cpp +++ b/isis/src/base/objs/AutoReg/AutoReg.cpp @@ -671,9 +671,11 @@ namespace Isis { // Before we attempt to apply the reduction factor, we need to make sure // we won't produce a chip of a bad size. // ---------------------------------------------------------------------- - if(gradientPatternChip.Samples() / p_reduceFactor < 2 || gradientPatternChip.Lines() / p_reduceFactor < 2) { - string msg = "Reduction factor is too large"; - throw IException(IException::User, msg, _FILEINFO_); + if (p_reduceFactor != 1) { + if(gradientPatternChip.Samples() / p_reduceFactor < 2 || gradientPatternChip.Lines() / p_reduceFactor < 2) { + string msg = "Reduction factor is too large"; + throw IException(IException::User, msg, _FILEINFO_); + } } // Establish the center search tack point as best pixel to start for the @@ -852,15 +854,21 @@ namespace Isis { if (!window.IsValid(100.0 * 2.1 / 3.0)) { p_surfaceModelNotEnoughValidDataCount++; p_registrationStatus = SurfaceModelNotEnoughValidData; + p_chipSample = p_bestSamp; + p_chipLine = p_bestLine; return SurfaceModelNotEnoughValidData; } // Now that we know we have enough data to model the surface we call // SetSubpixelPosition() to get the sub-pixel accuracy we are looking for. bool computedSubPixel = SetSubpixelPosition(window); - if (!computedSubPixel) - return p_registrationStatus; - + if (!computedSubPixel) { + p_chipSample = p_bestSamp; + p_chipLine = p_bestLine; + p_registrationStatus = SurfaceModelSolutionInvalid; + return SurfaceModelSolutionInvalid; + } + // See if the surface model solution moved too far from our whole pixel // solution p_sampMovement = fabs(p_bestSamp - p_chipSample); @@ -870,18 +878,20 @@ namespace Isis { p_surfaceModelDistanceInvalidCount++; p_registrationStatus = SurfaceModelDistanceInvalid; + p_chipSample = p_bestSamp; + p_chipLine = p_bestLine; return SurfaceModelDistanceInvalid; } p_registrationStatus = SuccessSubPixel; + return SuccessSubPixel; } else { p_chipSample = p_bestSamp; p_chipLine = p_bestLine; p_registrationStatus = SuccessPixel; + return SuccessPixel; } - - return p_registrationStatus; } @@ -1320,3 +1330,4 @@ namespace Isis { return reg; } } + diff --git a/isis/src/base/objs/AutoReg/AutoReg.h b/isis/src/base/objs/AutoReg/AutoReg.h index ac5906c261..093cf5cbcb 100644 --- a/isis/src/base/objs/AutoReg/AutoReg.h +++ b/isis/src/base/objs/AutoReg/AutoReg.h @@ -173,6 +173,12 @@ namespace Isis { * give useful results due to the 2x2 matrix it uses. * @history 2012-01-05 Travis Addair - Added separate variables for Whole * Pixel Correlation and Subpixel Correlation. + * @history 2018-07-27 Makayla Shepherd - Fixed a bug that made registration fail for + * one dimensional pattern chips. Fixes #5247. + * @history 2018-07-27 Makayla Shepherd - Fixed a bug that upon sub-pixel registration failure + * caused the previous registration to be returned. If sub-pixel + * registration fails now it will return to the whole pixel + * registration values. Fixes #5248. */ class AutoReg { public: -- GitLab From 03f6c6de6f8a84a8b57378e295d4cddeb65132ea Mon Sep 17 00:00:00 2001 From: Kristin Date: Tue, 13 Nov 2018 13:46:48 -0700 Subject: [PATCH 591/620] Fix tgo cassis camera truth again (#554) --- isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth index c8ccbcb7bf..f5643d61d0 100644 --- a/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth +++ b/isis/src/tgo/objs/TgoCassisCamera/TgoCassisCamera.truth @@ -3,7 +3,7 @@ FileName: "CAS-MCO-2016-11-22T16.38.39.354-NIR-02036-00.cub" Instrument Rotation Frame: -143420 Kernel IDs: -CK Frame ID = -143400 +CK Frame ID = -143000 CK Reference ID = 1 SPK Target ID = -143 SPK Reference ID = 1 -- GitLab From c33e04cfa58c909a874fe7fc36b18b31d2b3273c Mon Sep 17 00:00:00 2001 From: Ian Humphrey Date: Wed, 14 Nov 2018 13:14:32 -0700 Subject: [PATCH 592/620] Update docsys Makefile to support wwwdoc (#559) The documentation is installed under `docs`, not `doc`, so this file has been updated. `setisis isis3.6.0` and running `make wwwdoc` in `$ISISROOT/../isis/src/docsys` will properly sync the documentation to our web server. --- isis/src/docsys/Makefile | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/isis/src/docsys/Makefile b/isis/src/docsys/Makefile index 21a1694bc7..c69e0b02bb 100644 --- a/isis/src/docsys/Makefile +++ b/isis/src/docsys/Makefile @@ -11,7 +11,7 @@ include $(ISISROOT)/make/isismake.os #APPLICATIONS = $(filter-out Makefile CVS $(wildcard *.*) , data/$(wildcard *)) #DOCUMENTS = $(filter-out Makefile $(wildcard *.*) , documents/$(wildcard *)) -DOCDIR = $(ISISROOT)/doc +DOCDIR = $(ISISROOT)/docs USER = isis3mgr USERDEV = isis3mgr @@ -147,13 +147,13 @@ wwwdoc: wwwschema echo " " echo "_______________________________________________________________________________" echo "BEGIN SYNC: docs to public server" - rsync -vlHrt --delete --progress --rsh=ssh --exclude 'Schemas/*' --cvs-exclude $(ISISROOT)/doc/ $(USER)@isis-d:/var/www/html/htdocs/ + rsync -vlHrt --delete --progress --rsh=ssh --exclude 'Schemas/*' --cvs-exclude $(ISISROOT)/docs/ $(USER)@isis-d:/var/www/html/htdocs/ devdoc: echo " " echo "_______________________________________________________________________________" echo "BEGIN SYNC: docs to development server" - rsync -vlHrt --delete --progress --rsh=ssh --cvs-exclude $(ISISROOT)/doc/ $(USERDEV)@astrodev:/var/www/html/htdocs/ + rsync -vlHrt --delete --progress --rsh=ssh --cvs-exclude $(ISISROOT)/docs/ $(USERDEV)@astrodev:/var/www/html/htdocs/ # copy Schemas to public www @@ -161,8 +161,8 @@ wwwschema: schemas echo " " echo "_______________________________________________________________________________" echo "SYNC: schemas to public server" - rsync -vlHrt --progress --rsh=ssh --cvs-exclude $(ISISROOT)/doc/Schemas/ $(USER)@isis-d:/var/www/html/htdocs/Schemas/ - rsync -vlHprt --delete --progress --rsh=ssh --cvs-exclude $(ISISROOT)/doc/assets $(USER)@isis-d:/var/www/html/htdocs/ + rsync -vlHrt --progress --rsh=ssh --cvs-exclude $(ISISROOT)/docs/Schemas/ $(USER)@isis-d:/var/www/html/htdocs/Schemas/ + rsync -vlHprt --delete --progress --rsh=ssh --cvs-exclude $(ISISROOT)/docs/assets $(USER)@isis-d:/var/www/html/htdocs/ @@ -182,4 +182,3 @@ syncdev: echo "~ SYNC DEV ~" echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" $(MAKE) devdoc - -- GitLab From 6bf151a41cbbd14381cce9cd98af16c5d592b270 Mon Sep 17 00:00:00 2001 From: Ian Humphrey Date: Wed, 14 Nov 2018 15:16:21 -0700 Subject: [PATCH 593/620] PixelTest (#536) * initial Pixel test * Add more test cases for Pixel * testing parameterization in Pixel test * testing function parameterization * parameterize static vs object methods * basic PixelTests implementation * clean up and more static tests * update PixelTests with float/dbl expects --- isis/tests/PixelTests.cpp | 481 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 481 insertions(+) create mode 100644 isis/tests/PixelTests.cpp diff --git a/isis/tests/PixelTests.cpp b/isis/tests/PixelTests.cpp new file mode 100644 index 0000000000..46ac5b0f7b --- /dev/null +++ b/isis/tests/PixelTests.cpp @@ -0,0 +1,481 @@ +#include + +#include +#include +#include +// #include +#include +#include + +#include "Pixel.h" +#include "SpecialPixel.h" + +using namespace Isis; + +TEST(Pixel, DefaultConstructor) { + Pixel p; + EXPECT_EQ(0, p.sample()); + EXPECT_EQ(0, p.line()); + EXPECT_EQ(0, p.band()); + EXPECT_EQ(Isis::Null, p.DN()); +} + +TEST(Pixel, Constructor1) { + Pixel p(0, 1, 2, 3.0); + EXPECT_EQ(0, p.sample()); + EXPECT_EQ(1, p.line()); + EXPECT_EQ(2, p.band()); + EXPECT_DOUBLE_EQ(3.0, p.DN()); +} + +TEST(Pixel, CopyConstructor) { + Pixel p(0, 1, 2, 3.0); + // Note this is equivalent to Pixel copy(p); + Pixel copy = p; + EXPECT_EQ(0, copy.sample()); + EXPECT_EQ(1, copy.line()); + EXPECT_EQ(2, copy.band()); + EXPECT_DOUBLE_EQ(3.0, copy.DN()); +} + +TEST(Pixel, CopyAssignment) { + Pixel p(0, 1, 2, 3.0); + Pixel copy; + copy = p; + EXPECT_EQ(0, copy.sample()); + EXPECT_EQ(1, copy.line()); + EXPECT_EQ(2, copy.band()); + EXPECT_DOUBLE_EQ(3.0, copy.DN()); +} + +TEST(Pixel, static_To8Bit) { + // Zero test + EXPECT_EQ(Isis::NULL1, Pixel::To8Bit(0.0)); + // Negative test + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel::To8Bit(-1.0)); + // Trivial positive test + EXPECT_EQ(1, Pixel::To8Bit(1.0)); + // Minimum valid input // Isis::ValidMinimum becomes \0 + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel::To8Bit(Isis::ValidMinimum)); + // Maximum valid input // Isis::ValidMaximum becomes \xFF (255) + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel::To8Bit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULL1, Pixel::To8Bit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel::To8Bit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT1, Pixel::To8Bit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel::To8Bit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT1, Pixel::To8Bit(Isis::Lis)); +} + +TEST(Pixel, To8Bit) { + // Zero test + EXPECT_EQ(Isis::NULL1, Pixel(1, 2, 3, 0.0).To8Bit()); + // Negative test + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel(1, 2, 3, -1.0).To8Bit()); + // Trivial positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To8Bit()); + // Minimum valid input // Isis::ValidMinimum becomes \0 + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel(1, 2, 3, Isis::ValidMinimum).To8Bit()); + // Maximum valid input // Isis::ValidMaximum becomes \xFF (255) + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel(1, 2, 3, Isis::ValidMaximum).To8Bit()); + // "Null" pixel + EXPECT_EQ(Isis::NULL1, Pixel(1, 2, 3, Isis::Null).To8Bit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel(1, 2, 3, Isis::Hrs).To8Bit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT1, Pixel(1, 2, 3, Isis::His).To8Bit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel(1, 2, 3, Isis::Lrs).To8Bit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT1, Pixel(1, 2, 3, Isis::Lis).To8Bit()); +} + +TEST(Pixel, static_To16UBit) { + // Zero test + EXPECT_EQ(Isis::NULLU2, Pixel::To16UBit(0.0)); + // Negative test // -1.0 becomes HIGH_REPR_SATU2, not LOW_REPR_SATU2 + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel::To16UBit(-1.0)); + // Positive test + EXPECT_EQ(1, Pixel::To16UBit(1.0)); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel::To16UBit(Isis::ValidMinimum)); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel::To16UBit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULLU2, Pixel::To16UBit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel::To16UBit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SATU2, Pixel::To16UBit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel::To16UBit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SATU2, Pixel::To16UBit(Isis::Lis)); +} + +TEST(Pixel, To16UBit) { + // Zero test + EXPECT_EQ(Isis::NULLU2, Pixel(1, 2, 3, 0.0).To16Ubit()); + // Negative test // -1.0 becomes HIGH_REPR_SATU2, not LOW_REPR_SATU2 + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel(1, 2, 3, -1.0).To16Ubit()); + // Positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To16Ubit()); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel(1, 2, 3, Isis::ValidMinimum).To16Ubit()); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel(1, 2, 3, Isis::ValidMaximum).To16Ubit()); + // "Null" pixel + EXPECT_EQ(Isis::NULLU2, Pixel(1, 2, 3, Isis::Null).To16Ubit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel(1, 2, 3, Isis::Hrs).To16Ubit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SATU2, Pixel(1, 2, 3, Isis::His).To16Ubit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel(1, 2, 3, Isis::Lrs).To16Ubit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SATU2, Pixel(1 ,2, 3, Isis::Lis).To16Ubit()); +} + +TEST(Pixel, static_To16Bit) { + // Zero test + EXPECT_EQ(0, Pixel::To16Bit(0.0)); + // Negative test + EXPECT_EQ(-1, Pixel::To16Bit(-1.0)); + // Positive test + EXPECT_EQ(1, Pixel::To16Bit(1.0)); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel::To16Bit(Isis::ValidMinimum)); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel::To16Bit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULL2, Pixel::To16Bit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel::To16Bit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT2, Pixel::To16Bit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel::To16Bit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT2, Pixel::To16Bit(Isis::Lis)); +} + +TEST(Pixel, To16Bit) { + // Zero test + EXPECT_EQ(0, Pixel(1, 2, 3, 0.0).To16Bit()); + // Negative test + EXPECT_EQ(-1, Pixel(1, 2, 3, -1.0).To16Bit()); + // Positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To16Bit()); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel(1, 2, 3, Isis::ValidMinimum).To16Bit()); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel(1, 2, 3, Isis::ValidMaximum).To16Bit()); + // "Null" pixel + EXPECT_EQ(Isis::NULL2, Pixel(1, 2, 3, Isis::Null).To16Bit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel(1, 2, 3, Isis::Hrs).To16Bit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT2, Pixel(1, 2, 3, Isis::His).To16Bit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel(1, 2, 3, Isis::Lrs).To16Bit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT2, Pixel(1, 2, 3, Isis::Lis).To16Bit()); +} + +TEST(Pixel, static_To32Bit) { + // Zero test + EXPECT_EQ(0, Pixel::To32Bit(0.0)); + // Negative test + EXPECT_EQ(-1, Pixel::To32Bit(-1.0)); + // Positive test + EXPECT_EQ(1, Pixel::To32Bit(1.0)); + // Minimum valid input + // EXPECT_FLOAT_EQ(Isis::LOW_REPR_SAT4, Pixel::To32Bit(Isis::ValidMinimum)); + // Maximum valid input // Isis::Maximum becomes inf (not IHIGH_REPR_SAT4) + // EXPECT_FLOAT_EQ(Isis::HIGH_REPR_SAT4, Pixel::To32Bit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULL4, Pixel::To32Bit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT4, Pixel::To32Bit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT4, Pixel::To32Bit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT4, Pixel::To32Bit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT4, Pixel::To32Bit(Isis::Lis)); +} + +TEST(Pixel, To32Bit) { + // Zero test + EXPECT_EQ(0, Pixel(1, 2, 3, 0.0).To32Bit()); + // Negative test + EXPECT_EQ(-1, Pixel(1, 2, 3, -1.0).To32Bit()); + // Positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To32Bit()); + // Minimum valid input + // EXPECT_EQ(Isis::LOW_REPR_SAT4, Pixel(1, 2, 3, Isis::ValidMinimum).To32Bit()); + // Maximum valid input // Isis::Maximum becomes inf (not HIGH_REPR_SAT4) + // EXPECT_FLOAT_EQ(Isis::HIGH_REPR_SAT4, Pixel(1, 2, 3, Isis::ValidMaximum).To32Bit()); + // "Null" pixel + EXPECT_EQ(Isis::NULL4, Pixel(1, 2, 3, Isis::Null).To32Bit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT4, Pixel(1, 2, 3, Isis::Hrs).To32Bit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT4, Pixel(1, 2, 3, Isis::His).To32Bit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT4, Pixel(1, 2, 3, Isis::Lrs).To32Bit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT4, Pixel(1, 2, 3, Isis::Lis).To32Bit()); +} + +TEST(Pixel, static_ToDouble) { + // unsigned char + unsigned char uc = 0; + EXPECT_DOUBLE_EQ(Isis::Null, Pixel::ToDouble(uc)); + + // short + short s = 0.0; + EXPECT_DOUBLE_EQ(0.0, Pixel::ToDouble(s)); + + // unsigned short + unsigned short us = 0.0; + EXPECT_DOUBLE_EQ(Isis::Null, Pixel::ToDouble(us)); + + // float + float f = 0.0; + EXPECT_DOUBLE_EQ(0.0, Pixel::ToDouble(f)); +} + +TEST(Pixel, ToDouble) { + EXPECT_EQ(0.0, Pixel(1, 2, 3, 0.0).ToDouble()); +} + +TEST(Pixel, static_ToFloat) { + // unsigned char + unsigned char uc = 0; + EXPECT_FLOAT_EQ(Isis::NULL4, Pixel::ToFloat(uc)); + + // short + short s = 0.0; + EXPECT_FLOAT_EQ(0.0, Pixel::ToFloat(s)); + + // unsigned short + unsigned short us = 0.0; + EXPECT_FLOAT_EQ(Isis::NULL4, Pixel::ToFloat(us)); + + // float + float f = 0.0; + EXPECT_FLOAT_EQ(0.0, Pixel::ToFloat(f)); +} + +TEST(Pixel, ToFloat) { + EXPECT_FLOAT_EQ(0.0, Pixel(1, 2, 3, 0.0).ToFloat()); +} + +TEST(Pixel, static_IsSpecial) { + EXPECT_TRUE(Pixel::IsSpecial(Isis::His)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Hrs)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Lis)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Lrs)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Null)); + EXPECT_FALSE(Pixel::IsSpecial(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsSpecial(Isis::ValidMinimum)); +} + +TEST(Pixel, IsSpecial) { + EXPECT_TRUE(Pixel(1,2,3,Isis::His).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Hrs).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lis).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lrs).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Null).IsSpecial()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsSpecial()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsSpecial()); +} + +TEST(Pixel, static_IsValid) { + EXPECT_FALSE(Pixel::IsValid(Isis::His)); + EXPECT_FALSE(Pixel::IsValid(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsValid(Isis::Lis)); + EXPECT_FALSE(Pixel::IsValid(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsValid(Isis::Null)); + EXPECT_TRUE(Pixel::IsValid(Isis::ValidMaximum)); + EXPECT_TRUE(Pixel::IsValid(Isis::ValidMinimum)); +} + +TEST(Pixel, IsValid) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsValid()); + EXPECT_TRUE(Pixel(1,2,3,Isis::ValidMaximum).IsValid()); + EXPECT_TRUE(Pixel(1,2,3,Isis::ValidMinimum).IsValid()); +} + +TEST(Pixel, static_IsNull) { + EXPECT_FALSE(Pixel::IsNull(Isis::His)); + EXPECT_FALSE(Pixel::IsNull(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsNull(Isis::Lis)); + EXPECT_FALSE(Pixel::IsNull(Isis::Lrs)); + EXPECT_TRUE(Pixel::IsNull(Isis::Null)); + EXPECT_FALSE(Pixel::IsNull(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsNull(Isis::ValidMinimum)); +} + +TEST(Pixel, IsNull) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsNull()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Null).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsNull()); +} + +TEST(Pixel, static_IsHigh) { + EXPECT_TRUE (Pixel::IsHigh(Isis::His)); + EXPECT_TRUE (Pixel::IsHigh(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsHigh(Isis::Lis)); + EXPECT_FALSE(Pixel::IsHigh(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsHigh(Isis::Null)); + EXPECT_FALSE(Pixel::IsHigh(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsHigh(Isis::ValidMinimum)); +} + +TEST(Pixel, IsHigh) { + EXPECT_TRUE(Pixel(1,2,3,Isis::His).IsHigh()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Hrs).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsHigh()); +} + +TEST(Pixel, static_IsLow) { + EXPECT_FALSE(Pixel::IsLow(Isis::His)); + EXPECT_FALSE(Pixel::IsLow(Isis::Hrs)); + EXPECT_TRUE(Pixel::IsLow(Isis::Lis)); + EXPECT_TRUE(Pixel::IsLow(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsLow(Isis::Null)); + EXPECT_FALSE(Pixel::IsLow(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsLow(Isis::ValidMinimum)); +} + +TEST(Pixel, IsLow) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsLow()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lis).IsLow()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lrs).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsLow()); +} + +TEST(Pixel, static_IsHrs) { + EXPECT_FALSE(Pixel::IsHrs(Isis::His)); + EXPECT_TRUE(Pixel::IsHrs(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsHrs(Isis::Lis)); + EXPECT_FALSE(Pixel::IsHrs(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsHrs(Isis::Null)); + EXPECT_FALSE(Pixel::IsHrs(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsHrs(Isis::ValidMinimum)); +} + +TEST(Pixel, IsHrs) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsHrs()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Hrs).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsHrs()); +} + +TEST(Pixel, static_IsHis) { + EXPECT_TRUE(Pixel::IsHis(Isis::His)); + EXPECT_FALSE(Pixel::IsHis(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsHis(Isis::Lis)); + EXPECT_FALSE(Pixel::IsHis(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsHis(Isis::Null)); + EXPECT_FALSE(Pixel::IsHis(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsHis(Isis::ValidMinimum)); +} + +TEST(Pixel, IsHis) { + EXPECT_TRUE(Pixel(1,2,3,Isis::His).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsHis()); +} + +TEST(Pixel, static_IsLis) { + EXPECT_FALSE(Pixel::IsLis(Isis::His)); + EXPECT_FALSE(Pixel::IsLis(Isis::Hrs)); + EXPECT_TRUE(Pixel::IsLis(Isis::Lis)); + EXPECT_FALSE(Pixel::IsLis(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsLis(Isis::Null)); + EXPECT_FALSE(Pixel::IsLis(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsLis(Isis::ValidMinimum)); +} + +TEST(Pixel, IsLis) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsLis()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lis).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsLis()); +} + +TEST(Pixel, static_IsLrs) { + EXPECT_FALSE(Pixel::IsLrs(Isis::His)); + EXPECT_FALSE(Pixel::IsLrs(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsLrs(Isis::Lis)); + EXPECT_TRUE(Pixel::IsLrs(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsLrs(Isis::Null)); + EXPECT_FALSE(Pixel::IsLrs(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsLrs(Isis::ValidMinimum)); +} + +TEST(Pixel, IsLrs) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsLrs()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lrs).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsLrs()); +} + +TEST(Pixel, static_ToString) { + EXPECT_EQ(std::string("1"), Pixel::ToString(1.0)); + EXPECT_EQ(std::string("-1.2"), Pixel::ToString(-1.2)); + // Special pixels + EXPECT_EQ(std::string("His"), Pixel::ToString(Isis::His)); + EXPECT_EQ(std::string("Hrs"), Pixel::ToString(Isis::Hrs)); + EXPECT_EQ(std::string("Lis"), Pixel::ToString(Isis::Lis)); + EXPECT_EQ(std::string("Lrs"), Pixel::ToString(Isis::Lrs)); + EXPECT_EQ(std::string("Null"), Pixel::ToString(Isis::Null)); + EXPECT_EQ(std::string("Invalid"), Pixel::ToString(-1.0e+1000)); +} + +TEST(Pixel, ToString) { + EXPECT_EQ(std::string("1"), Pixel(1,2,3,1.0).ToString()); + EXPECT_EQ(std::string("-1.2"), Pixel(1,2,3,-1.2).ToString()); + // Special pixels + EXPECT_EQ(std::string("His"), Pixel(1,2,3,Isis::His).ToString()); + EXPECT_EQ(std::string("Hrs"), Pixel(1,2,3,Isis::Hrs).ToString()); + EXPECT_EQ(std::string("Lis"), Pixel(1,2,3,Isis::Lis).ToString()); + EXPECT_EQ(std::string("Lrs"), Pixel(1,2,3,Isis::Lrs).ToString()); + EXPECT_EQ(std::string("Null"), Pixel(1,2,3,Isis::Null).ToString()); + EXPECT_EQ(std::string("Invalid"), Pixel(1,2,3,-1.0e+1000).ToString()); +} -- GitLab From c6fa36771f0e12559fafafefff4233d7de150795 Mon Sep 17 00:00:00 2001 From: Ross Beyer Date: Wed, 14 Nov 2018 15:28:15 -0800 Subject: [PATCH 594/620] Update isis3VarInit.py Unnecessary 'touch'ing, the '>' redirect will create the file if it doesn't exist. Also, the first redirect should be the single '>'. Otherwise, multiple runs of this program will continue appending to these files. They still work, its just a lot of setting and unsetting for no good reason. --- isis/scripts/isis3VarInit.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/isis/scripts/isis3VarInit.py b/isis/scripts/isis3VarInit.py index 122d23f0ae..0f2e57a70d 100755 --- a/isis/scripts/isis3VarInit.py +++ b/isis/scripts/isis3VarInit.py @@ -45,15 +45,12 @@ else: os.popen('mkdir -p '+isisroot+'/etc/conda/activate.d') os.popen('mkdir -p '+isisroot+'/etc/conda/deactivate.d') -os.popen('touch '+isisroot+'/etc/conda/activate.d/env_vars.sh') -os.popen('touch '+isisroot+'/etc/conda/activate.d/env_vars.sh') - -os.popen("echo '#!/bin/sh' >> "+isisroot+ "/etc/conda/activate.d/env_vars.sh") +os.popen("echo '#!/bin/sh' > "+isisroot+ "/etc/conda/activate.d/env_vars.sh") os.popen("echo 'export ISISROOT="+isisroot+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh") os.popen("echo 'export ISIS3DATA="+data_dir+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh") os.popen("echo 'export ISIS3TESTDATA="+testdata_dir+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh") -os.popen("echo '#!/bin/sh' >> "+isisroot+ "/etc/conda/deactivate.d/env_vars.sh") +os.popen("echo '#!/bin/sh' > "+isisroot+ "/etc/conda/deactivate.d/env_vars.sh") os.popen("echo 'unset ISISROOT' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh") os.popen("echo 'unset ISIS3DATA' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh") os.popen("echo 'unset ISIS3TESTDATA' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh") -- GitLab From 740d5de1d69b1a70937e2f1bd882763547ffb409 Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Thu, 15 Nov 2018 17:08:25 -0700 Subject: [PATCH 595/620] Fixed isis3Startup scripts --- isis/scripts/isis3Startup.csh | 4 +++- isis/scripts/isis3Startup.py | 2 +- isis/scripts/isis3Startup.sh | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/isis/scripts/isis3Startup.csh b/isis/scripts/isis3Startup.csh index a237ab10bc..1d76bec235 100755 --- a/isis/scripts/isis3Startup.csh +++ b/isis/scripts/isis3Startup.csh @@ -24,6 +24,8 @@ # to "/usgs/cpkgs/isis3/testData" # SEP 08 2017 - Christopher Combs - Removed setting of QT_PLUGIN_PATH as # an environment variable. Fixes #4617 +# NOV 15 2018 - Jesse Mapel - Changed default ISISROOT to new install +# directory. #_VER $Id: isis3Startup.csh,v 1.5 2010/03/16 19:40:22 ehyer Exp $ #_END ################################################################################ @@ -34,7 +36,7 @@ set Platform = `uname -s` # Initialize the ISISROOT environment variable if it doesn't exist # TODO: Test is obsolete, fail if no isisroot is set if ($?ISISROOT == 0) then - setenv ISISROOT /usgs/pkgs/isis3/isis + setenv ISISROOT /usgs/pkgs/isis3/install endif # Initialize the ISIS3DATA environment variable diff --git a/isis/scripts/isis3Startup.py b/isis/scripts/isis3Startup.py index cbdaf95424..e9d436e1c9 100755 --- a/isis/scripts/isis3Startup.py +++ b/isis/scripts/isis3Startup.py @@ -12,7 +12,7 @@ def setisis(): #... and if it's not give it a default value if ISISROOT is None: - ISISROOT = "/usgs/pkgs/isis3/isis" + ISISROOT = "/usgs/pkgs/isis3/install" os.environ['ISISROOT'] = ISISROOT #Check for the ISIS3DATA directory. If it does not exist use a default diff --git a/isis/scripts/isis3Startup.sh b/isis/scripts/isis3Startup.sh index d9728383d5..e87d03a13e 100755 --- a/isis/scripts/isis3Startup.sh +++ b/isis/scripts/isis3Startup.sh @@ -12,7 +12,7 @@ # the Isis distribution # if [ ! "$ISISROOT" ]; then - ISISROOT=/usgs/pkgs/isis3/isis + ISISROOT=/usgs/pkgs/isis3/install export ISISROOT fi -- GitLab From e0aba61879f1ad333540325b3f19979ff0aae2b0 Mon Sep 17 00:00:00 2001 From: Kristin Date: Fri, 16 Nov 2018 11:18:32 -0700 Subject: [PATCH 596/620] Clean up rosetta virtis changes --- .../base/objs/SpiceRotation/SpiceRotation.cpp | 27 ++++++------------- .../base/objs/SpiceRotation/SpiceRotation.h | 1 - .../apps/rosvirtis2isis/rosvirtis2isis.cpp | 12 ++++++--- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp b/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp index 3081dd3cb9..d3b821508f 100644 --- a/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp +++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp @@ -306,9 +306,7 @@ namespace Isis { * @param status The DownsizeStatus enumeration value. */ void SpiceRotation::MinimizeCache(DownsizeStatus status) { -// if (p_minimizeCache != DownsizeStatus::Fixed) { - p_minimizeCache = status; -// } + p_minimizeCache = status; } @@ -609,9 +607,7 @@ namespace Isis { if (p_degree > 0 && p_cacheAv.size() > 1) p_cacheAv.clear(); // Load the time cache first -// if (p_minimizeCache != Fixed) { - p_minimizeCache = No; -// } + p_minimizeCache = No; LoadTimeCache(); if (p_fullCacheSize > 1) { @@ -639,9 +635,7 @@ namespace Isis { p_cacheAv.clear(); // Reload the time cache first -// if (p_minimizeCache != Fixed) { - p_minimizeCache = No; -// } + p_minimizeCache = No; LoadTimeCache(); for (std::vector::size_type pos = 0; pos < maxSize; pos++) { @@ -721,9 +715,7 @@ namespace Isis { //std::cout << "Full cache size is " << p_cache.size() << endl; -// if (p_minimizeCache != Fixed) { - p_minimizeCache = Yes; -// } + p_minimizeCache = Yes; LoadTimeCache(); //std::cout << "Minimized cache size is " << p_cache.size() << endl; @@ -1941,7 +1933,6 @@ namespace Isis { // NEW: sets the cache time void SpiceRotation::SetCacheTime(std::vector cacheTime) { -// MinimizeCache(DownsizeStatus::Fixed); // look at this later. Needed for VIRTIS-M // Do not reset the cache times if they are already loaded. if (p_cacheTime.size() <= 0) { p_cacheTime = cacheTime; @@ -2312,7 +2303,7 @@ namespace Isis { ktotal_c("ck", (SpiceInt *) &count); // Downsize the loaded cache - if ((p_source == Memcache) && p_minimizeCache == Yes) { // FIXME me (skip this if: minimizeCache == no) + if ((p_source == Memcache) && p_minimizeCache == Yes) { // Multiple ck case, type 5 ck case, or PolyFunctionOverSpice // final step -- downsize loaded cache and reload @@ -2413,8 +2404,8 @@ namespace Isis { dafus_c(sum, (SpiceInt) 2, (SpiceInt) 6, dc, ic); // Don't read type 5 ck here - if (ic[2] == 5) break; // FIXME: ic[2] is the ck type -// + if (ic[2] == 5) break; + // Check times for type 3 ck segment if spacecraft matches if (ic[0] == spCode && ic[2] == 3) { sct2e_c((int) spCode / 1000, dc[0], &segStartEt); @@ -2492,7 +2483,6 @@ namespace Isis { throw IException(IException::User, msg, _FILEINFO_); } - // FIXME: this is the only place we can go with p_minimizeCache = No // Load times according to cache size (body rotations) -- handle first round of type 5 ck case // and multiple ck case --Load a time for every line scan line and downsize later if (! (timeLoaded || (p_cacheTime.size() > 1))) { @@ -2503,8 +2493,7 @@ namespace Isis { p_cacheTime.push_back(p_fullCacheStartTime + (double) i * cacheSlope); // could try to change the kernels: type, resample, something else? check on type 2 or 3, concerned about interpolation // it's already type 2 or 3... - // FIXME - if (p_source == Nadir) { //&& (p_minimizeCache != Fixed)) { + if (p_source == Nadir) { p_minimizeCache = No; } } diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.h b/isis/src/base/objs/SpiceRotation/SpiceRotation.h index 0727530d91..3d53c04b2f 100644 --- a/isis/src/base/objs/SpiceRotation/SpiceRotation.h +++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.h @@ -281,7 +281,6 @@ namespace Isis { Yes, //!< Downsize the cache Done, //!< Cache is downsized No, //!< Do not downsize the cache - Fixed //!< Never downsize the cache }; /** diff --git a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp b/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp index 3c01f2114c..d471ed55bd 100644 --- a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp +++ b/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp @@ -408,13 +408,17 @@ void IsisMain () SpiceDouble etEnd; scs2e_c( (SpiceInt) -226, startScet.toLatin1().data(), &etStart); scs2e_c( (SpiceInt) -226, stopScet.toLatin1().data(), &etEnd); - QString startTime = iTime(etStart-16.0).UTC(); - QString stopTime = iTime(etEnd-16.0).UTC(); + + PvlKeyword &frameParam = inst["FrameParameter"]; + exposureTime = toDouble(frameParam[0]); + + QString startTime = iTime(etStart-exposureTime).UTC(); + QString stopTime = iTime(etEnd-exposureTime).UTC(); SpiceChar startSclkString[50]; SpiceChar endSclkString[50]; - sce2s_c( (SpiceInt) -226, etStart-16.0, (SpiceInt) 50, startSclkString); - sce2s_c( (SpiceInt) -226, etEnd-16.0, (SpiceInt) 50, endSclkString); + sce2s_c( (SpiceInt) -226, etStart-exposureTime, (SpiceInt) 50, startSclkString); + sce2s_c( (SpiceInt) -226, etEnd-exposureTime, (SpiceInt) 50, endSclkString); inst.findKeyword("StartTime").setValue(startTime); inst.findKeyword("StopTime").setValue(stopTime); -- GitLab From 4b474f53a2ab997ff10e37ead066069b799188df Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Fri, 16 Nov 2018 16:33:06 -0700 Subject: [PATCH 597/620] Refactored stats to a functions --- isis/src/base/apps/stats/StatsFunc.cpp | 175 +++++++++++++++++++++ isis/src/base/apps/stats/StatsFunc.h | 19 +++ isis/src/base/apps/stats/stats.cpp | 122 +-------------- isis/src/base/objs/Cube/Cube.h | 17 +- isis/tests/StatsFuncTests.cpp | 209 +++++++++++++++++++++++++ 5 files changed, 415 insertions(+), 127 deletions(-) create mode 100644 isis/src/base/apps/stats/StatsFunc.cpp create mode 100644 isis/src/base/apps/stats/StatsFunc.h create mode 100644 isis/tests/StatsFuncTests.cpp diff --git a/isis/src/base/apps/stats/StatsFunc.cpp b/isis/src/base/apps/stats/StatsFunc.cpp new file mode 100644 index 0000000000..59ddac7e5a --- /dev/null +++ b/isis/src/base/apps/stats/StatsFunc.cpp @@ -0,0 +1,175 @@ +#include "StatsFunc.h" + +#include +#include + +#include "Application.h" +#include "CubeAttribute.h" +#include "Cube.h" +#include "FileName.h" +#include "Histogram.h" +#include "Pvl.h" +#include "UserInterface.h" + +using namespace std; +using namespace Isis; + +namespace Isis { + + /** + * Compute the stats for an ISIS cube. This is the programmatic interface to + * the ISIS3 stats application. + * + * @param ui The User Interface to parse the parameters from + */ + void stats(UserInterface &ui) { + + Cube *inputCube = new Cube(); + CubeAttributeInput inAtt(ui.GetAsString("FROM")); + inputCube->setVirtualBands(inAtt.bands()); + inputCube->open(ui.GetFileName("FROM")); + + double validMin = Isis::ValidMinimum; + double validMax = Isis::ValidMaximum; + + if ( ui.WasEntered("VALIDMIN") ) { + validMin = ui.GetDouble("VALIDMIN"); + } + + if ( ui.WasEntered("VALIDMAX") ) { + validMax = ui.GetDouble("VALIDMAX"); + } + + Pvl statsPvl = stats(inputCube, validMin, validMax); + + for (int resultIndex = 0; resultIndex < statsPvl.groups(); resultIndex++) { + if (statsPvl.group(resultIndex).name() == "Results") { + Application::Log(statsPvl.group(resultIndex)); + } + } + + delete inputCube; + inputCube = nullptr; + + if ( ui.WasEntered("TO") ) { + QString outFile = FileName(ui.GetFileName("TO")).expanded(); + bool append = ui.GetBoolean("APPEND"); + //write the results in the requested format. + if ( ui.GetString("FORMAT") == "PVL" ) { + if (append) { + statsPvl.append(outFile); + } + else { + statsPvl.write(outFile); + } + } + else { + bool exists = FileName(outFile).fileExists(); + bool writeHeader = false; + ofstream *os = new ofstream; + if (append) { + os->open(outFile.toLatin1().data(), ios::app); + if (!exists) { + writeHeader = true; + } + } + else { + os->open(outFile.toLatin1().data(), ios::out); + writeHeader = true; + } + writeStatsStream(statsPvl, writeHeader, os); + delete os; + os = nullptr; + } + } + } + + + /** + * Compute statistics about a Cube and store them in a PVL object. + * + * @param cube The cube to compute the statistics of + * @param validMin The minimum pixel value to include in the statistics + * @param validMax The maximum pixel value to include in the statistics + * + * @return @b Pvl The statistics for the cube in a Pvl object + * + * @see Cube::histogram + */ + Pvl stats(Cube *cube, double validMin, double validMax) { + + // Set a global Pvl for storing results + Pvl statsPvl; + + // Get the number of bands to process + int bandCount = cube->bandCount(); + + for (int i = 1; i <= bandCount; i++) { + Histogram *stats = cube->histogram(i, validMin, validMax); + + // Construct a label with the results + PvlGroup results("Results"); + results += PvlKeyword("From", cube->fileName()); + results += PvlKeyword("Band", toString(cube->physicalBand(i))); + if ( stats->ValidPixels() != 0 ) { + results += PvlKeyword("Average", toString(stats->Average())); + results += PvlKeyword("StandardDeviation", toString(stats->StandardDeviation())); + results += PvlKeyword("Variance", toString(stats->Variance())); + // These statistics only worked on a histogram + results += PvlKeyword("Median", toString(stats->Median())); + results += PvlKeyword("Mode", toString(stats->Mode())); + results += PvlKeyword("Skew", toString(stats->Skew())); + results += PvlKeyword("Minimum", toString(stats->Minimum())); + results += PvlKeyword("Maximum", toString(stats->Maximum())); + results += PvlKeyword("Sum", toString(stats->Sum())); + } + results += PvlKeyword("TotalPixels", toString(stats->TotalPixels())); + results += PvlKeyword("ValidPixels", toString(stats->ValidPixels())); + results += PvlKeyword("OverValidMaximumPixels", toString(stats->OverRangePixels())); + results += PvlKeyword("UnderValidMinimumPixels", toString(stats->UnderRangePixels())); + results += PvlKeyword("NullPixels", toString(stats->NullPixels())); + results += PvlKeyword("LisPixels", toString(stats->LisPixels())); + results += PvlKeyword("LrsPixels", toString(stats->LrsPixels())); + results += PvlKeyword("HisPixels", toString(stats->HisPixels())); + results += PvlKeyword("HrsPixels", toString(stats->HrsPixels())); + + statsPvl.addGroup(results); + + delete stats; + stats = nullptr; + } + + return statsPvl; + } + + + /** + * Write a statistics Pvl to an output stream in a CSV format. + * + * @param statsPvl The Pvl to write out + * @param writeHeader If a header line should be written + * @param stram The stream to write to + */ + void writeStatsStream(const Pvl &statsPvl, bool writeHeader, ostream *stream) { + if (writeHeader) { + for (int i = 0; i < statsPvl.group(0).keywords(); i++) { + *stream << statsPvl.group(0)[i].name(); + if ( i < statsPvl.group(0).keywords() - 1 ) { + *stream << ","; + } + } + *stream << endl; + } + + for (int i = 0; i < statsPvl.groups(); i++) { + for (int j = 0; j < statsPvl.group(i).keywords(); j++) { + *stream << (QString) statsPvl.group(i)[j]; + if ( j < statsPvl.group(i).keywords() - 1 ) { + *stream << ","; + } + } + *stream << endl; + } + } + +} diff --git a/isis/src/base/apps/stats/StatsFunc.h b/isis/src/base/apps/stats/StatsFunc.h new file mode 100644 index 0000000000..d1d075caa2 --- /dev/null +++ b/isis/src/base/apps/stats/StatsFunc.h @@ -0,0 +1,19 @@ +#include +#include + +#include + +#include "Cube.h" +#include "UserInterface.h" + +namespace Isis { + extern void stats(UserInterface &ui); + extern Pvl stats( + Cube *cube, + double validMin, + double validMax); + extern void writeStatsStream( + const Pvl &statsPvl, + bool writeHeader, + std::ostream *stream); +} diff --git a/isis/src/base/apps/stats/stats.cpp b/isis/src/base/apps/stats/stats.cpp index 55ae598b81..1e20a388a6 100644 --- a/isis/src/base/apps/stats/stats.cpp +++ b/isis/src/base/apps/stats/stats.cpp @@ -1,127 +1,11 @@ #include "Isis.h" -#include -#include +#include "UserInterface.h" +#include "StatsFunc.h" -#include "Cube.h" -#include "Process.h" -#include "Histogram.h" -#include "Pvl.h" - -using namespace std; using namespace Isis; void IsisMain() { - UserInterface &ui = Application::GetUserInterface(); - Process process; - - // Get the histogram - Cube *inputCube = process.SetInputCube("FROM"); - - double validMin = Isis::ValidMinimum; - double validMax = Isis::ValidMaximum; - - if ( ui.WasEntered("VALIDMIN") ) { - validMin = ui.GetDouble("VALIDMIN"); - } - - if ( ui.WasEntered("VALIDMAX") ) { - validMax = ui.GetDouble("VALIDMAX"); - } - - // Set a global Pvl for storing results - Pvl mainPvl; - - // Get the number of bands to process - int bandCount = inputCube->bandCount(); - - for (int i = 1; i <= bandCount; i++) { - Histogram *stats = inputCube->histogram(i, validMin, validMax); - - // Construct a label with the results - PvlGroup results("Results"); - results += PvlKeyword("From", inputCube->fileName()); - results += PvlKeyword("Band", toString(inputCube->physicalBand(i))); - if ( stats->ValidPixels() != 0 ) { - results += PvlKeyword("Average", toString(stats->Average())); - results += PvlKeyword("StandardDeviation", toString(stats->StandardDeviation())); - results += PvlKeyword("Variance", toString(stats->Variance())); - // These statistics only worked on a histogram - results += PvlKeyword("Median", toString(stats->Median())); - results += PvlKeyword("Mode", toString(stats->Mode())); - results += PvlKeyword("Skew", toString(stats->Skew())); - results += PvlKeyword("Minimum", toString(stats->Minimum())); - results += PvlKeyword("Maximum", toString(stats->Maximum())); - results += PvlKeyword("Sum", toString(stats->Sum())); - } - results += PvlKeyword("TotalPixels", toString(stats->TotalPixels())); - results += PvlKeyword("ValidPixels", toString(stats->ValidPixels())); - results += PvlKeyword("OverValidMaximumPixels", toString(stats->OverRangePixels())); - results += PvlKeyword("UnderValidMinimumPixels", toString(stats->UnderRangePixels())); - results += PvlKeyword("NullPixels", toString(stats->NullPixels())); - results += PvlKeyword("LisPixels", toString(stats->LisPixels())); - results += PvlKeyword("LrsPixels", toString(stats->LrsPixels())); - results += PvlKeyword("HisPixels", toString(stats->HisPixels())); - results += PvlKeyword("HrsPixels", toString(stats->HrsPixels())); - - mainPvl.addGroup(results); - - delete stats; - stats = NULL; - - // Write the results to the log - Application::Log(results); - } - - // Write the results to the output file if the user specified one - if ( ui.WasEntered("TO") ) { - QString outFile = FileName(ui.GetFileName("TO")).expanded(); - bool exists = FileName(outFile).fileExists(); - bool append = ui.GetBoolean("APPEND"); - ofstream os; - bool writeHeader = false; - //write the results in the requested format. - if ( ui.GetString("FORMAT") == "PVL" ) { - if (append) { - mainPvl.append(outFile); - } - else { - mainPvl.write(outFile); - } - } - else { - //if the format was not PVL, write out a flat file. - if (append) { - os.open(outFile.toLatin1().data(), ios::app); - if (!exists) { - writeHeader = true; - } - } - else { - os.open(outFile.toLatin1().data(), ios::out); - writeHeader = true; - } - - if (writeHeader) { - for (int i = 0; i < mainPvl.group(0).keywords(); i++) { - os << mainPvl.group(0)[i].name(); - if ( i < mainPvl.group(0).keywords() - 1 ) { - os << ","; - } - } - os << endl; - } - - for (int i = 0; i < mainPvl.groups(); i++) { - for (int j = 0; j < mainPvl.group(i).keywords(); j++) { - os << (QString) mainPvl.group(i)[j]; - if ( j < mainPvl.group(i).keywords() - 1 ) { - os << ","; - } - } - os << endl; - } - } - } + stats(ui); } diff --git a/isis/src/base/objs/Cube/Cube.h b/isis/src/base/objs/Cube/Cube.h index 7632d4d83e..6a131722f7 100644 --- a/isis/src/base/objs/Cube/Cube.h +++ b/isis/src/base/objs/Cube/Cube.h @@ -164,6 +164,7 @@ namespace Isis { * make sure we get absolute path. Fixes #5276. * @history 2018-01-18 Summer Stapleton - Updated error message in ::create() to address when * an IsisPreference file cannot be found. Fixes #5145. + * @history 2018-11-16 Jesse Mapel - Made several methods virtual for mocking. */ class Cube { public: @@ -265,24 +266,24 @@ namespace Isis { void relocateDnData(FileName dnDataFile); // static void relocateDnData(FileName externalLabelFile, FileName dnDataFile); - int bandCount() const; + virtual int bandCount() const; double base() const; ByteOrder byteOrder() const; Camera *camera(); FileName externalCubeFileName() const; - QString fileName() const; + virtual QString fileName() const; Format format() const; - Histogram *histogram(const int &band = 1, - QString msg = "Gathering histogram"); - Histogram *histogram(const int &band, const double &validMin, - const double &validMax, - QString msg = "Gathering histogram"); + virtual Histogram *histogram(const int &band = 1, + QString msg = "Gathering histogram"); + virtual Histogram *histogram(const int &band, const double &validMin, + const double &validMax, + QString msg = "Gathering histogram"); Pvl *label() const; int labelSize(bool actual = false) const; int lineCount() const; double multiplier() const; PixelType pixelType() const; - int physicalBand(const int &virtualBand) const; + virtual int physicalBand(const int &virtualBand) const; Projection *projection(); int sampleCount() const; Statistics *statistics(const int &band = 1, diff --git a/isis/tests/StatsFuncTests.cpp b/isis/tests/StatsFuncTests.cpp new file mode 100644 index 0000000000..52128ac469 --- /dev/null +++ b/isis/tests/StatsFuncTests.cpp @@ -0,0 +1,209 @@ +#include "StatsFunc.h" + +#include + +#include "gmock/gmock.h" + +#include "Cube.h" +#include "FileName.h" +#include "Histogram.h" +#include "Pvl.h" +#include "SpecialPixel.h" + +using namespace Isis; + +class MockCube : public Cube { + public: + MOCK_CONST_METHOD0(bandCount, int()); + MOCK_CONST_METHOD0(fileName, QString()); + MOCK_CONST_METHOD1(physicalBand, int(const int &virtualBand)); + MOCK_METHOD4(histogram, Histogram*( + const int &band, const double &validMin, + const double &validMax, + QString msg)); +}; + +class StatsFunc_FlatFileTest : public ::testing::Test { + protected: + Pvl testPvl; + + void SetUp() override { + PvlGroup firstGroup("FirstGroup"); + firstGroup += PvlKeyword("NumberKey", "0.0"); + firstGroup += PvlKeyword("StringKey", "Hello"); + testPvl += firstGroup; + + PvlGroup secondGroup("SecondGroup"); + PvlKeyword dupKey("DuplicateKey", "stats here"); + secondGroup += dupKey; + secondGroup += dupKey; + testPvl += secondGroup; + } +}; + +class StatsFunc_MockHist : public ::testing::Test { + protected: + MockCube *mockCube; + + void SetUp() override { + mockCube = nullptr; + + Histogram *testBand1Stats = new Histogram(-10, 10, 21); + for (int val = -10; val <=10; val++) { + testBand1Stats->AddData(val); + } + testBand1Stats->AddData(0.0); + + Histogram *testBand2Stats = new Histogram(-10, 10, 21); + testBand2Stats->AddData(Null); + testBand2Stats->AddData(Lrs); + testBand2Stats->AddData(Lis); + testBand2Stats->AddData(His); + testBand2Stats->AddData(Hrs); + + mockCube = new MockCube(); + EXPECT_CALL(*mockCube, bandCount()) + .Times(1) + .WillOnce(::testing::Return(2)); + EXPECT_CALL(*mockCube, histogram(1, ::testing::_, ::testing::_, ::testing::_)) + .Times(1) + .WillOnce(::testing::Return(testBand1Stats)); + EXPECT_CALL(*mockCube, histogram(2, ::testing::_, ::testing::_, ::testing::_)) + .Times(1) + .WillOnce(::testing::Return(testBand2Stats)); + EXPECT_CALL(*mockCube, fileName()) + .Times(2) + .WillRepeatedly(::testing::Return("TestCube.cub")); + EXPECT_CALL(*mockCube, physicalBand(1)) + .Times(1) + .WillOnce(::testing::Return(1)); + EXPECT_CALL(*mockCube, physicalBand(2)) + .Times(1) + .WillOnce(::testing::Return(2)); + } + + void TearDown() override { + if (mockCube) { + delete mockCube; + mockCube = nullptr; + } + // The histograms will be cleaned up by the stats function + } +}; + + +TEST_F(StatsFunc_MockHist, TestStats) { + Pvl statsPvl = stats( + mockCube, + Isis::ValidMinimum, + Isis::ValidMaximum); + + ASSERT_EQ(statsPvl.groups(), 2); + + PvlGroup band1Stats = statsPvl.group(0); + EXPECT_EQ("TestCube.cub", (QString) (band1Stats.findKeyword("From"))); + EXPECT_EQ(1, (int) (band1Stats.findKeyword("Band"))); + EXPECT_EQ(22, (int) (band1Stats.findKeyword("ValidPixels"))); + EXPECT_EQ(22, (int) (band1Stats.findKeyword("TotalPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("OverValidMaximumPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("UnderValidMinimumPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("NullPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("LisPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("LrsPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("HisPixels"))); + EXPECT_EQ(0, (int) (band1Stats.findKeyword("HrsPixels"))); + EXPECT_EQ(0.0, (double) (band1Stats.findKeyword("Average"))); + EXPECT_NEAR(6.0553, (double) (band1Stats.findKeyword("StandardDeviation")), 0.0001); + EXPECT_NEAR(36.6667, (double) (band1Stats.findKeyword("Variance")), 0.0001); + EXPECT_EQ(0.0, (double) (band1Stats.findKeyword("Median"))); + EXPECT_EQ(0.0, (double) (band1Stats.findKeyword("Mode"))); + EXPECT_EQ(0.0, (double) (band1Stats.findKeyword("Skew"))); + EXPECT_EQ(-10, (double) (band1Stats.findKeyword("Minimum"))); + EXPECT_EQ(10.0, (double) (band1Stats.findKeyword("Maximum"))); + EXPECT_EQ(0.0, (double) (band1Stats.findKeyword("Sum"))); + + PvlGroup band2Stats = statsPvl.group(1); + EXPECT_EQ("TestCube.cub", (QString) (band2Stats.findKeyword("From"))); + EXPECT_EQ(2, (int) (band2Stats.findKeyword("Band"))); + EXPECT_EQ(0, (int) (band2Stats.findKeyword("ValidPixels"))); + EXPECT_EQ(5, (int) (band2Stats.findKeyword("TotalPixels"))); + EXPECT_EQ(0, (int) (band2Stats.findKeyword("OverValidMaximumPixels"))); + EXPECT_EQ(0, (int) (band2Stats.findKeyword("UnderValidMinimumPixels"))); + EXPECT_EQ(1, (int) (band2Stats.findKeyword("NullPixels"))); + EXPECT_EQ(1, (int) (band2Stats.findKeyword("LisPixels"))); + EXPECT_EQ(1, (int) (band2Stats.findKeyword("LrsPixels"))); + EXPECT_EQ(1, (int) (band2Stats.findKeyword("HisPixels"))); + EXPECT_EQ(1, (int) (band2Stats.findKeyword("HrsPixels"))); +} + +TEST(StatsFunc, ValidMinimum) { + Histogram *testStats = new Histogram(-1000,1000); + + MockCube *mockCube = new MockCube(); + EXPECT_CALL(*mockCube, bandCount()) + .Times(1) + .WillOnce(::testing::Return(1)); + EXPECT_CALL(*mockCube, histogram(1, 0.0, ::testing::_, ::testing::_)) + .Times(1) + .WillOnce(::testing::Return(testStats)); + EXPECT_CALL(*mockCube, fileName()) + .Times(1) + .WillRepeatedly(::testing::Return("TestCube.cub")); + EXPECT_CALL(*mockCube, physicalBand(1)) + .Times(1) + .WillOnce(::testing::Return(1)); + + Pvl statsPvl = stats( + dynamic_cast(mockCube), + 0.0, + Isis::ValidMaximum); + + delete mockCube; + mockCube = nullptr; + // The histogram will be cleaned up in the stats function +} + +TEST(StatsFunc, ValidMaximum) { + Histogram *testStats = new Histogram(-1000,1000); + + MockCube *mockCube = new MockCube(); + EXPECT_CALL(*mockCube, bandCount()) + .Times(1) + .WillOnce(::testing::Return(1)); + EXPECT_CALL(*mockCube, histogram(1, ::testing::_, 0.0, ::testing::_)) + .Times(1) + .WillOnce(::testing::Return(testStats)); + EXPECT_CALL(*mockCube, fileName()) + .Times(1) + .WillRepeatedly(::testing::Return("TestCube.cub")); + EXPECT_CALL(*mockCube, physicalBand(1)) + .Times(1) + .WillOnce(::testing::Return(1)); + + Pvl statsPvl = stats( + dynamic_cast(mockCube), + Isis::ValidMinimum, + 0.0); + + delete mockCube; + mockCube = nullptr; + // The histogram will be cleaned up in the stats function +} + +TEST_F(StatsFunc_FlatFileTest, FlatFile) { + std::ostringstream *testStream = new std::ostringstream(); + writeStatsStream(testPvl, false, testStream); + EXPECT_EQ(testStream->str(), "0.0,Hello\nstats here,stats here\n"); + + delete testStream; + testStream = nullptr; +} + +TEST_F(StatsFunc_FlatFileTest, FlatFileHeader) { + std::ostringstream *testStream = new std::ostringstream(); + writeStatsStream(testPvl, true, testStream); + EXPECT_EQ(testStream->str(), "NumberKey,StringKey\n0.0,Hello\nstats here,stats here\n"); + + delete testStream; + testStream = nullptr; +} -- GitLab From b94cfec993c86674e0ed1bee6bebf26eb94f8a23 Mon Sep 17 00:00:00 2001 From: Kristin Date: Fri, 16 Nov 2018 11:44:11 -0700 Subject: [PATCH 598/620] Removed unneeded LineEquation include --- isis/src/base/apps/appjit/LineScanCameraRotation.cpp | 1 - isis/src/base/apps/appjit/PixelOffset.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/isis/src/base/apps/appjit/LineScanCameraRotation.cpp b/isis/src/base/apps/appjit/LineScanCameraRotation.cpp index c5a3390978..9de4057b1b 100644 --- a/isis/src/base/apps/appjit/LineScanCameraRotation.cpp +++ b/isis/src/base/apps/appjit/LineScanCameraRotation.cpp @@ -8,7 +8,6 @@ #include "Cube.h" #include "LineScanCameraRotation.h" #include "Quaternion.h" -#include "LineEquation.h" #include "BasisFunction.h" #include "LeastSquares.h" #include "BasisFunction.h" diff --git a/isis/src/base/apps/appjit/PixelOffset.cpp b/isis/src/base/apps/appjit/PixelOffset.cpp index 2ccef36a7f..b81a49f372 100644 --- a/isis/src/base/apps/appjit/PixelOffset.cpp +++ b/isis/src/base/apps/appjit/PixelOffset.cpp @@ -8,7 +8,6 @@ #include "PixelOffset.h" #include "TextFile.h" -#include "LineEquation.h" #include "LeastSquares.h" #include "BasisFunction.h" #include "PolynomialUnivariate.h" -- GitLab From c8a9d8dfce1aff23e0428dce79db7177bf2d8898 Mon Sep 17 00:00:00 2001 From: Ross Beyer Date: Mon, 19 Nov 2018 10:13:17 -0800 Subject: [PATCH 599/620] Make this program more pythonic (#589) * Updated documentation, user interaction, and made the file and directory handling more 'pythonic'. * Correcting for PR comments. --- isis/scripts/isis3VarInit.py | 118 +++++++++++++++++++++++------------ 1 file changed, 79 insertions(+), 39 deletions(-) diff --git a/isis/scripts/isis3VarInit.py b/isis/scripts/isis3VarInit.py index 0f2e57a70d..cdb0fee7fe 100755 --- a/isis/scripts/isis3VarInit.py +++ b/isis/scripts/isis3VarInit.py @@ -1,57 +1,97 @@ #!/usr/bin/env python +"""This program builds shell scripts that define ISIS3 environment variables during conda environment activation and deactivation, and creates some directories.""" import argparse import os import sys ########################################################################################################## -# Author: Tyler Wilson -# Date : 2018-10-05 -# Description: This script sets ISISROOT/ISIS3DATA/ISIS3TESTDATA for the user and is executed -# within the conda environment created for the ISIS3 installation. -# The data directory and test directory are optional command line arguments. If the user chooses -# not to set them, they will both be placed created on the same level as the $ISISROOT directory -# within the conda environment. +# +# This work is free and unencumbered software released into the public domain. +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. +# +# +# Description: This program builds the shell scripts that define the +# ISISROOT/ISIS3DATA/ISIS3TESTDATA environment variables for the user +# when the ISIS3 conda environment is activated, and clean up when it is +# deactivated. +# +# The data directory and test directory are optional command line arguments. +# If the user chooses not to set them, they will both be created in the +# $ISISROOT directory. +# # History: -# Author: Tyler Wilson +# Author: Tyler Wilson, USGS +# Date: 2018-10-05 +# Description: Initial commit. +# +# Author: Tyler Wilson, USGS # Date: 2018-11-01 # Description: Removed a pair of lines which were causing output errors on Mac OS X and were not # required anyway. # +# Author: Ross Beyer +# Date: 2018-11-19 +# Description: Streamlined the program, improved documentation, and made the directory and +# file creation more `pythonic' rather than using system calls. +# +# ########################################################################################################## -parser = argparse.ArgumentParser(description='Usage: ./isis3VarInit --data_dir --test_dir = (3,2) ) # Must be using Python 3.2 or later, is conda set up? + -parser.add_argument("--data-dir",default= data_dir,help="ISIS3 Mission Data Directory") -parser.add_argument("--test-dir",default=testdata_dir,help="ISIS3 Mission Test Data Directory") +# This just wraps and reports on the directory creation: +def mkdir( p ): + if os.path.exists( p ): print( 'Tried to create '+p+', but it already exists.' ) + else: + os.makedirs( p ) + print( 'Created '+p ) + return + +# Set up and then parse the command line: +parser = argparse.ArgumentParser( description=__doc__ ) + +parser.add_argument('-d','--data-dir', + default=os.environ['CONDA_PREFIX']+'/data', + help='ISIS3 Data Directory, default: %(default)s' ) +parser.add_argument('-t','--test-dir', + default=os.environ['CONDA_PREFIX']+'/testData', + help='ISIS3 Test Data Directory, default: %(default)s') args=parser.parse_args() -if (data_dir != args.data_dir): - os.system("mkdir -p "+args.data_dir) - data_dir = args.data_dir -else: - os.system("mkdir -p "+data_dir) - -if (testdata_dir != args.test_dir): - os.system("mkdir -p "+args.test_dir) - testdata_dir=args.test_dir -else: - os.system("mkdir -p "+testdata_dir) - -os.popen('mkdir -p '+isisroot+'/etc/conda/activate.d') -os.popen('mkdir -p '+isisroot+'/etc/conda/deactivate.d') - -os.popen("echo '#!/bin/sh' > "+isisroot+ "/etc/conda/activate.d/env_vars.sh") -os.popen("echo 'export ISISROOT="+isisroot+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh") -os.popen("echo 'export ISIS3DATA="+data_dir+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh") -os.popen("echo 'export ISIS3TESTDATA="+testdata_dir+"' >>"+isisroot+"/etc/conda/activate.d/env_vars.sh") - -os.popen("echo '#!/bin/sh' > "+isisroot+ "/etc/conda/deactivate.d/env_vars.sh") -os.popen("echo 'unset ISISROOT' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh") -os.popen("echo 'unset ISIS3DATA' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh") -os.popen("echo 'unset ISIS3TESTDATA' >>"+isisroot+"/etc/conda/deactivate.d/env_vars.sh") + +# Create the data directories: +mkdir( args.data_dir ) +mkdir( args.test_dir ) + +# Create the conda activation and deactivation directories: +activate_dir = os.environ['CONDA_PREFIX']+'/etc/conda/activate.d' +deactivate_dir = os.environ['CONDA_PREFIX']+'/etc/conda/deactivate.d' + +mkdir( activate_dir ) +mkdir( deactivate_dir ) + +# Write the files that manage the ISIS3 environments: +activate_vars = activate_dir+'/env_vars.sh' +deactivate_vars = deactivate_dir+'/env_vars.sh' + +with open( activate_vars, mode='w' ) as a: + a.write('#!/bin/sh\n') + a.write('export ISISROOT='+ os.environ['CONDA_PREFIX']+'\n') + a.write('export ISIS3DATA='+ args.data_dir +'\n') + a.write('export ISIS3TESTDATA='+ args.test_dir +'\n') +print( 'Wrote '+activate_vars ) + +with open( deactivate_vars, mode='w' ) as d: + d.write('#!/bin/sh\n') + d.write('unset ISISROOT\n') + d.write('unset ISIS3DATA\n') + d.write('unset ISIS3TESTDATA\n') +print( 'Wrote '+deactivate_vars ) -- GitLab From 0473504f30b8a071d3d9f8b0aa7ea43815230735 Mon Sep 17 00:00:00 2001 From: Tyler Wilson Date: Mon, 19 Nov 2018 12:36:43 -0700 Subject: [PATCH 600/620] Fixed broken links in the Installation instructions due to the hyperlinks to our GitHub wiki changing. --- .../documents/InstallGuide/InstallGuide.xml | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/isis/src/docsys/documents/InstallGuide/InstallGuide.xml b/isis/src/docsys/documents/InstallGuide/InstallGuide.xml index e7b56bfdb4..a05f240422 100644 --- a/isis/src/docsys/documents/InstallGuide/InstallGuide.xml +++ b/isis/src/docsys/documents/InstallGuide/InstallGuide.xml @@ -134,6 +134,20 @@ you must not upgrade the ISIS Data Files!!!

  • A quality graphics card
  • +

    To build and compile ISIS3 requires following the instructions listed below, which are given on + the GitHub wiki page for the ISIS3 project: +

    +

    +

    Running ISIS3 on Windows 10

    @@ -190,19 +204,7 @@ is a popular choice and may be downloaded below. if you are only working with a particular target body.

    -

    To build and compile ISIS3 requires following the instructions listed below, which are given on - the GitHub wiki page for the ISIS3 project: -

    -

    +

    Full ISIS3 Data Download

    -- GitLab From b8c34ae85f641c2be0361c296f9bd451724ab2c7 Mon Sep 17 00:00:00 2001 From: Kristin Date: Fri, 16 Nov 2018 18:34:15 -0700 Subject: [PATCH 601/620] Removed unused Parabola class --- isis/src/base/objs/Parabola/Makefile | 7 --- isis/src/base/objs/Parabola/Parabola.cpp | 57 ------------------ isis/src/base/objs/Parabola/Parabola.h | 68 ---------------------- isis/src/base/objs/Parabola/Parabola.truth | 16 ----- isis/src/base/objs/Parabola/unitTest.cpp | 39 ------------- 5 files changed, 187 deletions(-) delete mode 100644 isis/src/base/objs/Parabola/Makefile delete mode 100644 isis/src/base/objs/Parabola/Parabola.cpp delete mode 100644 isis/src/base/objs/Parabola/Parabola.h delete mode 100644 isis/src/base/objs/Parabola/Parabola.truth delete mode 100644 isis/src/base/objs/Parabola/unitTest.cpp diff --git a/isis/src/base/objs/Parabola/Makefile b/isis/src/base/objs/Parabola/Makefile deleted file mode 100644 index f122bc8822..0000000000 --- a/isis/src/base/objs/Parabola/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -ifeq ($(ISISROOT), $(BLANK)) -.SILENT: -error: - echo "Please set ISISROOT"; -else - include $(ISISROOT)/make/isismake.objs -endif \ No newline at end of file diff --git a/isis/src/base/objs/Parabola/Parabola.cpp b/isis/src/base/objs/Parabola/Parabola.cpp deleted file mode 100644 index 1fb6b22dc6..0000000000 --- a/isis/src/base/objs/Parabola/Parabola.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @file - * $Revision: 1.1.1.1 $ - * $Date: 2006/10/31 23:18:08 $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are public - * domain. See individual third-party library and package descriptions for - * intellectual property information,user agreements, and related information. - * - * Although Isis has been used by the USGS, no warranty, expressed or implied, - * is made by the USGS as to the accuracy and functioning of such software - * and related material nor shall the fact of distribution constitute any such - * warranty, and no responsibility is assumed by the USGS in connection - * therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see - * the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include -#include "FileName.h" -#include "Constants.h" -#include "IException.h" -#include "Parabola.h" - -namespace Isis { - - /** - * This is the the overriding virtual function that provides the expansion into - * the parabolic equation. - * See BasisFunction for more information. - * - * @param vars A vector of double values to use for the expansion. - */ - void Parabola::Expand(const std::vector &vars) { - - if((int) vars.size() != Variables()) { - std::ostringstream msg; - msg << "Number of variables given (" << vars.size() - << ") does not match expected (" << Variables() << ")!" - << std::ends; -// std::cout << msg.str << std::endl; -// throw Isis::iException::Message("Isis::iException::Programmer",msg.str, -// _FILEINFO_); - } - p_terms.clear(); - p_terms.push_back(1.0); - p_terms.push_back(vars[0]); - p_terms.push_back(vars[0] * vars[0]); - return; - } -} // end namespace isis - diff --git a/isis/src/base/objs/Parabola/Parabola.h b/isis/src/base/objs/Parabola/Parabola.h deleted file mode 100644 index 2d15030b23..0000000000 --- a/isis/src/base/objs/Parabola/Parabola.h +++ /dev/null @@ -1,68 +0,0 @@ - -#ifndef Parabola_h -#define Parabola_h -/** - * @file - * $Revision: 1.1.1.1 $ - * $Date: 2006/10/31 23:18:08 $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are public - * domain. See individual third-party library and package descriptions for - * intellectual property information,user agreements, and related information. - * - * Although Isis has been used by the USGS, no warranty, expressed or implied, - * is made by the USGS as to the accuracy and functioning of such software - * and related material nor shall the fact of distribution constitute any such - * warranty, and no responsibility is assumed by the USGS in connection - * therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see - * the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include "BasisFunction.h" - -namespace Isis { - - /** - * @brief Parabola basis function - * - * This is a derived class from the BasisFunction class which creates a parabola - * (second degree equation in 1 variable). The parabolic function has the - * following form: - * - * @f[ - * x = A + B*y + C*y**2 - * @f] - * - * @ingroup Math - * - * @author 2005-06-09 Kris Becker - * - * @internal - * @history 2006-04-15 Debbie A. Cook - Imported from ISIS2 to Isis 3 - */ - - class Parabola : public Isis::BasisFunction { - public: - //! Create a Parabola object - - // Get help to figure out why I have to pass the name in even with the - // default set - Parabola(const QString &bname = "Parabola") : - Isis::BasisFunction(bname, 1, 3) { } - - //! Destroys the Parabola object - ~Parabola() {} - - void Expand(const std::vector &vars); - - }; - -} -#endif - diff --git a/isis/src/base/objs/Parabola/Parabola.truth b/isis/src/base/objs/Parabola/Parabola.truth deleted file mode 100644 index 4e5cd85a36..0000000000 --- a/isis/src/base/objs/Parabola/Parabola.truth +++ /dev/null @@ -1,16 +0,0 @@ -Name = Parabola -Ncoefs = 3 -Vars = 1 --6 -5 -1 ---- -8 -1 -2 -4 ---- --12 -1 --2 -4 diff --git a/isis/src/base/objs/Parabola/unitTest.cpp b/isis/src/base/objs/Parabola/unitTest.cpp deleted file mode 100644 index 2e3ae90db8..0000000000 --- a/isis/src/base/objs/Parabola/unitTest.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "Parabola.h" -#include -#include "Preference.h" - -using namespace Isis; -using namespace std; - -int main() { - Preference::Preferences(true); - - Parabola b("Parabola"); - vector coefs; - coefs.push_back(-6.0); - coefs.push_back(5.0); - coefs.push_back(1.0); - b.SetCoefficients(coefs); - - cout << "Name = " << b.Name() << endl; - cout << "Ncoefs = " << b.Coefficients() << endl; - cout << "Vars = " << b.Variables() << endl; - for(int i = 0; i < b.Coefficients(); i++) { - cout << b.Coefficient(i) << endl; - } - - cout << "---" << endl; - vector vars; - vars.push_back(2.0); - cout << b.Evaluate(vars) << endl; - for(int i = 0; i < b.Coefficients(); i++) { - cout << b.Term(i) << endl; - } - - cout << "---" << endl; - vars[0] = -2.0; - cout << b.Evaluate(vars) << endl; - for(int i = 0; i < b.Coefficients(); i++) { - cout << b.Term(i) << endl; - } -} -- GitLab From 0e0a07ce458c36fd0f2216b26019213e38247ebc Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Mon, 19 Nov 2018 14:52:39 -0700 Subject: [PATCH 602/620] Removed old license, added new unlicense (#594) --- LICENSE.txt | 24 ++++++++++++++++++++++++ isis/license.txt | 46 ---------------------------------------------- 2 files changed, 24 insertions(+), 46 deletions(-) create mode 100644 LICENSE.txt delete mode 100644 isis/license.txt diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000000..68a49daad8 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/isis/license.txt b/isis/license.txt deleted file mode 100644 index d027c85f72..0000000000 --- a/isis/license.txt +++ /dev/null @@ -1,46 +0,0 @@ -ISIS Licensing, copyright, distribution, and warranty information - -USGS-authored or produced data, information, and software are in the -public domain. - -Software and related material (data and (or) documentation), contained in or -furnished in connection with a software distribution, are made available by -the U.S. Geological Survey (USGS) to be used in the public interest and in -the advancement of science. You may, without any fee or cost, use, copy, -modify, or distribute this software, and any derivative works thereof, and -its supporting documentation, subject to the following restrictions and -understandings. - -If you distribute copies or modifications of the software and related -material, make sure the recipients receive a copy of this notice and -receive or can get a copy of the original distribution. If the software and -(or) related material are modified and distributed, it must be made clear -that the recipients do not have the original and they must be informed of -the extent of the modifications. For example, modified files must include a -prominent notice stating the modifications made, the author of the -modifications, and the date the modifications were made. This restriction is -necessary to guard against problems introduced in the software by others, -reflecting negatively on the reputation of the USGS. - -The software is public property and you therefore have the right to the -source code, if desired. You may charge fees for distribution, warranties, -and services provided in connection with the software or derivative works -thereof. The name USGS can be used in any advertising or publicity to -endorse or promote any products or commercial entity using this software -if specific written permission is obtained from the USGS. - -The user agrees to appropriately acknowledge the authors and the USGS in -publications that result from the use of this software or in products that -include this software in whole or in part. - -Because the software and related material are free (other than nominal -materials and handling fees) and provided "as is," the authors, the USGS, -and the United States Government have made no warranty, express or implied, -as to accuracy or completeness and are not obligated to provide the user -with any support, consulting, training or assistance of any kind with -regard to the use, operation, and performance of this software nor to -provide the user with any updates, revisions, new versions or "bug fixes." - -The user assumes all risk for any damages whatsoever resulting from -loss of use, data, or profits arising in connection with the access, -use, quality, or performance of this software -- GitLab From 74c0c8cf457cc302e13ddf97ef5c490f0091444d Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Tue, 20 Nov 2018 12:43:57 -0700 Subject: [PATCH 603/620] Fixed issue with the License change (#599) * Removed old license, added new unlicense * Fixed cmake looking for license in the wrong place --- isis/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index a1408a0a65..468d52045e 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -443,13 +443,13 @@ add_custom_target(clean_source COMMAND rm -rf "${CMAKE_BINARY_DIR}/*" "${CMAKE_I # Set up a few top level files for installation. EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/IsisPreferences ${CMAKE_BINARY_DIR}) EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/scripts ${CMAKE_BINARY_DIR}) -EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/license.txt ${CMAKE_BINARY_DIR}) +EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/../LICENSE.txt ${CMAKE_BINARY_DIR}) EXECUTE_PROCESS(COMMAND cp -f ${CMAKE_SOURCE_DIR}/version ${CMAKE_BINARY_DIR}) EXECUTE_PROCESS(COMMAND cp -rf ${CMAKE_SOURCE_DIR}/make ${CMAKE_BINARY_DIR}) # Copy the files on make install as well install(FILES ${CMAKE_SOURCE_DIR}/IsisPreferences DESTINATION ${CMAKE_INSTALL_PREFIX}) -install(FILES ${CMAKE_SOURCE_DIR}/license.txt DESTINATION ${CMAKE_INSTALL_PREFIX}) +install(FILES ${CMAKE_SOURCE_DIR}/../LICENSE.txt DESTINATION ${CMAKE_INSTALL_PREFIX}) install(FILES ${CMAKE_SOURCE_DIR}/version DESTINATION ${CMAKE_INSTALL_PREFIX}) install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts DESTINATION ${CMAKE_INSTALL_PREFIX}) -- GitLab From 53af27e53c06fb38d7cadcfc1b5754c1be3baf45 Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Wed, 21 Nov 2018 15:54:15 -0700 Subject: [PATCH 604/620] Merge testing into dev (#597) * Updated the cmake version to 3.10 * Adding configurations for gtest * Tweaking things for gtest * Got gtest working and made a small example test * Updated the cmake version to be 3.10 or greater * Added initial Angle test refactor to use gtest * Add IException and QDebug tests * Added the rest of the IException tests * Added test file discovery support and seperated the main into another file * Added more tests for FileName * Updated with the new testing guidelines and added new tests. * Added Spectel unittest for gtest environment * Added gmock * Forgot to save a file * PixelTest (#536) * initial Pixel test * Add more test cases for Pixel * testing parameterization in Pixel test * testing function parameterization * parameterize static vs object methods * basic PixelTests implementation * clean up and more static tests * update PixelTests with float/dbl expects * Added Endian unit test. * Angle test refactor to use gtest (#529) * Added initial Angle test refactor to use gtest * Add IException and QDebug tests * Added the rest of the IException tests * Update Angle to make private methods public and add tests * Made changes for review comments * Cleanup and addition of streaming the actual errors thrown to the EXPECT_TRUE macro * FileName gtest conversion (#568) * Made two methods private as they are only used within FileName * Added more tests * Added more tests * Update FileNameTests.cpp * BundleSettings unit test (#538) * added build to git ignore * Fixed duplicate main in FileNameTests * Added parameterized test example * Added more tests * Mored BundleSettings tests * Even more tests * Added mocked targetbody settings for BundleSettings test * Added BundleSettings save tests * Fixed BundleSetting save tests to just use a QString * Added default and copy constructor tests and asignment * Update FileName test and merge dev into testing (#598) * Update CMakeLists.txt with version 3.6.0 (patch 1) * Update cmake/CMakeLists.txt library version * Updated the Installation instructions based on user feedback. Also fixed a problem with the isis3VarInit.py script. * Updates made in accordance with requests made on this PR by other developers. * Fix tgo cassis unit test correctly * Fix tgo cassis unit test correctly (#544) * Fixed two bug with AutoReg. One occurs with one dimensional pattern cubes and the other causes the revious registration sample/line to be returned on sub-pixel registration failure. * Fix tgo cassis camera truth again (#554) * Update docsys Makefile to support wwwdoc (#559) The documentation is installed under `docs`, not `doc`, so this file has been updated. `setisis isis3.6.0` and running `make wwwdoc` in `$ISISROOT/../isis/src/docsys` will properly sync the documentation to our web server. * Update isis3VarInit.py Unnecessary 'touch'ing, the '>' redirect will create the file if it doesn't exist. Also, the first redirect should be the single '>'. Otherwise, multiple runs of this program will continue appending to these files. They still work, its just a lot of setting and unsetting for no good reason. * Fixed isis3Startup scripts * Removed unneeded LineEquation include * Make this program more pythonic (#589) * Updated documentation, user interaction, and made the file and directory handling more 'pythonic'. * Correcting for PR comments. * Fixed broken links in the Installation instructions due to the hyperlinks to our GitHub wiki changing. * Removed unused Parabola class * Removed old license, added new unlicense (#594) * Tweaked FileName test to use ISISROOT variable * App to callable function conversion rough draft (#530) * adjusted Process to support lambdas with captures, updated crop app * now compiling with colocated funcs and apps and duplicated symbols accross apps removed * removed debug prints in cmake scripts * changes as requested from review * hapke comment * Added Distance unit tests (#585) * Added Distance unit tests. * Changed EXPECT_FLOAT_EQ to EXPECT_DOUBLE_EQ and changed Solar Radii test to use one solar radii. * Changed unneeded EXPECT_DOUBLE_EQ to EXPECT_EQ. * Fixed toString test. * Adding gtests for Color and Matrix (#532) * Adding gtests for Color and Matrix * Updating gtest for Matrix * More work to ColorTests.cpp and MatrixTests.cpp * Added test for constructor making use of TNT:Array2D in MatrixTests * Update isis/tests/MatrixTests.cpp Co-Authored-By: SgStapleton * Update isis/tests/MatrixTests.cpp Co-Authored-By: SgStapleton * Making recommended changes * Fixing odd GitHub behavior... There were suggested changes made in PR that were not playing nicely. Could not push correct version for whatever reason. * Add Utilities, clean up testing (#604) * Update CMakeLists.txt with version 3.6.0 (patch 1) * Update cmake/CMakeLists.txt library version * Updated the Installation instructions based on user feedback. Also fixed a problem with the isis3VarInit.py script. * Updates made in accordance with requests made on this PR by other developers. * Fix tgo cassis unit test correctly * Fix tgo cassis unit test correctly (#544) * Fixed two bug with AutoReg. One occurs with one dimensional pattern cubes and the other causes the revious registration sample/line to be returned on sub-pixel registration failure. * Fix tgo cassis camera truth again (#554) * Update docsys Makefile to support wwwdoc (#559) The documentation is installed under `docs`, not `doc`, so this file has been updated. `setisis isis3.6.0` and running `make wwwdoc` in `$ISISROOT/../isis/src/docsys` will properly sync the documentation to our web server. * Update isis3VarInit.py Unnecessary 'touch'ing, the '>' redirect will create the file if it doesn't exist. Also, the first redirect should be the single '>'. Otherwise, multiple runs of this program will continue appending to these files. They still work, its just a lot of setting and unsetting for no good reason. * Fixed isis3Startup scripts * Removed unneeded LineEquation include * Make this program more pythonic (#589) * Updated documentation, user interaction, and made the file and directory handling more 'pythonic'. * Correcting for PR comments. * Fixed broken links in the Installation instructions due to the hyperlinks to our GitHub wiki changing. * Removed unused Parabola class * Removed old license, added new unlicense (#594) * Fixed issue with the License change (#599) * Removed old license, added new unlicense * Fixed cmake looking for license in the wrong place * Added TestUtilities and used in Color tests * Fixed an issue where app xmls were not being copied * Tweaked IException test failure messages * Updating TestUtilities.h and associated files to account for AssertIException to be broken into AssertIExceptionMessage and AssertIExceptionError --- .gitignore | 27 + .gitmodules | 3 + environment.yml | 2 +- environment_gcc4.yml | 2 +- gtest | 1 + isis/CMakeLists.txt | 20 +- isis/cmake/AddIsisModule.cmake | 22 +- isis/cmake/gtest.cmake | 39 + .../apollo2isis/{apollo2isis.cpp => main.cpp} | 0 .../apollocal/{apollocal.cpp => main.cpp} | 0 .../{apollofindrx.cpp => main.cpp} | 0 .../{apollopaninit.cpp => main.cpp} | 0 .../{apollopanstitcher.cpp => main.cpp} | 0 .../apolloremrx/{apolloremrx.cpp => main.cpp} | 0 .../apollowarp/{apollowarp.cpp => main.cpp} | 0 .../apps/algebra/{algebra.cpp => main.cpp} | 0 .../base/apps/appjit/{appjit.cpp => main.cpp} | 0 .../ascii2isis/{ascii2isis.cpp => main.cpp} | 0 .../apps/automos/{automos.cpp => main.cpp} | 0 .../{autoregtemplate.cpp => main.cpp} | 0 .../apps/bandnorm/{bandnorm.cpp => main.cpp} | 0 .../apps/bandtrim/{bandtrim.cpp => main.cpp} | 0 .../apps/barscale/{barscale.cpp => main.cpp} | 0 .../apps/bit2bit/{bit2bit.cpp => main.cpp} | 0 .../base/apps/blend/{blend.cpp => main.cpp} | 0 .../butterworth/{butterworth.cpp => main.cpp} | 0 .../apps/cam2cam/{cam2cam.cpp => main.cpp} | 0 .../apps/cam2map/{cam2map.cpp => main.cpp} | 0 .../apps/caminfo/{caminfo.cpp => main.cpp} | 0 .../base/apps/campt/{campt.cpp => main.cpp} | 0 .../apps/camrange/{camrange.cpp => main.cpp} | 0 .../apps/camstats/{camstats.cpp => main.cpp} | 0 .../apps/camtrim/{camtrim.cpp => main.cpp} | 0 .../apps/cathist/{cathist.cpp => main.cpp} | 0 .../base/apps/catlab/{catlab.cpp => main.cpp} | 0 .../catoriglab/{catoriglab.cpp => main.cpp} | 0 .../base/apps/center/{center.cpp => main.cpp} | 0 .../base/apps/circle/{circle.cpp => main.cpp} | 0 .../src/base/apps/ckwriter/CkKernelWriter.cpp | 30 +- isis/src/base/apps/ckwriter/CkKernelWriter.h | 64 +- .../{SpiceSegment.cpp => CkSpiceSegment.cpp} | 147 ++- .../{SpiceSegment.h => CkSpiceSegment.h} | 89 +- isis/src/base/apps/ckwriter/SpiceKernel.cpp | 15 +- isis/src/base/apps/ckwriter/SpiceKernel.h | 61 +- .../apps/ckwriter/{ckwriter.cpp => main.cpp} | 4 +- .../copylabel/{copylabel.cpp => main.cpp} | 0 .../src/base/apps/cosi/{cosi.cpp => main.cpp} | 0 isis/src/base/apps/crop/crop.cpp | 63 +- isis/src/base/apps/crop/crop.h | 13 + isis/src/base/apps/crop/main.cpp | 12 + .../cropspecial/{cropspecial.cpp => main.cpp} | 0 .../csv2table/{csv2table.cpp => main.cpp} | 0 .../apps/cubeatt/{cubeatt.cpp => main.cpp} | 0 .../apps/cubeavg/{cubeavg.cpp => main.cpp} | 0 .../apps/cubediff/{cubediff.cpp => main.cpp} | 0 .../apps/cubefunc/{cubefunc.cpp => main.cpp} | 0 .../base/apps/cubeit/{cubeit.cpp => main.cpp} | 0 .../apps/cubenorm/{cubenorm.cpp => main.cpp} | 0 .../apps/ddd2isis/{ddd2isis.cpp => main.cpp} | 0 .../{decorstretch.cpp => main.cpp} | 0 .../apps/demprep/{demprep.cpp => main.cpp} | 0 .../base/apps/deriv/{deriv.cpp => main.cpp} | 0 .../apps/desmear/{desmear.cpp => main.cpp} | 0 .../apps/desmile/{desmile.cpp => main.cpp} | 0 .../divfilter/{divfilter.cpp => main.cpp} | 0 .../apps/dsk2isis/{dsk2isis.cpp => main.cpp} | 0 .../apps/dstripe/{dstripe.cpp => main.cpp} | 0 .../apps/editlab/{editlab.cpp => main.cpp} | 0 .../base/apps/edrget/{edrget.cpp => main.cpp} | 0 .../apps/enlarge/{enlarge.cpp => main.cpp} | 0 .../equalizer/{equalizer.cpp => main.cpp} | 0 .../base/apps/errors/{errors.cpp => main.cpp} | 0 .../apps/explode/{explode.cpp => main.cpp} | 0 .../apps/fakecube/{fakecube.cpp => main.cpp} | 0 isis/src/base/apps/fft/{fft.cpp => main.cpp} | 0 .../apps/fillgap/{fillgap.cpp => main.cpp} | 0 .../apps/findgaps/{findgaps.cpp => main.cpp} | 0 .../{findimageoverlaps.cpp => main.cpp} | 0 .../base/apps/findrx/{findrx.cpp => main.cpp} | 0 .../fits2isis/{fits2isis.cpp => main.cpp} | 0 .../src/base/apps/flip/{flip.cpp => main.cpp} | 0 .../{footprintinit.cpp => main.cpp} | 0 .../{footprintmerge.cpp => main.cpp} | 0 isis/src/base/apps/fx/{fx.cpp => main.cpp} | 0 .../base/apps/gauss/{gauss.cpp => main.cpp} | 0 .../{gaussstretch.cpp => main.cpp} | 0 .../base/apps/getkey/{getkey.cpp => main.cpp} | 0 .../base/apps/getsn/{getsn.cpp => main.cpp} | 0 .../apps/gradient/{gradient.cpp => main.cpp} | 0 .../greyscale/{greyscale.cpp => main.cpp} | 0 .../src/base/apps/grid/{grid.cpp => main.cpp} | 0 .../apps/handmos/{handmos.cpp => main.cpp} | 0 .../apps/highpass/{highpass.cpp => main.cpp} | 0 .../src/base/apps/hist/{hist.cpp => main.cpp} | 0 .../base/apps/histeq/{histeq.cpp => main.cpp} | 0 .../histmatch/{histmatch.cpp => main.cpp} | 0 .../apps/hsv2rgb/{hsv2rgb.cpp => main.cpp} | 0 .../src/base/apps/ifft/{ifft.cpp => main.cpp} | 0 .../{interestcube.cpp => main.cpp} | 0 .../isis2ascii/{isis2ascii.cpp => main.cpp} | 0 .../isis2fits/{isis2fits.cpp => main.cpp} | 0 .../apps/isis2gml/{isis2gml.cpp => main.cpp} | 0 .../apps/isis2pds/{isis2pds.cpp => main.cpp} | 0 .../apps/isis2raw/{isis2raw.cpp => main.cpp} | 0 .../apps/isis2std/{isis2std.cpp => main.cpp} | 0 .../isisminer/{isisminer.cpp => main.cpp} | 0 .../base/apps/isisui/{isisui.cpp => main.cpp} | 0 .../kernfilter/{kernfilter.cpp => main.cpp} | 0 .../apps/kuwahara/{kuwahara.cpp => main.cpp} | 0 .../base/apps/lineeq/{lineeq.cpp => main.cpp} | 0 .../apps/lowpass/{lowpass.cpp => main.cpp} | 0 .../apps/makecube/{makecube.cpp => main.cpp} | 0 .../apps/makeflat/{makeflat.cpp => main.cpp} | 0 .../apps/map2cam/{map2cam.cpp => main.cpp} | 0 .../apps/map2map/{map2map.cpp => main.cpp} | 0 .../apps/mapgrid/{mapgrid.cpp => main.cpp} | 0 .../base/apps/maplab/{maplab.cpp => main.cpp} | 0 .../base/apps/mapmos/{mapmos.cpp => main.cpp} | 0 .../base/apps/mappt/{mappt.cpp => main.cpp} | 0 .../apps/mapsize/{mapsize.cpp => main.cpp} | 0 .../maptemplate/{maptemplate.cpp => main.cpp} | 0 .../apps/maptrim/{maptrim.cpp => main.cpp} | 0 .../src/base/apps/mask/{mask.cpp => main.cpp} | 0 .../base/apps/median/{median.cpp => main.cpp} | 0 .../base/apps/minmax/{minmax.cpp => main.cpp} | 0 .../base/apps/mirror/{mirror.cpp => main.cpp} | 0 .../src/base/apps/mode/{mode.cpp => main.cpp} | 0 .../apps/mosrange/{mosrange.cpp => main.cpp} | 0 .../apps/mvstats/{mvstats.cpp => main.cpp} | 0 .../nocam2map/{nocam2map.cpp => main.cpp} | 0 .../noisefilter/{noisefilter.cpp => main.cpp} | 0 .../base/apps/noproj/{noproj.cpp => main.cpp} | 0 .../base/apps/noseam/{noseam.cpp => main.cpp} | 0 .../apps/outline/{outline.cpp => main.cpp} | 0 .../{overlapstats.cpp => main.cpp} | 0 isis/src/base/apps/pad/{pad.cpp => main.cpp} | 0 isis/src/base/apps/pca/{pca.cpp => main.cpp} | 0 .../apps/pds2isis/{pds2isis.cpp => main.cpp} | 0 .../apps/percent/{percent.cpp => main.cpp} | 0 .../apps/phocube/{phocube.cpp => main.cpp} | 0 .../{phoempglobal.cpp => main.cpp} | 0 .../phoemplocal/{phoemplocal.cpp => main.cpp} | 0 .../phohillier/{phohillier.cpp => main.cpp} | 0 .../photemplate/{photemplate.cpp => main.cpp} | 0 .../apps/photomet/{photomet.cpp => main.cpp} | 0 .../apps/photrim/{photrim.cpp => main.cpp} | 0 .../pixel2map/{pixel2map.cpp => main.cpp} | 0 .../src/base/apps/poly/{poly.cpp => main.cpp} | 0 .../apps/pvldiff/{pvldiff.cpp => main.cpp} | 0 .../base/apps/ratio/{ratio.cpp => main.cpp} | 0 .../apps/raw2isis/{raw2isis.cpp => main.cpp} | 0 .../base/apps/reduce/{reduce.cpp => main.cpp} | 0 .../base/apps/remrx/{remrx.cpp => main.cpp} | 0 .../apps/rgb2hsv/{rgb2hsv.cpp => main.cpp} | 0 .../{ringsautomos.cpp => main.cpp} | 0 .../{ringscam2map.cpp => main.cpp} | 0 .../ringsmappt/{ringsmappt.cpp => main.cpp} | 0 .../apps/ringspt/{ringspt.cpp => main.cpp} | 0 .../base/apps/rotate/{rotate.cpp => main.cpp} | 0 .../apps/segment/{segment.cpp => main.cpp} | 0 .../base/apps/shade/{shade.cpp => main.cpp} | 0 .../base/apps/shadow/{shadow.cpp => main.cpp} | 0 .../shadowtau/{shadowtau.cpp => main.cpp} | 0 .../apps/sharpen/{sharpen.cpp => main.cpp} | 0 .../{sigmastretch.cpp => main.cpp} | 0 .../base/apps/skymap/{skymap.cpp => main.cpp} | 0 .../base/apps/skypt/{skypt.cpp => main.cpp} | 0 .../apps/skyrange/{skyrange.cpp => main.cpp} | 0 .../base/apps/slpmap/{slpmap.cpp => main.cpp} | 0 .../src/base/apps/smtk/{smtk.cpp => main.cpp} | 0 .../apps/specadd/{specadd.cpp => main.cpp} | 0 .../{specdivfilter.cpp => main.cpp} | 0 .../{spechighpass.cpp => main.cpp} | 0 .../speclowpass/{speclowpass.cpp => main.cpp} | 0 .../apps/specpix/{specpix.cpp => main.cpp} | 0 .../apps/spicefit/{spicefit.cpp => main.cpp} | 0 .../spiceinit/{spiceinit.cpp => main.cpp} | 0 .../spiceserver/{spiceserver.cpp => main.cpp} | 0 isis/src/base/apps/spkwriter/SpiceKernel.h | 109 ++- .../src/base/apps/spkwriter/SpkKernelWriter.h | 8 +- isis/src/base/apps/spkwriter/SpkSegment.cpp | 47 +- isis/src/base/apps/spkwriter/SpkSegment.h | 65 +- .../{SpiceSegment.cpp => SpkSpiceSegment.cpp} | 45 +- .../{SpiceSegment.h => SpkSpiceSegment.h} | 85 +- .../spkwriter/{spkwriter.cpp => main.cpp} | 0 .../base/apps/stats/{stats.cpp => main.cpp} | 0 .../apps/std2isis/{std2isis.cpp => main.cpp} | 0 .../apps/stretch/{stretch.cpp => main.cpp} | 0 .../apps/svfilter/{svfilter.cpp => main.cpp} | 0 .../table2cube/{table2cube.cpp => main.cpp} | 0 .../tabledump/{tabledump.cpp => main.cpp} | 0 .../tonematch/{tonematch.cpp => main.cpp} | 0 .../{trackextract.cpp => main.cpp} | 0 .../translate/{translate.cpp => main.cpp} | 0 .../src/base/apps/trim/{trim.cpp => main.cpp} | 0 .../trimfilter/{trimfilter.cpp => main.cpp} | 0 .../base/apps/uncrop/{uncrop.cpp => main.cpp} | 0 .../vicar2isis/{vicar2isis.cpp => main.cpp} | 0 isis/src/base/objs/Angle/Angle.h | 3 +- isis/src/base/objs/FileName/FileName.h | 7 +- isis/src/base/objs/IException/IException.h | 2 +- .../apps/lronac2pds => base/objs/Md5}/md5.cpp | 0 .../apps/lrowac2pds => base/objs/Md5}/md5.h | 0 .../objs/Md5Wrapper}/md5wrapper.cpp | 0 .../objs/Md5Wrapper}/md5wrapper.h | 0 .../objs/ProcessByBrick/ProcessByBrick.cpp | 108 ++- .../base/objs/ProcessByBrick/ProcessByBrick.h | 2 + .../base/objs/ProcessByLine/ProcessByLine.cpp | 30 +- .../base/objs/ProcessByLine/ProcessByLine.h | 4 +- .../ciss2isis/{ciss2isis.cpp => main.cpp} | 0 .../apps/cisscal/{cisscal.cpp => main.cpp} | 0 .../vims2isis/{vims2isis.cpp => main.cpp} | 0 .../apps/vimscal/{vimscal.cpp => main.cpp} | 0 .../{chan1m32isis.cpp => main.cpp} | 0 .../clem2isis/{clem2isis.cpp => main.cpp} | 0 .../{clemhirescal.cpp => main.cpp} | 0 .../clemnircal/{clemnircal.cpp => main.cpp} | 0 .../{clemnirclean.cpp => main.cpp} | 0 .../{clemnirnoise.cpp => main.cpp} | 0 .../{clemuvviscal.cpp => main.cpp} | 0 .../apps/autoseed/{autoseed.cpp => main.cpp} | 0 .../apps/cnet2dem/{cnet2dem.cpp => main.cpp} | 0 .../apps/cnet2mat/{cnet2mat.cpp => main.cpp} | 0 .../apps/cnetadd/{cnetadd.cpp => main.cpp} | 0 .../cnetbin2pvl/{cnetbin2pvl.cpp => main.cpp} | 0 .../cnetcheck/{cnetcheck.cpp => main.cpp} | 0 .../{cnetcombinept.cpp => main.cpp} | 0 .../apps/cnetdiff/{cnetdiff.cpp => main.cpp} | 0 .../apps/cnetedit/{cnetedit.cpp => main.cpp} | 0 .../cnetextract/{cnetextract.cpp => main.cpp} | 0 .../apps/cnethist/{cnethist.cpp => main.cpp} | 0 .../cnetmerge/{cnetmerge.cpp => main.cpp} | 0 .../{cnetnewradii.cpp => main.cpp} | 0 .../cnetpvl2bin/{cnetpvl2bin.cpp => main.cpp} | 0 .../apps/cnetref/{cnetref.cpp => main.cpp} | 0 .../cnetsplit/{cnetsplit.cpp => main.cpp} | 0 .../cnetstats/{cnetstats.cpp => main.cpp} | 0 .../cnettable/{cnettable.cpp => main.cpp} | 0 .../cnetthinner/{cnetthinner.cpp => main.cpp} | 0 .../cnetwinnow/{cnetwinnow.cpp => main.cpp} | 0 .../apps/coreg/{coreg.cpp => main.cpp} | 0 .../apps/deltack/{deltack.cpp => main.cpp} | 0 .../{findfeatures.cpp => main.cpp} | 0 .../fplanemap/{fplanemap.cpp => main.cpp} | 0 .../apps/jigsaw/{jigsaw.cpp => main.cpp} | 0 .../apps/mat2cnet/{mat2cnet.cpp => main.cpp} | 0 .../apps/pointreg/{pointreg.cpp => main.cpp} | 0 .../apps/seedgrid/{seedgrid.cpp => main.cpp} | 0 .../apps/slither/{slither.cpp => main.cpp} | 0 .../apps/sumspice/{sumspice.cpp => main.cpp} | 0 .../control/apps/warp/{warp.cpp => main.cpp} | 0 .../objs/BundleUtilities/BundleTargetBody.h | 34 +- .../dawnfc2isis/{dawnfc2isis.cpp => main.cpp} | 0 .../{dawnvir2isis.cpp => main.cpp} | 0 .../camcoeffs/{camcoeffs.cpp => main.cpp} | 0 .../dev/apps/camdev/{camdev.cpp => main.cpp} | 0 .../apps/camtest/{camtest.cpp => main.cpp} | 0 .../m3loc2net/{m3loc2net.cpp => main.cpp} | 0 .../{gllnims2isis.cpp => main.cpp} | 0 .../gllssi2isis/{gllssi2isis.cpp => main.cpp} | 0 .../gllssical/{gllssical.cpp => main.cpp} | 0 .../{ImportFits.cpp => AmicaImportFits.cpp} | 67 +- .../{ImportFits.h => AmicaImportFits.h} | 36 +- .../amica2isis/{amica2isis.cpp => main.cpp} | 25 +- .../apps/amicacal/{amicacal.cpp => main.cpp} | 0 .../hyb1pds4gen/{hyb1pds4gen.cpp => main.cpp} | 0 .../{ImportFits.cpp => NirsImportFits.cpp} | 67 +- .../{ImportFits.h => NirsImportFits.h} | 36 +- .../nirs2isis/{nirs2isis.cpp => main.cpp} | 6 +- .../{hyb2onc2isis.cpp => main.cpp} | 0 .../hyb2onccal/{hyb2onccal.cpp => main.cpp} | 0 .../{junocam2isis.cpp => main.cpp} | 0 .../{kaguyami2isis.cpp => main.cpp} | 0 .../{kaguyasp2ascii.cpp => main.cpp} | 0 .../{kaguyasp2isis.cpp => main.cpp} | 0 .../{kaguyatc2isis.cpp => main.cpp} | 0 .../mimap2isis/{mimap2isis.cpp => main.cpp} | 0 .../lo/apps/lo2isis/{lo2isis.cpp => main.cpp} | 0 .../apps/lopdsgen/{lopdsgen.cpp => main.cpp} | 0 .../lromakeflat/{lromakeflat.cpp => main.cpp} | 0 .../lronac2isis/{lronac2isis.cpp => main.cpp} | 0 .../lronac2pds/{lronac2pds.cpp => main.cpp} | 0 isis/src/lro/apps/lronac2pds/md5.h | 91 -- .../lronaccal/{lronaccal.cpp => main.cpp} | 0 .../lronacecho/{lronacecho.cpp => main.cpp} | 0 .../lronacpho/{lronacpho.cpp => main.cpp} | 0 .../lrowac2isis/{lrowac2isis.cpp => main.cpp} | 0 .../lrowac2pds/{lrowac2pds.cpp => main.cpp} | 0 isis/src/lro/apps/lrowac2pds/md5.cpp | 318 ------- isis/src/lro/apps/lrowac2pds/md5wrapper.cpp | 125 --- isis/src/lro/apps/lrowac2pds/md5wrapper.h | 71 -- .../lrowaccal/{lrowaccal.cpp => main.cpp} | 0 isis/src/lro/apps/lrowacpho/Exponential.cpp | 46 +- isis/src/lro/apps/lrowacpho/Exponential.h | 7 +- .../lro/apps/lrowacpho/HapkeExponential.cpp | 54 +- .../src/lro/apps/lrowacpho/HapkeExponential.h | 7 +- isis/src/lro/apps/lrowacpho/Hillier.cpp | 42 +- isis/src/lro/apps/lrowacpho/Hillier.h | 7 +- .../apps/lrowacpho/PhotometricFunction.cpp | 108 --- .../lro/apps/lrowacpho/PhotometricFunction.h | 183 ---- .../lrowacpho/{lrowacpho.cpp => main.cpp} | 22 +- .../apps/mrf2isis/{mrf2isis.cpp => main.cpp} | 0 .../apps/mrf2pds/{mrf2pds.cpp => main.cpp} | 0 .../PhotometricFunction.cpp | 24 +- .../PhotometricFunction.h | 0 .../mar102isis/{mar102isis.cpp => main.cpp} | 0 .../apps/mar10cal/{mar10cal.cpp => main.cpp} | 0 .../mar10clean/{mar10clean.cpp => main.cpp} | 0 .../{mar10nonoise.cpp => main.cpp} | 0 .../{mar10restore.cpp => main.cpp} | 0 .../apps/mer2isis/{mer2isis.cpp => main.cpp} | 0 .../mer/apps/mical/{mical.cpp => main.cpp} | 0 .../mdis2isis/{mdis2isis.cpp => main.cpp} | 0 .../apps/mdis2pds/{mdis2pds.cpp => main.cpp} | 0 .../apps/mdiscal/{mdiscal.cpp => main.cpp} | 0 .../apps/mdisddr/{mdisddr.cpp => main.cpp} | 0 .../mdisedrinfo/{mdisedrinfo.cpp => main.cpp} | 0 .../apps/mdisproc/{mdisproc.cpp => main.cpp} | 0 .../hrsc2isis/{hrsc2isis.cpp => main.cpp} | 0 .../apps/moc2isis/{moc2isis.cpp => main.cpp} | 0 .../mgs/apps/moccal/{moccal.cpp => main.cpp} | 0 .../mocevenodd/{mocevenodd.cpp => main.cpp} | 0 .../mgs/apps/mocgap/{mocgap.cpp => main.cpp} | 0 .../mocnoise50/{mocnoise50.cpp => main.cpp} | 0 .../apps/mocproc/{mocproc.cpp => main.cpp} | 0 isis/src/mgs/apps/mocuncompress/getdecode.cpp | 243 ----- .../{readmocisis.cpp => main.cpp} | 324 ++++++- isis/src/mgs/apps/mocuncompress/pmain.cpp | 177 ---- .../crism2isis/{crism2isis.cpp => main.cpp} | 0 .../mro/apps/ctxcal/{ctxcal.cpp => main.cpp} | 0 .../ctxevenodd/{ctxevenodd.cpp => main.cpp} | 0 isis/src/mro/apps/hi2isis/hiAncillary.cpp | 90 -- isis/src/mro/apps/hi2isis/hiCalibration.cpp | 159 ---- .../apps/hi2isis/{hi2isis.cpp => main.cpp} | 231 ++++- .../src/mro/apps/hical/GainChannelNormalize.h | 104 --- isis/src/mro/apps/hical/GainFlatField.h | 102 -- isis/src/mro/apps/hical/GainLineDrift.h | 107 --- isis/src/mro/apps/hical/GainNonLinearity.h | 89 -- isis/src/mro/apps/hical/GainTemperature.h | 114 --- isis/src/mro/apps/hical/GainUnitConversion.h | 150 --- isis/src/mro/apps/hical/HISTORY | 9 - isis/src/mro/apps/hical/HiBlob.h | 78 -- isis/src/mro/apps/hical/HiCalConf.cpp | 606 ------------ isis/src/mro/apps/hical/HiCalConf.h | 157 ---- isis/src/mro/apps/hical/HiCalData.h | 173 ---- isis/src/mro/apps/hical/HiCalTypes.h | 96 -- isis/src/mro/apps/hical/HiCalUtil.h | 511 ---------- isis/src/mro/apps/hical/LoadCSV.cpp | 310 ------- isis/src/mro/apps/hical/LoadCSV.h | 119 --- isis/src/mro/apps/hical/LowPassFilter.h | 112 --- isis/src/mro/apps/hical/Module.h | 210 ----- isis/src/mro/apps/hical/NonLinearLSQ.cpp | 220 ----- isis/src/mro/apps/hical/NonLinearLSQ.h | 161 ---- isis/src/mro/apps/hical/SplineFill.h | 119 --- isis/src/mro/apps/hical/ZeroBufferFit.cpp | 354 ------- isis/src/mro/apps/hical/ZeroBufferFit.h | 168 ---- isis/src/mro/apps/hical/ZeroBufferSmooth.h | 167 ---- isis/src/mro/apps/hical/ZeroDark.h | 182 ---- isis/src/mro/apps/hical/ZeroReverse.h | 191 ---- .../apps/hical/{hical.xml => hicalbeta.xml} | 75 +- .../mro/apps/hical/{hical.cpp => main.cpp} | 0 .../hicalbeta/{hicalbeta.cpp => main.cpp} | 0 .../hicalproc/{hicalproc.cpp => main.cpp} | 0 .../hiccdstitch/{hiccdstitch.cpp => main.cpp} | 0 .../hicolormos/{hicolormos.cpp => main.cpp} | 0 .../mro/apps/hicrop/{hicrop.cpp => main.cpp} | 0 .../apps/hicubeit/{hicubeit.cpp => main.cpp} | 0 .../hicubenorm/{hicubenorm.cpp => main.cpp} | 0 .../hideal2pds/{hideal2pds.cpp => main.cpp} | 0 .../hidestripe/{hidestripe.cpp => main.cpp} | 0 .../apps/hidtmgen/{hidtmgen.cpp => main.cpp} | 0 .../apps/hiequal/{hiequal.cpp => main.cpp} | 0 .../apps/hifringe/{hifringe.cpp => main.cpp} | 0 .../hifurrows/{hifurrows.cpp => main.cpp} | 0 .../mro/apps/higlob/{higlob.cpp => main.cpp} | 0 .../apps/hijitreg/{hijitreg.cpp => main.cpp} | 0 .../apps/hijitter/{hijitter.cpp => main.cpp} | 0 .../mro/apps/himos/{himos.cpp => main.cpp} | 0 .../apps/hinoise/{hinoise.cpp => main.cpp} | 0 .../hirdr2isis/{hirdr2isis.cpp => main.cpp} | 0 .../apps/hirdrgen/{hirdrgen.cpp => main.cpp} | 0 .../hisharpen/{hisharpen.cpp => main.cpp} | 0 .../mro/apps/histat/{histat.cpp => main.cpp} | 0 .../apps/histitch/{histitch.cpp => main.cpp} | 0 .../marci2isis/{marci2isis.cpp => main.cpp} | 0 .../apps/marcical/{marcical.cpp => main.cpp} | 0 .../marciflip/{marciflip.cpp => main.cpp} | 0 .../mroctx2isis/{mroctx2isis.cpp => main.cpp} | 0 .../pds2hideal/{pds2hideal.cpp => main.cpp} | 0 .../HiCal}/GainChannelNormalize.h | 0 .../hicalbeta => objs/HiCal}/GainFlatField.h | 57 +- .../hicalbeta => objs/HiCal}/GainLineDrift.h | 56 +- .../HiCal}/GainNonLinearity.h | 52 +- .../HiCal}/GainTemperature.h | 1 - .../HiCal}/GainUnitConversion.h | 61 +- .../{apps/hicalbeta => objs/HiCal}/HiBlob.h | 0 .../hicalbeta => objs/HiCal}/HiCalConf.cpp | 0 .../hicalbeta => objs/HiCal}/HiCalConf.h | 0 .../hicalbeta => objs/HiCal}/HiCalData.h | 0 .../hicalbeta => objs/HiCal}/HiCalTypes.h | 0 .../hicalbeta => objs/HiCal}/HiCalUtil.h | 0 .../hicalbeta => objs/HiCal}/LoadCSV.cpp | 0 .../{apps/hicalbeta => objs/HiCal}/LoadCSV.h | 0 .../hicalbeta => objs/HiCal}/LowPassFilter.h | 0 .../{apps/hicalbeta => objs/HiCal}/Module.h | 0 .../hicalbeta => objs/HiCal}/NonLinearLSQ.cpp | 0 .../hicalbeta => objs/HiCal}/NonLinearLSQ.h | 0 .../hicalbeta => objs/HiCal}/SplineFill.h | 0 .../HiCal}/ZeroBufferFit.cpp | 0 .../hicalbeta => objs/HiCal}/ZeroBufferFit.h | 0 .../HiCal}/ZeroBufferSmooth.h | 0 .../{apps/hicalbeta => objs/HiCal}/ZeroDark.h | 0 .../hicalbeta => objs/HiCal}/ZeroReverse.h | 0 .../apps/msi2isis/{msi2isis.cpp => main.cpp} | 0 .../leisa2isis/{leisa2isis.cpp => main.cpp} | 0 .../lorri2isis/{lorri2isis.cpp => main.cpp} | 0 .../mvic2isis/{mvic2isis.cpp => main.cpp} | 0 .../apps/thm2isis/{thm2isis.cpp => main.cpp} | 0 .../thmbasemap1/{thmbasemap1.cpp => main.cpp} | 0 .../thmdriftcor/{thmdriftcor.cpp => main.cpp} | 0 .../thmnoseam/{thmnoseam.cpp => main.cpp} | 0 .../apps/thmproc/{thmproc.cpp => main.cpp} | 0 .../thmvisflat/{thmvisflat.cpp => main.cpp} | 0 .../thmvistrim/{thmvistrim.cpp => main.cpp} | 0 .../ocams2isis/{ocams2isis.cpp => main.cpp} | 0 .../src/qisis/apps/ipce/WarningTreeWidget.cpp | 37 - isis/src/qisis/apps/ipce/WarningTreeWidget.h | 33 - .../qisis/apps/ipce/{ipce.cpp => main.cpp} | 0 .../qisis/apps/qmos/{qmos.cpp => main.cpp} | 0 .../qisis/apps/qnet/{qnet.cpp => main.cpp} | 0 .../qisis/apps/qtie/{qtie.cpp => main.cpp} | 0 .../qisis/apps/qview/{qview.cpp => main.cpp} | 0 .../rolo2isis/{rolo2isis.cpp => main.cpp} | 0 .../{rososiris2isis.cpp => main.cpp} | 0 .../{rosvirtis2isis.cpp => main.cpp} | 0 .../{socetframesettings.cpp => main.cpp} | 0 .../{socetlinescankeywords.cpp => main.cpp} | 0 .../apps/blobdump/{blobdump.cpp => main.cpp} | 0 .../csspckgen/{csspckgen.cpp => main.cpp} | 0 .../apps/dempack/{dempack.cpp => main.cpp} | 0 .../{isiscomplete.cpp => main.cpp} | 0 .../kerneldbgen/{kerneldbgen.cpp => main.cpp} | 0 .../messckgen/{messckgen.cpp => main.cpp} | 0 .../messspkgen/{messspkgen.cpp => main.cpp} | 0 .../{prtloganalyzer.cpp => main.cpp} | 0 .../{tgocassis2isis.cpp => main.cpp} | 0 .../{tgocassismos.cpp => main.cpp} | 0 .../{tgocassisrdrgen.cpp => main.cpp} | 0 .../{tgocassisstitch.cpp => main.cpp} | 0 .../{tgocassisunstitch.cpp => main.cpp} | 0 .../apps/vdcomp/{vdcomp.cpp => main.cpp} | 0 .../apps/vik2isis/{vik2isis.cpp => main.cpp} | 0 .../apps/vikcal/{vikcal.cpp => main.cpp} | 0 .../apps/vikclean/{vikclean.cpp => main.cpp} | 0 .../vikfixtrx/{vikfixtrx.cpp => main.cpp} | 0 .../viknobutter/{viknobutter.cpp => main.cpp} | 0 .../viknonoodle/{viknonoodle.cpp => main.cpp} | 0 .../viknopepper/{viknopepper.cpp => main.cpp} | 0 .../viknosalt/{viknosalt.cpp => main.cpp} | 0 .../apps/voy2isis/{voy2isis.cpp => main.cpp} | 0 .../apps/voycal/{voycal.cpp => main.cpp} | 0 .../apps/voyramp/{voyramp.cpp => main.cpp} | 0 isis/tests/AngleTest.cpp | 310 +++++++ isis/tests/BundleSettingsTests.cpp | 873 ++++++++++++++++++ isis/tests/CMakeLists.txt | 15 + isis/tests/ColorTests.cpp | 91 ++ isis/tests/DistanceTests.cpp | 294 ++++++ isis/tests/EndianTests.cpp | 21 + isis/tests/FileNameTests.cpp | 255 +++++ isis/tests/IsisTestMain.cpp | 6 + isis/tests/MatrixTests.cpp | 399 ++++++++ isis/tests/PixelTests.cpp | 481 ++++++++++ isis/tests/SpectelTest.cpp | 57 ++ isis/tests/TestUtilities.h | 67 ++ 474 files changed, 4458 insertions(+), 7121 deletions(-) create mode 100644 .gitmodules create mode 160000 gtest create mode 100644 isis/cmake/gtest.cmake rename isis/src/apollo/apps/apollo2isis/{apollo2isis.cpp => main.cpp} (100%) rename isis/src/apollo/apps/apollocal/{apollocal.cpp => main.cpp} (100%) rename isis/src/apollo/apps/apollofindrx/{apollofindrx.cpp => main.cpp} (100%) rename isis/src/apollo/apps/apollopaninit/{apollopaninit.cpp => main.cpp} (100%) rename isis/src/apollo/apps/apollopanstitcher/{apollopanstitcher.cpp => main.cpp} (100%) rename isis/src/apollo/apps/apolloremrx/{apolloremrx.cpp => main.cpp} (100%) rename isis/src/apollo/apps/apollowarp/{apollowarp.cpp => main.cpp} (100%) rename isis/src/base/apps/algebra/{algebra.cpp => main.cpp} (100%) rename isis/src/base/apps/appjit/{appjit.cpp => main.cpp} (100%) rename isis/src/base/apps/ascii2isis/{ascii2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/automos/{automos.cpp => main.cpp} (100%) rename isis/src/base/apps/autoregtemplate/{autoregtemplate.cpp => main.cpp} (100%) rename isis/src/base/apps/bandnorm/{bandnorm.cpp => main.cpp} (100%) rename isis/src/base/apps/bandtrim/{bandtrim.cpp => main.cpp} (100%) rename isis/src/base/apps/barscale/{barscale.cpp => main.cpp} (100%) rename isis/src/base/apps/bit2bit/{bit2bit.cpp => main.cpp} (100%) rename isis/src/base/apps/blend/{blend.cpp => main.cpp} (100%) rename isis/src/base/apps/butterworth/{butterworth.cpp => main.cpp} (100%) rename isis/src/base/apps/cam2cam/{cam2cam.cpp => main.cpp} (100%) rename isis/src/base/apps/cam2map/{cam2map.cpp => main.cpp} (100%) rename isis/src/base/apps/caminfo/{caminfo.cpp => main.cpp} (100%) rename isis/src/base/apps/campt/{campt.cpp => main.cpp} (100%) rename isis/src/base/apps/camrange/{camrange.cpp => main.cpp} (100%) rename isis/src/base/apps/camstats/{camstats.cpp => main.cpp} (100%) rename isis/src/base/apps/camtrim/{camtrim.cpp => main.cpp} (100%) rename isis/src/base/apps/cathist/{cathist.cpp => main.cpp} (100%) rename isis/src/base/apps/catlab/{catlab.cpp => main.cpp} (100%) rename isis/src/base/apps/catoriglab/{catoriglab.cpp => main.cpp} (100%) rename isis/src/base/apps/center/{center.cpp => main.cpp} (100%) rename isis/src/base/apps/circle/{circle.cpp => main.cpp} (100%) rename isis/src/base/apps/ckwriter/{SpiceSegment.cpp => CkSpiceSegment.cpp} (87%) rename isis/src/base/apps/ckwriter/{SpiceSegment.h => CkSpiceSegment.h} (79%) rename isis/src/base/apps/ckwriter/{ckwriter.cpp => main.cpp} (97%) rename isis/src/base/apps/copylabel/{copylabel.cpp => main.cpp} (100%) rename isis/src/base/apps/cosi/{cosi.cpp => main.cpp} (100%) create mode 100644 isis/src/base/apps/crop/crop.h create mode 100644 isis/src/base/apps/crop/main.cpp rename isis/src/base/apps/cropspecial/{cropspecial.cpp => main.cpp} (100%) rename isis/src/base/apps/csv2table/{csv2table.cpp => main.cpp} (100%) rename isis/src/base/apps/cubeatt/{cubeatt.cpp => main.cpp} (100%) rename isis/src/base/apps/cubeavg/{cubeavg.cpp => main.cpp} (100%) rename isis/src/base/apps/cubediff/{cubediff.cpp => main.cpp} (100%) rename isis/src/base/apps/cubefunc/{cubefunc.cpp => main.cpp} (100%) rename isis/src/base/apps/cubeit/{cubeit.cpp => main.cpp} (100%) rename isis/src/base/apps/cubenorm/{cubenorm.cpp => main.cpp} (100%) rename isis/src/base/apps/ddd2isis/{ddd2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/decorstretch/{decorstretch.cpp => main.cpp} (100%) rename isis/src/base/apps/demprep/{demprep.cpp => main.cpp} (100%) rename isis/src/base/apps/deriv/{deriv.cpp => main.cpp} (100%) rename isis/src/base/apps/desmear/{desmear.cpp => main.cpp} (100%) rename isis/src/base/apps/desmile/{desmile.cpp => main.cpp} (100%) rename isis/src/base/apps/divfilter/{divfilter.cpp => main.cpp} (100%) rename isis/src/base/apps/dsk2isis/{dsk2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/dstripe/{dstripe.cpp => main.cpp} (100%) rename isis/src/base/apps/editlab/{editlab.cpp => main.cpp} (100%) rename isis/src/base/apps/edrget/{edrget.cpp => main.cpp} (100%) rename isis/src/base/apps/enlarge/{enlarge.cpp => main.cpp} (100%) rename isis/src/base/apps/equalizer/{equalizer.cpp => main.cpp} (100%) rename isis/src/base/apps/errors/{errors.cpp => main.cpp} (100%) rename isis/src/base/apps/explode/{explode.cpp => main.cpp} (100%) rename isis/src/base/apps/fakecube/{fakecube.cpp => main.cpp} (100%) rename isis/src/base/apps/fft/{fft.cpp => main.cpp} (100%) rename isis/src/base/apps/fillgap/{fillgap.cpp => main.cpp} (100%) rename isis/src/base/apps/findgaps/{findgaps.cpp => main.cpp} (100%) rename isis/src/base/apps/findimageoverlaps/{findimageoverlaps.cpp => main.cpp} (100%) rename isis/src/base/apps/findrx/{findrx.cpp => main.cpp} (100%) rename isis/src/base/apps/fits2isis/{fits2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/flip/{flip.cpp => main.cpp} (100%) rename isis/src/base/apps/footprintinit/{footprintinit.cpp => main.cpp} (100%) rename isis/src/base/apps/footprintmerge/{footprintmerge.cpp => main.cpp} (100%) rename isis/src/base/apps/fx/{fx.cpp => main.cpp} (100%) rename isis/src/base/apps/gauss/{gauss.cpp => main.cpp} (100%) rename isis/src/base/apps/gaussstretch/{gaussstretch.cpp => main.cpp} (100%) rename isis/src/base/apps/getkey/{getkey.cpp => main.cpp} (100%) rename isis/src/base/apps/getsn/{getsn.cpp => main.cpp} (100%) rename isis/src/base/apps/gradient/{gradient.cpp => main.cpp} (100%) rename isis/src/base/apps/greyscale/{greyscale.cpp => main.cpp} (100%) rename isis/src/base/apps/grid/{grid.cpp => main.cpp} (100%) rename isis/src/base/apps/handmos/{handmos.cpp => main.cpp} (100%) rename isis/src/base/apps/highpass/{highpass.cpp => main.cpp} (100%) rename isis/src/base/apps/hist/{hist.cpp => main.cpp} (100%) rename isis/src/base/apps/histeq/{histeq.cpp => main.cpp} (100%) rename isis/src/base/apps/histmatch/{histmatch.cpp => main.cpp} (100%) rename isis/src/base/apps/hsv2rgb/{hsv2rgb.cpp => main.cpp} (100%) rename isis/src/base/apps/ifft/{ifft.cpp => main.cpp} (100%) rename isis/src/base/apps/interestcube/{interestcube.cpp => main.cpp} (100%) rename isis/src/base/apps/isis2ascii/{isis2ascii.cpp => main.cpp} (100%) rename isis/src/base/apps/isis2fits/{isis2fits.cpp => main.cpp} (100%) rename isis/src/base/apps/isis2gml/{isis2gml.cpp => main.cpp} (100%) rename isis/src/base/apps/isis2pds/{isis2pds.cpp => main.cpp} (100%) rename isis/src/base/apps/isis2raw/{isis2raw.cpp => main.cpp} (100%) rename isis/src/base/apps/isis2std/{isis2std.cpp => main.cpp} (100%) rename isis/src/base/apps/isisminer/{isisminer.cpp => main.cpp} (100%) rename isis/src/base/apps/isisui/{isisui.cpp => main.cpp} (100%) rename isis/src/base/apps/kernfilter/{kernfilter.cpp => main.cpp} (100%) rename isis/src/base/apps/kuwahara/{kuwahara.cpp => main.cpp} (100%) rename isis/src/base/apps/lineeq/{lineeq.cpp => main.cpp} (100%) rename isis/src/base/apps/lowpass/{lowpass.cpp => main.cpp} (100%) rename isis/src/base/apps/makecube/{makecube.cpp => main.cpp} (100%) rename isis/src/base/apps/makeflat/{makeflat.cpp => main.cpp} (100%) rename isis/src/base/apps/map2cam/{map2cam.cpp => main.cpp} (100%) rename isis/src/base/apps/map2map/{map2map.cpp => main.cpp} (100%) rename isis/src/base/apps/mapgrid/{mapgrid.cpp => main.cpp} (100%) rename isis/src/base/apps/maplab/{maplab.cpp => main.cpp} (100%) rename isis/src/base/apps/mapmos/{mapmos.cpp => main.cpp} (100%) rename isis/src/base/apps/mappt/{mappt.cpp => main.cpp} (100%) rename isis/src/base/apps/mapsize/{mapsize.cpp => main.cpp} (100%) rename isis/src/base/apps/maptemplate/{maptemplate.cpp => main.cpp} (100%) rename isis/src/base/apps/maptrim/{maptrim.cpp => main.cpp} (100%) rename isis/src/base/apps/mask/{mask.cpp => main.cpp} (100%) rename isis/src/base/apps/median/{median.cpp => main.cpp} (100%) rename isis/src/base/apps/minmax/{minmax.cpp => main.cpp} (100%) rename isis/src/base/apps/mirror/{mirror.cpp => main.cpp} (100%) rename isis/src/base/apps/mode/{mode.cpp => main.cpp} (100%) rename isis/src/base/apps/mosrange/{mosrange.cpp => main.cpp} (100%) rename isis/src/base/apps/mvstats/{mvstats.cpp => main.cpp} (100%) rename isis/src/base/apps/nocam2map/{nocam2map.cpp => main.cpp} (100%) rename isis/src/base/apps/noisefilter/{noisefilter.cpp => main.cpp} (100%) rename isis/src/base/apps/noproj/{noproj.cpp => main.cpp} (100%) rename isis/src/base/apps/noseam/{noseam.cpp => main.cpp} (100%) rename isis/src/base/apps/outline/{outline.cpp => main.cpp} (100%) rename isis/src/base/apps/overlapstats/{overlapstats.cpp => main.cpp} (100%) rename isis/src/base/apps/pad/{pad.cpp => main.cpp} (100%) rename isis/src/base/apps/pca/{pca.cpp => main.cpp} (100%) rename isis/src/base/apps/pds2isis/{pds2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/percent/{percent.cpp => main.cpp} (100%) rename isis/src/base/apps/phocube/{phocube.cpp => main.cpp} (100%) rename isis/src/base/apps/phoempglobal/{phoempglobal.cpp => main.cpp} (100%) rename isis/src/base/apps/phoemplocal/{phoemplocal.cpp => main.cpp} (100%) rename isis/src/base/apps/phohillier/{phohillier.cpp => main.cpp} (100%) rename isis/src/base/apps/photemplate/{photemplate.cpp => main.cpp} (100%) rename isis/src/base/apps/photomet/{photomet.cpp => main.cpp} (100%) rename isis/src/base/apps/photrim/{photrim.cpp => main.cpp} (100%) rename isis/src/base/apps/pixel2map/{pixel2map.cpp => main.cpp} (100%) rename isis/src/base/apps/poly/{poly.cpp => main.cpp} (100%) rename isis/src/base/apps/pvldiff/{pvldiff.cpp => main.cpp} (100%) rename isis/src/base/apps/ratio/{ratio.cpp => main.cpp} (100%) rename isis/src/base/apps/raw2isis/{raw2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/reduce/{reduce.cpp => main.cpp} (100%) rename isis/src/base/apps/remrx/{remrx.cpp => main.cpp} (100%) rename isis/src/base/apps/rgb2hsv/{rgb2hsv.cpp => main.cpp} (100%) rename isis/src/base/apps/ringsautomos/{ringsautomos.cpp => main.cpp} (100%) rename isis/src/base/apps/ringscam2map/{ringscam2map.cpp => main.cpp} (100%) rename isis/src/base/apps/ringsmappt/{ringsmappt.cpp => main.cpp} (100%) rename isis/src/base/apps/ringspt/{ringspt.cpp => main.cpp} (100%) rename isis/src/base/apps/rotate/{rotate.cpp => main.cpp} (100%) rename isis/src/base/apps/segment/{segment.cpp => main.cpp} (100%) rename isis/src/base/apps/shade/{shade.cpp => main.cpp} (100%) rename isis/src/base/apps/shadow/{shadow.cpp => main.cpp} (100%) rename isis/src/base/apps/shadowtau/{shadowtau.cpp => main.cpp} (100%) rename isis/src/base/apps/sharpen/{sharpen.cpp => main.cpp} (100%) rename isis/src/base/apps/sigmastretch/{sigmastretch.cpp => main.cpp} (100%) rename isis/src/base/apps/skymap/{skymap.cpp => main.cpp} (100%) rename isis/src/base/apps/skypt/{skypt.cpp => main.cpp} (100%) rename isis/src/base/apps/skyrange/{skyrange.cpp => main.cpp} (100%) rename isis/src/base/apps/slpmap/{slpmap.cpp => main.cpp} (100%) rename isis/src/base/apps/smtk/{smtk.cpp => main.cpp} (100%) rename isis/src/base/apps/specadd/{specadd.cpp => main.cpp} (100%) rename isis/src/base/apps/specdivfilter/{specdivfilter.cpp => main.cpp} (100%) rename isis/src/base/apps/spechighpass/{spechighpass.cpp => main.cpp} (100%) rename isis/src/base/apps/speclowpass/{speclowpass.cpp => main.cpp} (100%) rename isis/src/base/apps/specpix/{specpix.cpp => main.cpp} (100%) rename isis/src/base/apps/spicefit/{spicefit.cpp => main.cpp} (100%) rename isis/src/base/apps/spiceinit/{spiceinit.cpp => main.cpp} (100%) rename isis/src/base/apps/spiceserver/{spiceserver.cpp => main.cpp} (100%) rename isis/src/base/apps/spkwriter/{SpiceSegment.cpp => SpkSpiceSegment.cpp} (89%) rename isis/src/base/apps/spkwriter/{SpiceSegment.h => SpkSpiceSegment.h} (73%) rename isis/src/base/apps/spkwriter/{spkwriter.cpp => main.cpp} (100%) rename isis/src/base/apps/stats/{stats.cpp => main.cpp} (100%) rename isis/src/base/apps/std2isis/{std2isis.cpp => main.cpp} (100%) rename isis/src/base/apps/stretch/{stretch.cpp => main.cpp} (100%) rename isis/src/base/apps/svfilter/{svfilter.cpp => main.cpp} (100%) rename isis/src/base/apps/table2cube/{table2cube.cpp => main.cpp} (100%) rename isis/src/base/apps/tabledump/{tabledump.cpp => main.cpp} (100%) rename isis/src/base/apps/tonematch/{tonematch.cpp => main.cpp} (100%) rename isis/src/base/apps/trackextract/{trackextract.cpp => main.cpp} (100%) rename isis/src/base/apps/translate/{translate.cpp => main.cpp} (100%) rename isis/src/base/apps/trim/{trim.cpp => main.cpp} (100%) rename isis/src/base/apps/trimfilter/{trimfilter.cpp => main.cpp} (100%) rename isis/src/base/apps/uncrop/{uncrop.cpp => main.cpp} (100%) rename isis/src/base/apps/vicar2isis/{vicar2isis.cpp => main.cpp} (100%) rename isis/src/{lro/apps/lronac2pds => base/objs/Md5}/md5.cpp (100%) rename isis/src/{lro/apps/lrowac2pds => base/objs/Md5}/md5.h (100%) rename isis/src/{lro/apps/lronac2pds => base/objs/Md5Wrapper}/md5wrapper.cpp (100%) rename isis/src/{lro/apps/lronac2pds => base/objs/Md5Wrapper}/md5wrapper.h (100%) rename isis/src/cassini/apps/ciss2isis/{ciss2isis.cpp => main.cpp} (100%) rename isis/src/cassini/apps/cisscal/{cisscal.cpp => main.cpp} (100%) rename isis/src/cassini/apps/vims2isis/{vims2isis.cpp => main.cpp} (100%) rename isis/src/cassini/apps/vimscal/{vimscal.cpp => main.cpp} (100%) rename isis/src/chandrayaan1/apps/chan1m32isis/{chan1m32isis.cpp => main.cpp} (100%) rename isis/src/clementine/apps/clem2isis/{clem2isis.cpp => main.cpp} (100%) rename isis/src/clementine/apps/clemhirescal/{clemhirescal.cpp => main.cpp} (100%) rename isis/src/clementine/apps/clemnircal/{clemnircal.cpp => main.cpp} (100%) rename isis/src/clementine/apps/clemnirclean/{clemnirclean.cpp => main.cpp} (100%) rename isis/src/clementine/apps/clemnirnoise/{clemnirnoise.cpp => main.cpp} (100%) rename isis/src/clementine/apps/clemuvviscal/{clemuvviscal.cpp => main.cpp} (100%) rename isis/src/control/apps/autoseed/{autoseed.cpp => main.cpp} (100%) rename isis/src/control/apps/cnet2dem/{cnet2dem.cpp => main.cpp} (100%) rename isis/src/control/apps/cnet2mat/{cnet2mat.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetadd/{cnetadd.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetbin2pvl/{cnetbin2pvl.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetcheck/{cnetcheck.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetcombinept/{cnetcombinept.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetdiff/{cnetdiff.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetedit/{cnetedit.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetextract/{cnetextract.cpp => main.cpp} (100%) rename isis/src/control/apps/cnethist/{cnethist.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetmerge/{cnetmerge.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetnewradii/{cnetnewradii.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetpvl2bin/{cnetpvl2bin.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetref/{cnetref.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetsplit/{cnetsplit.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetstats/{cnetstats.cpp => main.cpp} (100%) rename isis/src/control/apps/cnettable/{cnettable.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetthinner/{cnetthinner.cpp => main.cpp} (100%) rename isis/src/control/apps/cnetwinnow/{cnetwinnow.cpp => main.cpp} (100%) rename isis/src/control/apps/coreg/{coreg.cpp => main.cpp} (100%) rename isis/src/control/apps/deltack/{deltack.cpp => main.cpp} (100%) rename isis/src/control/apps/findfeatures/{findfeatures.cpp => main.cpp} (100%) rename isis/src/control/apps/fplanemap/{fplanemap.cpp => main.cpp} (100%) rename isis/src/control/apps/jigsaw/{jigsaw.cpp => main.cpp} (100%) rename isis/src/control/apps/mat2cnet/{mat2cnet.cpp => main.cpp} (100%) rename isis/src/control/apps/pointreg/{pointreg.cpp => main.cpp} (100%) rename isis/src/control/apps/seedgrid/{seedgrid.cpp => main.cpp} (100%) rename isis/src/control/apps/slither/{slither.cpp => main.cpp} (100%) rename isis/src/control/apps/sumspice/{sumspice.cpp => main.cpp} (100%) rename isis/src/control/apps/warp/{warp.cpp => main.cpp} (100%) rename isis/src/dawn/apps/dawnfc2isis/{dawnfc2isis.cpp => main.cpp} (100%) rename isis/src/dawn/apps/dawnvir2isis/{dawnvir2isis.cpp => main.cpp} (100%) rename isis/src/dev/apps/camcoeffs/{camcoeffs.cpp => main.cpp} (100%) rename isis/src/dev/apps/camdev/{camdev.cpp => main.cpp} (100%) rename isis/src/dev/apps/camtest/{camtest.cpp => main.cpp} (100%) rename isis/src/dev/apps/m3loc2net/{m3loc2net.cpp => main.cpp} (100%) rename isis/src/galileo/apps/gllnims2isis/{gllnims2isis.cpp => main.cpp} (100%) rename isis/src/galileo/apps/gllssi2isis/{gllssi2isis.cpp => main.cpp} (100%) rename isis/src/galileo/apps/gllssical/{gllssical.cpp => main.cpp} (100%) rename isis/src/hayabusa/apps/amica2isis/{ImportFits.cpp => AmicaImportFits.cpp} (88%) rename isis/src/hayabusa/apps/amica2isis/{ImportFits.h => AmicaImportFits.h} (84%) rename isis/src/hayabusa/apps/amica2isis/{amica2isis.cpp => main.cpp} (94%) rename isis/src/hayabusa/apps/amicacal/{amicacal.cpp => main.cpp} (100%) rename isis/src/hayabusa/apps/hyb1pds4gen/{hyb1pds4gen.cpp => main.cpp} (100%) rename isis/src/hayabusa/apps/nirs2isis/{ImportFits.cpp => NirsImportFits.cpp} (88%) rename isis/src/hayabusa/apps/nirs2isis/{ImportFits.h => NirsImportFits.h} (84%) rename isis/src/hayabusa/apps/nirs2isis/{nirs2isis.cpp => main.cpp} (98%) rename isis/src/hayabusa2/apps/hyb2onc2isis/{hyb2onc2isis.cpp => main.cpp} (100%) rename isis/src/hayabusa2/apps/hyb2onccal/{hyb2onccal.cpp => main.cpp} (100%) rename isis/src/juno/apps/junocam2isis/{junocam2isis.cpp => main.cpp} (100%) rename isis/src/kaguya/apps/kaguyami2isis/{kaguyami2isis.cpp => main.cpp} (100%) rename isis/src/kaguya/apps/kaguyasp2ascii/{kaguyasp2ascii.cpp => main.cpp} (100%) rename isis/src/kaguya/apps/kaguyasp2isis/{kaguyasp2isis.cpp => main.cpp} (100%) rename isis/src/kaguya/apps/kaguyatc2isis/{kaguyatc2isis.cpp => main.cpp} (100%) rename isis/src/kaguya/apps/mimap2isis/{mimap2isis.cpp => main.cpp} (100%) rename isis/src/lo/apps/lo2isis/{lo2isis.cpp => main.cpp} (100%) rename isis/src/lo/apps/lopdsgen/{lopdsgen.cpp => main.cpp} (100%) rename isis/src/lro/apps/lromakeflat/{lromakeflat.cpp => main.cpp} (100%) rename isis/src/lro/apps/lronac2isis/{lronac2isis.cpp => main.cpp} (100%) rename isis/src/lro/apps/lronac2pds/{lronac2pds.cpp => main.cpp} (100%) delete mode 100644 isis/src/lro/apps/lronac2pds/md5.h rename isis/src/lro/apps/lronaccal/{lronaccal.cpp => main.cpp} (100%) rename isis/src/lro/apps/lronacecho/{lronacecho.cpp => main.cpp} (100%) rename isis/src/lro/apps/lronacpho/{lronacpho.cpp => main.cpp} (100%) rename isis/src/lro/apps/lrowac2isis/{lrowac2isis.cpp => main.cpp} (100%) rename isis/src/lro/apps/lrowac2pds/{lrowac2pds.cpp => main.cpp} (100%) delete mode 100644 isis/src/lro/apps/lrowac2pds/md5.cpp delete mode 100644 isis/src/lro/apps/lrowac2pds/md5wrapper.cpp delete mode 100644 isis/src/lro/apps/lrowac2pds/md5wrapper.h rename isis/src/lro/apps/lrowaccal/{lrowaccal.cpp => main.cpp} (100%) delete mode 100644 isis/src/lro/apps/lrowacpho/PhotometricFunction.cpp delete mode 100644 isis/src/lro/apps/lrowacpho/PhotometricFunction.h rename isis/src/lro/apps/lrowacpho/{lrowacpho.cpp => main.cpp} (87%) rename isis/src/lro/apps/mrf2isis/{mrf2isis.cpp => main.cpp} (100%) rename isis/src/lro/apps/mrf2pds/{mrf2pds.cpp => main.cpp} (100%) rename isis/src/lro/{apps/lronacpho => objs/PhotometricFunction}/PhotometricFunction.cpp (99%) rename isis/src/lro/{apps/lronacpho => objs/PhotometricFunction}/PhotometricFunction.h (100%) rename isis/src/mariner/apps/mar102isis/{mar102isis.cpp => main.cpp} (100%) rename isis/src/mariner/apps/mar10cal/{mar10cal.cpp => main.cpp} (100%) rename isis/src/mariner/apps/mar10clean/{mar10clean.cpp => main.cpp} (100%) rename isis/src/mariner/apps/mar10nonoise/{mar10nonoise.cpp => main.cpp} (100%) rename isis/src/mariner/apps/mar10restore/{mar10restore.cpp => main.cpp} (100%) rename isis/src/mer/apps/mer2isis/{mer2isis.cpp => main.cpp} (100%) rename isis/src/mer/apps/mical/{mical.cpp => main.cpp} (100%) rename isis/src/messenger/apps/mdis2isis/{mdis2isis.cpp => main.cpp} (100%) rename isis/src/messenger/apps/mdis2pds/{mdis2pds.cpp => main.cpp} (100%) rename isis/src/messenger/apps/mdiscal/{mdiscal.cpp => main.cpp} (100%) rename isis/src/messenger/apps/mdisddr/{mdisddr.cpp => main.cpp} (100%) rename isis/src/messenger/apps/mdisedrinfo/{mdisedrinfo.cpp => main.cpp} (100%) rename isis/src/messenger/apps/mdisproc/{mdisproc.cpp => main.cpp} (100%) rename isis/src/mex/apps/hrsc2isis/{hrsc2isis.cpp => main.cpp} (100%) rename isis/src/mgs/apps/moc2isis/{moc2isis.cpp => main.cpp} (100%) rename isis/src/mgs/apps/moccal/{moccal.cpp => main.cpp} (100%) rename isis/src/mgs/apps/mocevenodd/{mocevenodd.cpp => main.cpp} (100%) rename isis/src/mgs/apps/mocgap/{mocgap.cpp => main.cpp} (100%) rename isis/src/mgs/apps/mocnoise50/{mocnoise50.cpp => main.cpp} (100%) rename isis/src/mgs/apps/mocproc/{mocproc.cpp => main.cpp} (100%) delete mode 100644 isis/src/mgs/apps/mocuncompress/getdecode.cpp rename isis/src/mgs/apps/mocuncompress/{readmocisis.cpp => main.cpp} (67%) delete mode 100644 isis/src/mgs/apps/mocuncompress/pmain.cpp rename isis/src/mro/apps/crism2isis/{crism2isis.cpp => main.cpp} (100%) rename isis/src/mro/apps/ctxcal/{ctxcal.cpp => main.cpp} (100%) rename isis/src/mro/apps/ctxevenodd/{ctxevenodd.cpp => main.cpp} (100%) rename isis/src/mro/apps/hi2isis/{hi2isis.cpp => main.cpp} (63%) delete mode 100644 isis/src/mro/apps/hical/GainChannelNormalize.h delete mode 100644 isis/src/mro/apps/hical/GainFlatField.h delete mode 100644 isis/src/mro/apps/hical/GainLineDrift.h delete mode 100644 isis/src/mro/apps/hical/GainNonLinearity.h delete mode 100644 isis/src/mro/apps/hical/GainTemperature.h delete mode 100644 isis/src/mro/apps/hical/GainUnitConversion.h delete mode 100644 isis/src/mro/apps/hical/HISTORY delete mode 100644 isis/src/mro/apps/hical/HiBlob.h delete mode 100644 isis/src/mro/apps/hical/HiCalConf.cpp delete mode 100644 isis/src/mro/apps/hical/HiCalConf.h delete mode 100644 isis/src/mro/apps/hical/HiCalData.h delete mode 100644 isis/src/mro/apps/hical/HiCalTypes.h delete mode 100644 isis/src/mro/apps/hical/HiCalUtil.h delete mode 100644 isis/src/mro/apps/hical/LoadCSV.cpp delete mode 100644 isis/src/mro/apps/hical/LoadCSV.h delete mode 100644 isis/src/mro/apps/hical/LowPassFilter.h delete mode 100644 isis/src/mro/apps/hical/Module.h delete mode 100644 isis/src/mro/apps/hical/NonLinearLSQ.cpp delete mode 100644 isis/src/mro/apps/hical/NonLinearLSQ.h delete mode 100644 isis/src/mro/apps/hical/SplineFill.h delete mode 100644 isis/src/mro/apps/hical/ZeroBufferFit.cpp delete mode 100644 isis/src/mro/apps/hical/ZeroBufferFit.h delete mode 100644 isis/src/mro/apps/hical/ZeroBufferSmooth.h delete mode 100644 isis/src/mro/apps/hical/ZeroDark.h delete mode 100644 isis/src/mro/apps/hical/ZeroReverse.h rename isis/src/mro/apps/hical/{hical.xml => hicalbeta.xml} (97%) rename isis/src/mro/apps/hical/{hical.cpp => main.cpp} (100%) rename isis/src/mro/apps/hicalbeta/{hicalbeta.cpp => main.cpp} (100%) rename isis/src/mro/apps/hicalproc/{hicalproc.cpp => main.cpp} (100%) rename isis/src/mro/apps/hiccdstitch/{hiccdstitch.cpp => main.cpp} (100%) rename isis/src/mro/apps/hicolormos/{hicolormos.cpp => main.cpp} (100%) rename isis/src/mro/apps/hicrop/{hicrop.cpp => main.cpp} (100%) rename isis/src/mro/apps/hicubeit/{hicubeit.cpp => main.cpp} (100%) rename isis/src/mro/apps/hicubenorm/{hicubenorm.cpp => main.cpp} (100%) rename isis/src/mro/apps/hideal2pds/{hideal2pds.cpp => main.cpp} (100%) rename isis/src/mro/apps/hidestripe/{hidestripe.cpp => main.cpp} (100%) rename isis/src/mro/apps/hidtmgen/{hidtmgen.cpp => main.cpp} (100%) rename isis/src/mro/apps/hiequal/{hiequal.cpp => main.cpp} (100%) rename isis/src/mro/apps/hifringe/{hifringe.cpp => main.cpp} (100%) rename isis/src/mro/apps/hifurrows/{hifurrows.cpp => main.cpp} (100%) rename isis/src/mro/apps/higlob/{higlob.cpp => main.cpp} (100%) rename isis/src/mro/apps/hijitreg/{hijitreg.cpp => main.cpp} (100%) rename isis/src/mro/apps/hijitter/{hijitter.cpp => main.cpp} (100%) rename isis/src/mro/apps/himos/{himos.cpp => main.cpp} (100%) rename isis/src/mro/apps/hinoise/{hinoise.cpp => main.cpp} (100%) rename isis/src/mro/apps/hirdr2isis/{hirdr2isis.cpp => main.cpp} (100%) rename isis/src/mro/apps/hirdrgen/{hirdrgen.cpp => main.cpp} (100%) rename isis/src/mro/apps/hisharpen/{hisharpen.cpp => main.cpp} (100%) rename isis/src/mro/apps/histat/{histat.cpp => main.cpp} (100%) rename isis/src/mro/apps/histitch/{histitch.cpp => main.cpp} (100%) rename isis/src/mro/apps/marci2isis/{marci2isis.cpp => main.cpp} (100%) rename isis/src/mro/apps/marcical/{marcical.cpp => main.cpp} (100%) rename isis/src/mro/apps/marciflip/{marciflip.cpp => main.cpp} (100%) rename isis/src/mro/apps/mroctx2isis/{mroctx2isis.cpp => main.cpp} (100%) rename isis/src/mro/apps/pds2hideal/{pds2hideal.cpp => main.cpp} (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/GainChannelNormalize.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/GainFlatField.h (73%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/GainLineDrift.h (72%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/GainNonLinearity.h (71%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/GainTemperature.h (99%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/GainUnitConversion.h (81%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/HiBlob.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/HiCalConf.cpp (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/HiCalConf.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/HiCalData.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/HiCalTypes.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/HiCalUtil.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/LoadCSV.cpp (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/LoadCSV.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/LowPassFilter.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/Module.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/NonLinearLSQ.cpp (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/NonLinearLSQ.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/SplineFill.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/ZeroBufferFit.cpp (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/ZeroBufferFit.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/ZeroBufferSmooth.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/ZeroDark.h (100%) rename isis/src/mro/{apps/hicalbeta => objs/HiCal}/ZeroReverse.h (100%) rename isis/src/near/apps/msi2isis/{msi2isis.cpp => main.cpp} (100%) rename isis/src/newhorizons/apps/leisa2isis/{leisa2isis.cpp => main.cpp} (100%) rename isis/src/newhorizons/apps/lorri2isis/{lorri2isis.cpp => main.cpp} (100%) rename isis/src/newhorizons/apps/mvic2isis/{mvic2isis.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thm2isis/{thm2isis.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thmbasemap1/{thmbasemap1.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thmdriftcor/{thmdriftcor.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thmnoseam/{thmnoseam.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thmproc/{thmproc.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thmvisflat/{thmvisflat.cpp => main.cpp} (100%) rename isis/src/odyssey/apps/thmvistrim/{thmvistrim.cpp => main.cpp} (100%) rename isis/src/osirisrex/apps/ocams2isis/{ocams2isis.cpp => main.cpp} (100%) delete mode 100644 isis/src/qisis/apps/ipce/WarningTreeWidget.cpp delete mode 100644 isis/src/qisis/apps/ipce/WarningTreeWidget.h rename isis/src/qisis/apps/ipce/{ipce.cpp => main.cpp} (100%) rename isis/src/qisis/apps/qmos/{qmos.cpp => main.cpp} (100%) rename isis/src/qisis/apps/qnet/{qnet.cpp => main.cpp} (100%) rename isis/src/qisis/apps/qtie/{qtie.cpp => main.cpp} (100%) rename isis/src/qisis/apps/qview/{qview.cpp => main.cpp} (100%) rename isis/src/rolo/apps/rolo2isis/{rolo2isis.cpp => main.cpp} (100%) rename isis/src/rosetta/apps/rososiris2isis/{rososiris2isis.cpp => main.cpp} (100%) rename isis/src/rosetta/apps/rosvirtis2isis/{rosvirtis2isis.cpp => main.cpp} (100%) rename isis/src/socet/apps/socetframesettings/{socetframesettings.cpp => main.cpp} (100%) rename isis/src/socet/apps/socetlinescankeywords/{socetlinescankeywords.cpp => main.cpp} (100%) rename isis/src/system/apps/blobdump/{blobdump.cpp => main.cpp} (100%) rename isis/src/system/apps/csspckgen/{csspckgen.cpp => main.cpp} (100%) rename isis/src/system/apps/dempack/{dempack.cpp => main.cpp} (100%) rename isis/src/system/apps/isiscomplete/{isiscomplete.cpp => main.cpp} (100%) rename isis/src/system/apps/kerneldbgen/{kerneldbgen.cpp => main.cpp} (100%) rename isis/src/system/apps/messckgen/{messckgen.cpp => main.cpp} (100%) rename isis/src/system/apps/messspkgen/{messspkgen.cpp => main.cpp} (100%) rename isis/src/system/apps/prtloganalyzer/{prtloganalyzer.cpp => main.cpp} (100%) rename isis/src/tgo/apps/tgocassis2isis/{tgocassis2isis.cpp => main.cpp} (100%) rename isis/src/tgo/apps/tgocassismos/{tgocassismos.cpp => main.cpp} (100%) rename isis/src/tgo/apps/tgocassisrdrgen/{tgocassisrdrgen.cpp => main.cpp} (100%) rename isis/src/tgo/apps/tgocassisstitch/{tgocassisstitch.cpp => main.cpp} (100%) rename isis/src/tgo/apps/tgocassisunstitch/{tgocassisunstitch.cpp => main.cpp} (100%) rename isis/src/viking/apps/vdcomp/{vdcomp.cpp => main.cpp} (100%) rename isis/src/viking/apps/vik2isis/{vik2isis.cpp => main.cpp} (100%) rename isis/src/viking/apps/vikcal/{vikcal.cpp => main.cpp} (100%) rename isis/src/viking/apps/vikclean/{vikclean.cpp => main.cpp} (100%) rename isis/src/viking/apps/vikfixtrx/{vikfixtrx.cpp => main.cpp} (100%) rename isis/src/viking/apps/viknobutter/{viknobutter.cpp => main.cpp} (100%) rename isis/src/viking/apps/viknonoodle/{viknonoodle.cpp => main.cpp} (100%) rename isis/src/viking/apps/viknopepper/{viknopepper.cpp => main.cpp} (100%) rename isis/src/viking/apps/viknosalt/{viknosalt.cpp => main.cpp} (100%) rename isis/src/voyager/apps/voy2isis/{voy2isis.cpp => main.cpp} (100%) rename isis/src/voyager/apps/voycal/{voycal.cpp => main.cpp} (100%) rename isis/src/voyager/apps/voyramp/{voyramp.cpp => main.cpp} (100%) create mode 100644 isis/tests/AngleTest.cpp create mode 100644 isis/tests/BundleSettingsTests.cpp create mode 100644 isis/tests/CMakeLists.txt create mode 100644 isis/tests/ColorTests.cpp create mode 100644 isis/tests/DistanceTests.cpp create mode 100644 isis/tests/EndianTests.cpp create mode 100644 isis/tests/FileNameTests.cpp create mode 100644 isis/tests/IsisTestMain.cpp create mode 100644 isis/tests/MatrixTests.cpp create mode 100644 isis/tests/PixelTests.cpp create mode 100644 isis/tests/SpectelTest.cpp create mode 100644 isis/tests/TestUtilities.h diff --git a/.gitignore b/.gitignore index c47e1b7744..be8aea3649 100644 --- a/.gitignore +++ b/.gitignore @@ -43,11 +43,38 @@ print.prt */tsts/*/truth/* */tsts/*/output/* */build/ +build/ */install/ +# Created by https://www.gitignore.io/api/macos +# Edit at https://www.gitignore.io/?templates=macos +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +# End of https://www.gitignore.io/api/macos diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..110ccc43ce --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "gtest"] + path = gtest + url = git@github.com:google/googletest.git diff --git a/environment.yml b/environment.yml index c96c1247c6..6aec932d69 100644 --- a/environment.yml +++ b/environment.yml @@ -10,7 +10,7 @@ dependencies: - bullet==2.86.1=0 - bz2file==0.98 - bzip2==1.0.6=1 - - cmake==3.9.1=0 + - cmake>=3.10 - cspice==66=h470a237_3 - curl==7.60.0=0 - doxygen==1.8.14=0 diff --git a/environment_gcc4.yml b/environment_gcc4.yml index 658ab336d3..98ee1458d4 100644 --- a/environment_gcc4.yml +++ b/environment_gcc4.yml @@ -11,7 +11,7 @@ dependencies: - bullet==2.86.1=0 - bz2file==0.98 - bzip2==1.0.6=1 - - cmake==3.9.1=0 + - cmake>=3.10 - cspice==66=h470a237_3 - curl==7.60.0=0 - doxygen==1.8.14=0 diff --git a/gtest b/gtest new file mode 160000 index 0000000000..529c2c6f4a --- /dev/null +++ b/gtest @@ -0,0 +1 @@ +Subproject commit 529c2c6f4af29dadb8ee5cddf6a7919caa5ca5f6 diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 468d52045e..6827f60298 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -5,17 +5,22 @@ # Specify the required version of CMake. If your machine does not # have this, it should be easy to build from https://cmake.org/download/ -cmake_minimum_required(VERSION 3.4) +cmake_minimum_required(VERSION 3.10) # Point cmake to our other CMake files. list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +# set(CMAKE_FIND_FRAMEWORK LAST) +set(CMAKE_FRAMEWORK_PATH /System/Library/Frameworks/) + set(CMAKE_FIND_FRAMEWORK LAST) include(AddIsisModule) include(Utilities) include(TestSetup) include(InstallThirdParty) +include(cmake/gtest.cmake) +include(GoogleTest) #=============================================================================== #=============================================================================== @@ -244,6 +249,13 @@ find_package(PNG REQUIRED) find_package(Kakadu) find_package(Geos 3.5.0 REQUIRED) find_package(Armadillo REQUIRED) +find_package(Threads) + + +# Im this case, we specify the version numbers being searched for in the non-traditional installs. +if(APPLE) +find_package(OpenGL REQUIRED) +endif(APPLE) if(pybindings) find_package(Python REQUIRED) @@ -458,3 +470,9 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts DESTINATION ${CMAKE_INSTA # the end of this file containing a CMakeLists.txt file which includes all of # the desired post-install commands inside. add_subdirectory(cmake) +option (BUILD_TESTS "Build tests" ON) +if(BUILD_TESTS) + include(CTest) + enable_testing() + add_subdirectory(tests) +endif() diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index f4a87169d2..c71cb78291 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -12,9 +12,8 @@ function(add_isis_app folder libDependencies) get_filename_component(appName ${folder} NAME) set(internalAppName ${appName}_app) - # Get the source and header files - file(GLOB headers "${folder}/*.h" "${folder}/*.hpp") - file(GLOB sources "${folder}/*.c" "${folder}/*.cpp") + # Get the main and xml files + file(GLOB sources "${folder}/main.cpp") file(GLOB xmlFiles "${folder}/*.xml") # All the XML files need to be copied to the install directory @@ -62,7 +61,10 @@ endfunction(add_isis_app) # Set up the lone unit test in an obj folder function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) - + if(NOT ${testFile}) + # Skip if no unitest + return() + endif() # Get the object name (last folder part) get_filename_component(folder ${testFile} DIRECTORY) get_filename_component(filename ${folder} NAME) @@ -99,10 +101,13 @@ function(add_isis_obj folder reqLibs) # Find the source and header files file(GLOB headers "${folder}/*.h" "${folder}/*.hpp") + # ignore app.cpp file(GLOB sources "${folder}/*.c" "${folder}/*.cpp") file(GLOB truths "${folder}/*.truth") file(GLOB plugins "${folder}/*.plugin") + list(REMOVE_ITEM sources "${folder}/main.cpp") + # Generate protobuf, ui, and moc files if needed. generate_protobuf_files(protoFiles ${folder}) generate_ui_files(uiFiles ${folder}) @@ -203,8 +208,8 @@ function(add_isis_module name) foreach(f ${topFolders}) # Folders: apps, lib, tests - set(objsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/objs") set(appsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/apps") + set(objsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/objs") set(tstsDir "${CMAKE_CURRENT_LIST_DIR}/${f}/tsts") # Start with the objs folder @@ -212,20 +217,19 @@ function(add_isis_module name) get_subdirectory_list(${appsDir} thisAppFolders) get_subdirectory_list(${tstsDir} thisTstFolders) - set(objFolders ${objFolders} ${thisObjFolders}) + set(objFolders ${objFolders} ${thisObjFolders} ${thisAppFolders}) set(appFolders ${appFolders} ${thisAppFolders}) set(tstFolders ${tstFolders} ${thisTstFolders}) endforeach() - # Now that we have the library info, call function to add it to the build! # - Base module depends on 3rd party libs, other libs also depend on base. # - Only the base module gets both a static and shared library. if(${name} STREQUAL ${CORE_LIB_NAME}) - set(reqLibs ${ALLLIBS}) + set(reqLibs "${ALLLIBS};gtest;gmock;${CMAKE_THREAD_LIBS_INIT}") set(alsoStatic ON) else() - set(reqLibs "${CORE_LIB_NAME};${ALLLIBS}") + set(reqLibs "${CORE_LIB_NAME};${ALLLIBS};gtest;gmock;${CMAKE_THREAD_LIBS_INIT}") set(alsoStatic OFF) endif() diff --git a/isis/cmake/gtest.cmake b/isis/cmake/gtest.cmake new file mode 100644 index 0000000000..1208baf31e --- /dev/null +++ b/isis/cmake/gtest.cmake @@ -0,0 +1,39 @@ +if (NOT TARGET gtest) + set(GOOGLETEST_ROOT ${CMAKE_SOURCE_DIR}/../gtest/googletest CACHE STRING "Google Test source root") + + include_directories(SYSTEM + ${GOOGLETEST_ROOT} + ${GOOGLETEST_ROOT}/include + ) + + set(GOOGLETEST_SOURCES + ${GOOGLETEST_ROOT}/src/gtest-all.cc + ${GOOGLETEST_ROOT}/src/gtest_main.cc + ) + + foreach(_source ${GOOGLETEST_SOURCES}) + set_source_files_properties(${_source} PROPERTIES GENERATED 1) + endforeach() + + add_library(gtest ${GOOGLETEST_SOURCES}) +endif() + +if (NOT TARGET gmock) + set(GOOGLEMOCK_ROOT ${CMAKE_SOURCE_DIR}/../gtest/googlemock CACHE STRING "Google Mock source root") + + include_directories(SYSTEM + ${GOOGLEMOCK_ROOT} + ${GOOGLEMOCK_ROOT}/include + ) + + set(GOOGLEMOCK_SOURCES + ${GOOGLEMOCK_ROOT}/src/gmock-all.cc + ${GOOGLEMOCK_ROOT}/src/gmock_main.cc + ) + + foreach(_source ${GOOGLEMOCK_SOURCES}) + set_source_files_properties(${_source} PROPERTIES GENERATED 1) + endforeach() + + add_library(gmock ${GOOGLEMOCK_SOURCES}) +endif() diff --git a/isis/src/apollo/apps/apollo2isis/apollo2isis.cpp b/isis/src/apollo/apps/apollo2isis/main.cpp similarity index 100% rename from isis/src/apollo/apps/apollo2isis/apollo2isis.cpp rename to isis/src/apollo/apps/apollo2isis/main.cpp diff --git a/isis/src/apollo/apps/apollocal/apollocal.cpp b/isis/src/apollo/apps/apollocal/main.cpp similarity index 100% rename from isis/src/apollo/apps/apollocal/apollocal.cpp rename to isis/src/apollo/apps/apollocal/main.cpp diff --git a/isis/src/apollo/apps/apollofindrx/apollofindrx.cpp b/isis/src/apollo/apps/apollofindrx/main.cpp similarity index 100% rename from isis/src/apollo/apps/apollofindrx/apollofindrx.cpp rename to isis/src/apollo/apps/apollofindrx/main.cpp diff --git a/isis/src/apollo/apps/apollopaninit/apollopaninit.cpp b/isis/src/apollo/apps/apollopaninit/main.cpp similarity index 100% rename from isis/src/apollo/apps/apollopaninit/apollopaninit.cpp rename to isis/src/apollo/apps/apollopaninit/main.cpp diff --git a/isis/src/apollo/apps/apollopanstitcher/apollopanstitcher.cpp b/isis/src/apollo/apps/apollopanstitcher/main.cpp similarity index 100% rename from isis/src/apollo/apps/apollopanstitcher/apollopanstitcher.cpp rename to isis/src/apollo/apps/apollopanstitcher/main.cpp diff --git a/isis/src/apollo/apps/apolloremrx/apolloremrx.cpp b/isis/src/apollo/apps/apolloremrx/main.cpp similarity index 100% rename from isis/src/apollo/apps/apolloremrx/apolloremrx.cpp rename to isis/src/apollo/apps/apolloremrx/main.cpp diff --git a/isis/src/apollo/apps/apollowarp/apollowarp.cpp b/isis/src/apollo/apps/apollowarp/main.cpp similarity index 100% rename from isis/src/apollo/apps/apollowarp/apollowarp.cpp rename to isis/src/apollo/apps/apollowarp/main.cpp diff --git a/isis/src/base/apps/algebra/algebra.cpp b/isis/src/base/apps/algebra/main.cpp similarity index 100% rename from isis/src/base/apps/algebra/algebra.cpp rename to isis/src/base/apps/algebra/main.cpp diff --git a/isis/src/base/apps/appjit/appjit.cpp b/isis/src/base/apps/appjit/main.cpp similarity index 100% rename from isis/src/base/apps/appjit/appjit.cpp rename to isis/src/base/apps/appjit/main.cpp diff --git a/isis/src/base/apps/ascii2isis/ascii2isis.cpp b/isis/src/base/apps/ascii2isis/main.cpp similarity index 100% rename from isis/src/base/apps/ascii2isis/ascii2isis.cpp rename to isis/src/base/apps/ascii2isis/main.cpp diff --git a/isis/src/base/apps/automos/automos.cpp b/isis/src/base/apps/automos/main.cpp similarity index 100% rename from isis/src/base/apps/automos/automos.cpp rename to isis/src/base/apps/automos/main.cpp diff --git a/isis/src/base/apps/autoregtemplate/autoregtemplate.cpp b/isis/src/base/apps/autoregtemplate/main.cpp similarity index 100% rename from isis/src/base/apps/autoregtemplate/autoregtemplate.cpp rename to isis/src/base/apps/autoregtemplate/main.cpp diff --git a/isis/src/base/apps/bandnorm/bandnorm.cpp b/isis/src/base/apps/bandnorm/main.cpp similarity index 100% rename from isis/src/base/apps/bandnorm/bandnorm.cpp rename to isis/src/base/apps/bandnorm/main.cpp diff --git a/isis/src/base/apps/bandtrim/bandtrim.cpp b/isis/src/base/apps/bandtrim/main.cpp similarity index 100% rename from isis/src/base/apps/bandtrim/bandtrim.cpp rename to isis/src/base/apps/bandtrim/main.cpp diff --git a/isis/src/base/apps/barscale/barscale.cpp b/isis/src/base/apps/barscale/main.cpp similarity index 100% rename from isis/src/base/apps/barscale/barscale.cpp rename to isis/src/base/apps/barscale/main.cpp diff --git a/isis/src/base/apps/bit2bit/bit2bit.cpp b/isis/src/base/apps/bit2bit/main.cpp similarity index 100% rename from isis/src/base/apps/bit2bit/bit2bit.cpp rename to isis/src/base/apps/bit2bit/main.cpp diff --git a/isis/src/base/apps/blend/blend.cpp b/isis/src/base/apps/blend/main.cpp similarity index 100% rename from isis/src/base/apps/blend/blend.cpp rename to isis/src/base/apps/blend/main.cpp diff --git a/isis/src/base/apps/butterworth/butterworth.cpp b/isis/src/base/apps/butterworth/main.cpp similarity index 100% rename from isis/src/base/apps/butterworth/butterworth.cpp rename to isis/src/base/apps/butterworth/main.cpp diff --git a/isis/src/base/apps/cam2cam/cam2cam.cpp b/isis/src/base/apps/cam2cam/main.cpp similarity index 100% rename from isis/src/base/apps/cam2cam/cam2cam.cpp rename to isis/src/base/apps/cam2cam/main.cpp diff --git a/isis/src/base/apps/cam2map/cam2map.cpp b/isis/src/base/apps/cam2map/main.cpp similarity index 100% rename from isis/src/base/apps/cam2map/cam2map.cpp rename to isis/src/base/apps/cam2map/main.cpp diff --git a/isis/src/base/apps/caminfo/caminfo.cpp b/isis/src/base/apps/caminfo/main.cpp similarity index 100% rename from isis/src/base/apps/caminfo/caminfo.cpp rename to isis/src/base/apps/caminfo/main.cpp diff --git a/isis/src/base/apps/campt/campt.cpp b/isis/src/base/apps/campt/main.cpp similarity index 100% rename from isis/src/base/apps/campt/campt.cpp rename to isis/src/base/apps/campt/main.cpp diff --git a/isis/src/base/apps/camrange/camrange.cpp b/isis/src/base/apps/camrange/main.cpp similarity index 100% rename from isis/src/base/apps/camrange/camrange.cpp rename to isis/src/base/apps/camrange/main.cpp diff --git a/isis/src/base/apps/camstats/camstats.cpp b/isis/src/base/apps/camstats/main.cpp similarity index 100% rename from isis/src/base/apps/camstats/camstats.cpp rename to isis/src/base/apps/camstats/main.cpp diff --git a/isis/src/base/apps/camtrim/camtrim.cpp b/isis/src/base/apps/camtrim/main.cpp similarity index 100% rename from isis/src/base/apps/camtrim/camtrim.cpp rename to isis/src/base/apps/camtrim/main.cpp diff --git a/isis/src/base/apps/cathist/cathist.cpp b/isis/src/base/apps/cathist/main.cpp similarity index 100% rename from isis/src/base/apps/cathist/cathist.cpp rename to isis/src/base/apps/cathist/main.cpp diff --git a/isis/src/base/apps/catlab/catlab.cpp b/isis/src/base/apps/catlab/main.cpp similarity index 100% rename from isis/src/base/apps/catlab/catlab.cpp rename to isis/src/base/apps/catlab/main.cpp diff --git a/isis/src/base/apps/catoriglab/catoriglab.cpp b/isis/src/base/apps/catoriglab/main.cpp similarity index 100% rename from isis/src/base/apps/catoriglab/catoriglab.cpp rename to isis/src/base/apps/catoriglab/main.cpp diff --git a/isis/src/base/apps/center/center.cpp b/isis/src/base/apps/center/main.cpp similarity index 100% rename from isis/src/base/apps/center/center.cpp rename to isis/src/base/apps/center/main.cpp diff --git a/isis/src/base/apps/circle/circle.cpp b/isis/src/base/apps/circle/main.cpp similarity index 100% rename from isis/src/base/apps/circle/circle.cpp rename to isis/src/base/apps/circle/main.cpp diff --git a/isis/src/base/apps/ckwriter/CkKernelWriter.cpp b/isis/src/base/apps/ckwriter/CkKernelWriter.cpp index 8ebb9c3124..5057893df0 100644 --- a/isis/src/base/apps/ckwriter/CkKernelWriter.cpp +++ b/isis/src/base/apps/ckwriter/CkKernelWriter.cpp @@ -37,7 +37,7 @@ #include "IString.h" #include "NaifStatus.h" #include "Pvl.h" -#include "SpiceSegment.h" +#include "CkSpiceSegment.h" #include "TextFile.h" using namespace std; @@ -105,7 +105,7 @@ namespace Isis { return; } - void CkKernelWriter::write(const SpiceSegment &segment) const { + void CkKernelWriter::write(const CkSpiceSegment &segment) const { switch ( _ckType ) { case 1: writeCk1(segment); @@ -175,10 +175,10 @@ namespace Isis { return; } - void CkKernelWriter::writeCk1(const SpiceSegment &segment) const { + void CkKernelWriter::writeCk1(const CkSpiceSegment &segment) const { - const SpiceSegment::SVector &sclks = segment.SCLKTimes(); - const SpiceSegment::SMatrix &quats = segment.Quaternions(); + const CkSpiceSegment::SVector &sclks = segment.SCLKTimes(); + const CkSpiceSegment::SMatrix &quats = segment.Quaternions(); ConstSpiceDouble *avvs(0); SpiceBoolean hasAvvs(SPICEFALSE); if ( segment.hasAngularVelocities() ) { @@ -198,28 +198,28 @@ namespace Isis { return; } - void CkKernelWriter::writeCk2(const SpiceSegment &segment) const { + void CkKernelWriter::writeCk2(const CkSpiceSegment &segment) const { if ( !segment.hasAngularVelocities() ) { QString mess = "Type 2 CK kernels require angular velocities"; throw IException(IException::User, mess, _FILEINFO_); } - const SpiceSegment::SVector &sclks = segment.SCLKTimes(); - const SpiceSegment::SMatrix &quats = segment.Quaternions(); - const SpiceSegment::SMatrix &avvs = segment.AngularVelocities(); + const CkSpiceSegment::SVector &sclks = segment.SCLKTimes(); + const CkSpiceSegment::SMatrix &quats = segment.Quaternions(); + const CkSpiceSegment::SMatrix &avvs = segment.AngularVelocities(); QString refFrame = segment.ReferenceFrame(); QString segId = segment.Id(); int nrecs = segment.size(); - SpiceSegment::SVector stops(nrecs); + CkSpiceSegment::SVector stops(nrecs); for ( int i = 0 ; i < nrecs-1 ; i++) { stops[i] = sclks[i+1]; } stops[nrecs-1] = sclks[nrecs-1]; - SpiceSegment::SVector rates(nrecs, segment.TickRate()); + CkSpiceSegment::SVector rates(nrecs, segment.TickRate()); NaifStatus::CheckErrors(); ckw02_c(_handle, sclks[0], sclks[nrecs-1], segment.InstCode(), refFrame.toLatin1().data(), segId.toLatin1().data(), nrecs, &sclks[0], @@ -229,10 +229,10 @@ namespace Isis { } - void CkKernelWriter::writeCk3(const SpiceSegment &segment) const { + void CkKernelWriter::writeCk3(const CkSpiceSegment &segment) const { - const SpiceSegment::SVector &sclks = segment.SCLKTimes(); - const SpiceSegment::SMatrix &quats = segment.Quaternions(); + const CkSpiceSegment::SVector &sclks = segment.SCLKTimes(); + const CkSpiceSegment::SMatrix &quats = segment.Quaternions(); ConstSpiceDouble *avvs(0); SpiceBoolean hasAvvs(SPICEFALSE); if ( segment.hasAngularVelocities() ) { @@ -257,5 +257,3 @@ namespace Isis { }; // namespace Isis - - diff --git a/isis/src/base/apps/ckwriter/CkKernelWriter.h b/isis/src/base/apps/ckwriter/CkKernelWriter.h index 1d2ede9103..c1c492244b 100644 --- a/isis/src/base/apps/ckwriter/CkKernelWriter.h +++ b/isis/src/base/apps/ckwriter/CkKernelWriter.h @@ -1,67 +1,67 @@ #ifndef CkKernelWriter_h #define CkKernelWriter_h -/** - * @file - * $Revision$ +/** + * @file + * $Revision$ * $Date$ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. - * + * * $Id$ - */ + */ #include namespace Isis { -class SpiceSegment; +class CkSpiceSegment; /** * @brief Support writting of CK kernels to NAIF SPICE files - * + * * This class is designed to support the fundamentals of opening/creating a NAIF * CK kernel file for writing if CK segments. There are currently up to 5 * different types of CK kernels that NAIF supports in its toolkit. We are * mainly concerned with creation of type 3 CK kernels. - * + * * As such, this object provides the ability to create general CK files, specify * comment section size, get the I/O handle associated with the output file, * write comments to the kernel and then close the file when you are done. - * + * * The thing you may see as missing is the write method. Due to the structure * of the NAIF CK writing procedure, each CK type has its own routine that has * different arguments. This makes it "messy" to try and support writing of all * CK types directly in this class. It makes more sense, to me anyway, that the * environment that contains the data to write can better provide the data * required to properly write the CK segment. See the implementation of - * SpiceSegment which provides this procedure. It will have a method that - * looks like SpiceSegment::write(CkKernelWriter &writer). This class exposes + * CkSpiceSegment which provides this procedure. It will have a method that + * looks like CkSpiceSegment::write(CkKernelWriter &writer). This class exposes * the handle need to write the segment and the addComment() method to add * details in the kernel file regarding the segment being written. * * @author 2010-11-25 Kris Becker * - * @internal + * @internal * @history 2015-07-21 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors * were signaled. References #2248. */ class CkKernelWriter { public: CkKernelWriter(); - CkKernelWriter(const QString &kfile, const int &csize = 0, + CkKernelWriter(const QString &kfile, const int &csize = 0, const int &cktype = 3); virtual ~CkKernelWriter() { close(); } @@ -74,9 +74,9 @@ class CkKernelWriter { bool addComment(const QString &comment); bool addCommentFile(const QString &comfile); - void open(const QString &kfile, + void open(const QString &kfile, const QString &intCkName = "USGS_CK_File"); - void write(const SpiceSegment &segment) const; + void write(const CkSpiceSegment &segment) const; void close(); private: @@ -89,13 +89,11 @@ class CkKernelWriter { void init(); bool writeComment(const QString &comment) const; - void writeCk1(const SpiceSegment &segment) const; - void writeCk2(const SpiceSegment &segment) const; - void writeCk3(const SpiceSegment &segment) const; + void writeCk1(const CkSpiceSegment &segment) const; + void writeCk2(const CkSpiceSegment &segment) const; + void writeCk3(const CkSpiceSegment &segment) const; }; }; // namespace Isis #endif - - diff --git a/isis/src/base/apps/ckwriter/SpiceSegment.cpp b/isis/src/base/apps/ckwriter/CkSpiceSegment.cpp similarity index 87% rename from isis/src/base/apps/ckwriter/SpiceSegment.cpp rename to isis/src/base/apps/ckwriter/CkSpiceSegment.cpp index 526cd89bdf..cf69304475 100644 --- a/isis/src/base/apps/ckwriter/SpiceSegment.cpp +++ b/isis/src/base/apps/ckwriter/CkSpiceSegment.cpp @@ -43,7 +43,7 @@ #include "IException.h" #include "IString.h" #include "NaifStatus.h" -#include "SpiceSegment.h" +#include "CkSpiceSegment.h" #include "Table.h" using namespace std; @@ -52,12 +52,12 @@ namespace Isis { /** Default constructor */ -SpiceSegment::SpiceSegment() { +CkSpiceSegment::CkSpiceSegment() { init(); } /** Construct with an ISIS cube file */ -SpiceSegment::SpiceSegment(const QString &fname) { +CkSpiceSegment::CkSpiceSegment(const QString &fname) { init(); Cube cube; cube.open(fname); @@ -65,13 +65,13 @@ SpiceSegment::SpiceSegment(const QString &fname) { } /** Construct with a Cube and optional naming of table */ -SpiceSegment::SpiceSegment(Cube &cube, const QString &tblname) { +CkSpiceSegment::CkSpiceSegment(Cube &cube, const QString &tblname) { init(); import(cube, tblname); } /** Set the name of the CK SPICE segment */ -void SpiceSegment::setId(const QString &name) { +void CkSpiceSegment::setId(const QString &name) { _name = name; return; } @@ -87,7 +87,7 @@ void SpiceSegment::setId(const QString &name) { * * @return int Returns number of kernels loaded */ -int SpiceSegment::FurnshKernelType(const QString &ktypes) const { +int CkSpiceSegment::FurnshKernelType(const QString &ktypes) const { return (_kernels.Load(ktypes)); } @@ -103,7 +103,7 @@ int SpiceSegment::FurnshKernelType(const QString &ktypes) const { * * @return int Returns number of kernels unloaded */ -int SpiceSegment::UnloadKernelType(const QString &ktypes) const { +int CkSpiceSegment::UnloadKernelType(const QString &ktypes) const { return (_kernels.UnLoad(ktypes)); } @@ -115,9 +115,9 @@ int SpiceSegment::UnloadKernelType(const QString &ktypes) const { * 1-element vector with the start time of the first quaternion. * * - * @return SpiceSegment::SVector& Vector of start times for each interval + * @return CkSpiceSegment::SVector& Vector of start times for each interval */ -SpiceSegment::SVector SpiceSegment::SCLKStartIntervals() const { +CkSpiceSegment::SVector CkSpiceSegment::SCLKStartIntervals() const { return (SVector(1, _times[0])); } @@ -129,9 +129,9 @@ SpiceSegment::SVector SpiceSegment::SCLKStartIntervals() const { * 1-element vector with the stop time of the last quaternion. * * - * @return SpiceSegment::SVector& Vector of stop times for each interval + * @return CkSpiceSegment::SVector& Vector of stop times for each interval */ -SpiceSegment::SVector SpiceSegment::SCLKStopIntervals() const { +CkSpiceSegment::SVector CkSpiceSegment::SCLKStopIntervals() const { return (SVector(1, _times[size(_times)-1])); } @@ -148,13 +148,13 @@ SpiceSegment::SVector SpiceSegment::SCLKStopIntervals() const { * time. * * - * @return SpiceSegment::SVector& Vector of tick rates for each interval + * @return CkSpiceSegment::SVector& Vector of tick rates for each interval */ -SpiceSegment::SVector SpiceSegment::TickRate() const { +CkSpiceSegment::SVector CkSpiceSegment::TickRate() const { return (SVector(1, _tickRate)); } -QString SpiceSegment::getKeyValue(PvlObject &label, +QString CkSpiceSegment::getKeyValue(PvlObject &label, const QString &keyword) { QString value(""); if ( label.hasKeyword(keyword,Pvl::Traverse) ) { @@ -163,7 +163,7 @@ QString SpiceSegment::getKeyValue(PvlObject &label, return (value); } -void SpiceSegment::import(Cube &cube, const QString &tblname) { +void CkSpiceSegment::import(Cube &cube, const QString &tblname) { _fname = cube.fileName(); @@ -279,7 +279,7 @@ void SpiceSegment::import(Cube &cube, const QString &tblname) { } -SpiceSegment::SMatrix SpiceSegment::getQuaternions(const SMatrix &spice) const { +CkSpiceSegment::SMatrix CkSpiceSegment::getQuaternions(const SMatrix &spice) const { int nrecs = size(spice); SMatrix quats(nrecs, 4); @@ -291,7 +291,7 @@ SpiceSegment::SMatrix SpiceSegment::getQuaternions(const SMatrix &spice) const { return (quats); } -SpiceSegment::SMatrix SpiceSegment::getAngularVelocities(const SMatrix &spice) +CkSpiceSegment::SMatrix CkSpiceSegment::getAngularVelocities(const SMatrix &spice) const { int nrecs = size(spice); int fields = spice.dim2(); @@ -310,7 +310,7 @@ SpiceSegment::SMatrix SpiceSegment::getAngularVelocities(const SMatrix &spice) } -SpiceSegment::SVector SpiceSegment::getTimes(const SMatrix &spice) const { +CkSpiceSegment::SVector CkSpiceSegment::getTimes(const SMatrix &spice) const { int nrecs = size(spice); SVector etdp(nrecs); int tcol = spice.dim2() - 1; @@ -321,7 +321,7 @@ SpiceSegment::SVector SpiceSegment::getTimes(const SMatrix &spice) const { return (etdp); } -bool SpiceSegment::getTimeDependentFrameIds(Table &table, int &toId, int &fromId) const { +bool CkSpiceSegment::getTimeDependentFrameIds(Table &table, int &toId, int &fromId) const { // Load the constant and time-based frame traces and mission frame ids std::vector tdfids; if ( table.Label().hasKeyword("TimeDependentFrames") ) { @@ -343,32 +343,32 @@ bool SpiceSegment::getTimeDependentFrameIds(Table &table, int &toId, int &fromId /** - * @brief Determine left/right CK rotation chains that match mission CK format - * - * This method determines the left and right rotation chains that are needed to - * convert the quaternions stored in ISIS CK blobs to reference and frame states + * @brief Determine left/right CK rotation chains that match mission CK format + * + * This method determines the left and right rotation chains that are needed to + * convert the quaternions stored in ISIS CK blobs to reference and frame states * as represented in the mission CK kernels. These chains are determined solely - * from the time dependent frames from the blob labels. - * - * Note that if there is no rotation required, an empty or 1 element vector is + * from the time dependent frames from the blob labels. + * + * Note that if there is no rotation required, an empty or 1 element vector is * returned. It is up to the caller to decide how to handle this situation. - * - * @author 2013-06-07 Kris Becker - * @internal + * + * @author 2013-06-07 Kris Becker + * @internal * @history 2012-12-16 Kris Becker - Fixed problem when the * TimeDependentFrames keyword does not contain one or * both of the CK reference frames. Fixes #1737. - * - * @param table - * @param leftBase - * @param rightBase - * @param leftChain - * @param rightChain - * - * @return bool True if both left and right chains are valid, false if failure + * + * @param table + * @param leftBase + * @param rightBase + * @param leftChain + * @param rightChain + * + * @return bool True if both left and right chains are valid, false if failure * occurs. */ -bool SpiceSegment::getFrameChains(Table &table, const int &leftBase, +bool CkSpiceSegment::getFrameChains(Table &table, const int &leftBase, const int &rightBase, QVector &leftChain, QVector &rightChain) const { @@ -397,8 +397,8 @@ bool SpiceSegment::getFrameChains(Table &table, const int &leftBase, if ( (nfound == 0) || (nfound > 2) ) { ostringstream mess; - mess << "Left/Right CK frame ids invalid in TimeDependentFrames label keyword." - << " Must have at least 1 and no more than 2 ids but have " + mess << "Left/Right CK frame ids invalid in TimeDependentFrames label keyword." + << " Must have at least 1 and no more than 2 ids but have " << QString::number(nfound); throw IException(IException::User, mess.str(), _FILEINFO_); } @@ -417,7 +417,7 @@ bool SpiceSegment::getFrameChains(Table &table, const int &leftBase, if ( leftBase != lastLeft) leftChain.push_back(leftBase); // Get the right CK ID chain - int lastRight(rightBase); + int lastRight(rightBase); BOOST_REVERSE_FOREACH (int rightId, tdfids) { // if (rightId == 1) continue; // REMOVE THIS - its only testing B1950! // Order is important in this code section! @@ -434,7 +434,7 @@ bool SpiceSegment::getFrameChains(Table &table, const int &leftBase, return (true); } -QString SpiceSegment::getFrameName(int frameid) const { +QString CkSpiceSegment::getFrameName(int frameid) const { SpiceChar frameBuf[40]; NaifStatus::CheckErrors(); frmnam_c ( (SpiceInt) frameid, sizeof(frameBuf), frameBuf); @@ -442,7 +442,7 @@ QString SpiceSegment::getFrameName(int frameid) const { return (QString(frameBuf)); } -SpiceSegment::SMatrix SpiceSegment::getConstantRotation(Table &table) const { +CkSpiceSegment::SMatrix CkSpiceSegment::getConstantRotation(Table &table) const { // Get constant rotation matrix from label SMatrix crot(3,3); try { @@ -461,7 +461,7 @@ SpiceSegment::SMatrix SpiceSegment::getConstantRotation(Table &table) const { return (crot); } -SpiceSegment::SMatrix SpiceSegment::getIdentityRotation(const int &nelements) const { +CkSpiceSegment::SMatrix CkSpiceSegment::getIdentityRotation(const int &nelements) const { // Get constant rotation matrix from label SMatrix irot(nelements, nelements, 0.0); for (int i=0; i < nelements ; i++) { @@ -491,14 +491,14 @@ SpiceSegment::SMatrix SpiceSegment::getIdentityRotation(const int &nelements) co * @param frame2 Frame name of desired state * @param etTime Empheris time to acquire state rotation for * - * @return SpiceSegment::SMatrix A 6x6 state rotation matrix + * @return CkSpiceSegment::SMatrix A 6x6 state rotation matrix */ -SpiceSegment::SMatrix SpiceSegment::computeStateRotation(const QString &frame1, +CkSpiceSegment::SMatrix CkSpiceSegment::computeStateRotation(const QString &frame1, const QString &frame2, double etTime) const { SMatrix state(6,6); NaifStatus::CheckErrors(); -// cout << "StateRotations for frame1 = " << frame1 +// cout << "StateRotations for frame1 = " << frame1 // << " to frame2 = " << frame2 << "\n"; try { @@ -524,8 +524,8 @@ SpiceSegment::SMatrix SpiceSegment::computeStateRotation(const QString &frame1, return (state); } -SpiceSegment::SMatrix SpiceSegment::computeChainRotation( - const QVector &fChain, +CkSpiceSegment::SMatrix CkSpiceSegment::computeChainRotation( + const QVector &fChain, const int &terminatorID, const double &etTime) const { @@ -536,7 +536,7 @@ SpiceSegment::SMatrix SpiceSegment::computeChainRotation( if ( fChain.size() > 0 ) { QVector chain = fChain; - // Check for case where only 1 frame is given. It should be the + // Check for case where only 1 frame is given. It should be the // terminating frame. If it isn't, append it to the list as the last // to frame if ( chain.size() == 1 ) { @@ -561,7 +561,7 @@ SpiceSegment::SMatrix SpiceSegment::computeChainRotation( } -void SpiceSegment::getRotationMatrices(Cube &cube, Camera &camera, Table &table, +void CkSpiceSegment::getRotationMatrices(Cube &cube, Camera &camera, Table &table, SMatSeq &lmats, SMatSeq &rmats, SVector &sclks) { @@ -576,7 +576,7 @@ void SpiceSegment::getRotationMatrices(Cube &cube, Camera &camera, Table &table, QString mess = "Cannot determine time dependent frames! - perhaps a spiceinit is in order."; throw IException(IException::User, mess, _FILEINFO_); } -#else +#else QVector leftFrames, rightFrames; if ( !getFrameChains(table, leftId, rightId, leftFrames, rightFrames) ) { QString mess = "Cannot determine left/right frame chains! - perhaps a spiceinit is in order."; @@ -607,7 +607,7 @@ void SpiceSegment::getRotationMatrices(Cube &cube, Camera &camera, Table &table, return; } -const SpiceSegment::SMatrix &SpiceSegment::getMatrix(const SpiceSegment::SMatSeq &seq, +const CkSpiceSegment::SMatrix &CkSpiceSegment::getMatrix(const CkSpiceSegment::SMatSeq &seq, const int &nth) const { if ( (nth < size(seq)) && (nth >= 0) ) { return (seq[nth]); @@ -615,9 +615,9 @@ const SpiceSegment::SMatrix &SpiceSegment::getMatrix(const SpiceSegment::SMatSeq return (seq[0]); } -SpiceSegment::SVector SpiceSegment::convertTimes( +CkSpiceSegment::SVector CkSpiceSegment::convertTimes( int sclkCode, - const SpiceSegment::SVector &etTimes + const CkSpiceSegment::SVector &etTimes ) { NaifStatus::CheckErrors(); SVector sclks(size(etTimes)); @@ -639,12 +639,12 @@ SpiceSegment::SVector SpiceSegment::convertTimes( } -void SpiceSegment::convert(const SpiceSegment::SMatrix &quats, - const SpiceSegment::SMatrix &avvs, - const SpiceSegment::SMatSeq &lmats, - const SpiceSegment::SMatSeq &rmats, - SpiceSegment::SMatrix &ckQuats, - SpiceSegment::SMatrix &ckAvvs) const { +void CkSpiceSegment::convert(const CkSpiceSegment::SMatrix &quats, + const CkSpiceSegment::SMatrix &avvs, + const CkSpiceSegment::SMatSeq &lmats, + const CkSpiceSegment::SMatSeq &rmats, + CkSpiceSegment::SMatrix &ckQuats, + CkSpiceSegment::SMatrix &ckAvvs) const { ckQuats = SMatrix(quats.dim1(), quats.dim2()); ckAvvs = SMatrix(avvs.dim1(), avvs.dim2()); @@ -683,7 +683,7 @@ void SpiceSegment::convert(const SpiceSegment::SMatrix &quats, } -QString SpiceSegment::getComment() const { +QString CkSpiceSegment::getComment() const { ostringstream comment; FileName fname(_fname); @@ -719,7 +719,7 @@ QString SpiceSegment::getComment() const { return (QString(comment.str().c_str())); } -void SpiceSegment::init() { +void CkSpiceSegment::init() { _camVersion = 1; _name = _fname = ""; _startTime = _endTime = 0.0; @@ -733,7 +733,7 @@ void SpiceSegment::init() { return; } -SpiceSegment::SMatrix SpiceSegment::load(Table &table) { +CkSpiceSegment::SMatrix CkSpiceSegment::load(Table &table) { // Allocate the internal cache and transfer. // Makes some assumptions about the format of the SPICE table in that @@ -784,10 +784,10 @@ SpiceSegment::SMatrix SpiceSegment::load(Table &table) { * @param vec number of elements to add to the bottom * @param matrix Matrix to add elements to * - * @return SpiceSegment::SMatrix Expanded matrix + * @return CkSpiceSegment::SMatrix Expanded matrix */ -SpiceSegment::SMatrix SpiceSegment::expand(int ntop, int nbot, - const SpiceSegment::SMatrix &matrix) +CkSpiceSegment::SMatrix CkSpiceSegment::expand(int ntop, int nbot, + const CkSpiceSegment::SMatrix &matrix) const { // Add lines to matrix at top and bottom int ndim(matrix.dim1()); @@ -841,10 +841,10 @@ SpiceSegment::SMatrix SpiceSegment::expand(int ntop, int nbot, * @param vec number of elements to add to the bottom * @param vector Vector to add elements to * - * @return SpiceSegment::SVector Expanded vector + * @return CkSpiceSegment::SVector Expanded vector */ -SpiceSegment::SVector SpiceSegment::expand(int ntop, int nbot, - const SpiceSegment::SVector &vec) +CkSpiceSegment::SVector CkSpiceSegment::expand(int ntop, int nbot, + const CkSpiceSegment::SVector &vec) const { // Add lines to matrix at top and bottom int ndim(vec.dim1()); @@ -872,7 +872,7 @@ SpiceSegment::SVector SpiceSegment::expand(int ntop, int nbot, return (myvec); } -double SpiceSegment::SCLKtoET(SpiceInt scCode, double sclk) const { +double CkSpiceSegment::SCLKtoET(SpiceInt scCode, double sclk) const { SpiceDouble et; NaifStatus::CheckErrors(); @@ -882,7 +882,7 @@ double SpiceSegment::SCLKtoET(SpiceInt scCode, double sclk) const { return (et); } -double SpiceSegment::ETtoSCLK(SpiceInt scCode, double et) const { +double CkSpiceSegment::ETtoSCLK(SpiceInt scCode, double et) const { SpiceDouble sclk; NaifStatus::CheckErrors(); @@ -892,7 +892,7 @@ double SpiceSegment::ETtoSCLK(SpiceInt scCode, double et) const { return (sclk); } -QString SpiceSegment::toUTC(const double &et) const { +QString CkSpiceSegment::toUTC(const double &et) const { const int UTCLEN = 80; char utcout[UTCLEN]; @@ -904,4 +904,3 @@ QString SpiceSegment::toUTC(const double &et) const { } }; // namespace Isis - diff --git a/isis/src/base/apps/ckwriter/SpiceSegment.h b/isis/src/base/apps/ckwriter/CkSpiceSegment.h similarity index 79% rename from isis/src/base/apps/ckwriter/SpiceSegment.h rename to isis/src/base/apps/ckwriter/CkSpiceSegment.h index 9bee3707d3..e25a40589d 100644 --- a/isis/src/base/apps/ckwriter/SpiceSegment.h +++ b/isis/src/base/apps/ckwriter/CkSpiceSegment.h @@ -1,29 +1,29 @@ -#ifndef SpiceSegment_h -#define SpiceSegment_h -/** - * @file - * $Revision$ +#ifndef CkSpiceSegment_h +#define CkSpiceSegment_h +/** + * @file + * $Revision$ * $Date$ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. - * + * * $Id$ - */ + */ #include #include @@ -55,18 +55,18 @@ class PvlObject; /** * @brief Maintain a SPICE kernel segment for conversions and export - * + * * This class is designed to read SPICE data from ISIS cube blobs and convert * them to proper formats for export to NAIF formatted SPICE kernel files. This * particular implementation supports NAIF CK kernel types 1, 2 and 3. - * - * @author 2010-11-10 Kris Becker - * @internal + * + * @author 2010-11-10 Kris Becker + * @internal * @history 2010-12-09 Kris Becker Added more documentation - * @history 2011-05-04 Kris Becker Added pad time. + * @history 2011-05-04 Kris Becker Added pad time. * @history 2011-05-29 Debbie A. Cook Changed name of local Kernels class to * LocalKernels to avoid confusion - * @history 2011-06-15 Kris Becker Removed use of LocalKernels and use version + * @history 2011-06-15 Kris Becker Removed use of LocalKernels and use version * in system; added loading of IAK kernel * specifically for Cassini support; removed * conditionalized obsolete code. @@ -77,23 +77,23 @@ class PvlObject; * instrument code since the IdealCamera has * no code. This is safe to do since the * camera is not being used to manipulate - * pixels. - * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis + * pixels. + * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis * coding standards. References #972. - * - * @history 2015-07-21 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors + * + * @history 2015-07-21 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors * were signaled. References #2248. */ -class SpiceSegment { +class CkSpiceSegment { public: typedef TNT::Array1D SVector; //!< 1-D Buffer typedef TNT::Array2D SMatrix; //!< 2-D buffer - SpiceSegment(); - SpiceSegment(const QString &fname); - SpiceSegment(Cube &cube, const QString &tblname = "SpiceSegment"); - virtual ~SpiceSegment() { } - + CkSpiceSegment(); + CkSpiceSegment(const QString &fname); + CkSpiceSegment(Cube &cube, const QString &tblname = "CkSpiceSegment"); + virtual ~CkSpiceSegment() { } + /** Returns the number of elements in the quaternions */ int size() const { return (size(_quats)); } @@ -106,7 +106,7 @@ class SpiceSegment { /** End time of segment in ET */ double endTime() const { return (_endTime); } - bool operator<(const SpiceSegment &segment) const { + bool operator<(const CkSpiceSegment &segment) const { return (startTime() < segment.startTime()); } @@ -165,14 +165,14 @@ class SpiceSegment { template int size(const TNTSTORE &t) const { return (t.dim1()); } QString getKeyValue(PvlObject &label, const QString &keyword); - void import(Cube &cube, const QString &tblname = "SpiceSegment"); + void import(Cube &cube, const QString &tblname = "CkSpiceSegment"); SMatrix load(Table &cache); SMatrix getQuaternions(const SMatrix &spice) const; SMatrix getAngularVelocities(const SMatrix &spice) const; SVector getTimes(const SMatrix &spice) const; bool getTimeDependentFrameIds(Table &table, int &toId, int &fromId) const; - bool getFrameChains(Table &table, const int &leftBase, + bool getFrameChains(Table &table, const int &leftBase, const int &rightBase, QVector &leftChain, QVector &rightChain) const; @@ -180,17 +180,17 @@ class SpiceSegment { SMatrix getConstantRotation(Table &table) const; SMatrix getIdentityRotation(const int &nelements = 3) const; - SMatrix computeStateRotation(const QString &frame1, - const QString &frame2, + SMatrix computeStateRotation(const QString &frame1, + const QString &frame2, double etTime) const; - SMatrix computeChainRotation(const QVector &fChain, - const int &ckId, const double &etTime) const; + SMatrix computeChainRotation(const QVector &fChain, + const int &ckId, const double &etTime) const; void getRotationMatrices(Cube &cube, Camera &camera, Table &table, SMatSeq &lmats, SMatSeq &rmat, SVector &sclks); SVector convertTimes(int scCode, const SVector &etTimes); void convert(const SMatrix &quats, const SMatrix &avvs, - const SMatSeq &lmats, const SMatSeq &rmats, + const SMatSeq &lmats, const SMatSeq &rmats, SMatrix &ckQuats, SMatrix &ckAvvs) const; const SMatrix &getMatrix(const SMatSeq &seq, const int &nth) const; @@ -206,4 +206,3 @@ class SpiceSegment { }; // namespace Isis #endif - diff --git a/isis/src/base/apps/ckwriter/SpiceKernel.cpp b/isis/src/base/apps/ckwriter/SpiceKernel.cpp index 00450d17a1..52b7d6c1c0 100644 --- a/isis/src/base/apps/ckwriter/SpiceKernel.cpp +++ b/isis/src/base/apps/ckwriter/SpiceKernel.cpp @@ -60,20 +60,20 @@ void SpiceKernel::add(const QString &cfile) { } void SpiceKernel::add(Cube &cube) { - m_segments.push_back(SpiceSegment(cube)); + m_segments.push_back(CkSpiceSegment(cube)); return; } -const SpiceSegment &SpiceKernel::operator[](const int i) const { +const CkSpiceSegment &SpiceKernel::operator[](const int i) const { return (m_segments[i]); } -bool CheckSegment(const SpiceSegment *s1, const SpiceSegment *s2) { +bool CheckSegment(const CkSpiceSegment *s1, const CkSpiceSegment *s2) { return (s1->startTime() < s2->startTime()); } QString SpiceKernel::getSummary(const QString &commfile) const { - vector seglist; + vector seglist; for ( int i = 0 ; i < size() ; i++) { seglist.push_back(&m_segments[i]); } @@ -92,7 +92,7 @@ QString SpiceKernel::getSummary(const QString &commfile) const { bool SpiceKernel::validate() const { - QVector seglist; + QVector seglist; for ( int i = 0 ; i < size() ; i++) { seglist.push_back(&m_segments[i]); } @@ -124,13 +124,13 @@ bool SpiceKernel::validate() const { throw IException(IException::User, mess, _FILEINFO_); } - return (true); + return (true); } void SpiceKernel::write(const QString &kname, const QString &comfile, const int cktype) const { - vector seglist; + vector seglist; int comChars(0); for ( int i = 0 ; i < size() ; i++) { seglist.push_back(&m_segments[i]); @@ -282,4 +282,3 @@ Segment (by file) Summary\n\ } }; // namespace Isis - diff --git a/isis/src/base/apps/ckwriter/SpiceKernel.h b/isis/src/base/apps/ckwriter/SpiceKernel.h index 2e40da3dc0..ce17c42e6e 100644 --- a/isis/src/base/apps/ckwriter/SpiceKernel.h +++ b/isis/src/base/apps/ckwriter/SpiceKernel.h @@ -1,29 +1,29 @@ #ifndef SpiceKernel_h #define SpiceKernel_h -/** - * @file - * $Revision$ +/** + * @file + * $Revision$ * $Date$ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. - * + * * $Id$ - */ + */ #include #include @@ -33,19 +33,19 @@ #include "IString.h" #include "IException.h" -#include "SpiceSegment.h" +#include "CkSpiceSegment.h" namespace Isis { /** * @brief Container for SPICE kernel creation - * + * * This class serves as a container for ISIS cube files to prep for writing the * contents to a NAIF SPICE kernel. Each file added is a CK segment. When the * ISIS cube is added, the contents of the Table BLOB (InstrumentRotation for * CKs, InstrumentPosition for SPKs) are read and transformed to the appropriate * state intended to be compatible with kernels issued by each mission source. - * + * * It is designed for ease of use. Here is an example to create the most basic * of CK kernel from a single ISIS file: * @code @@ -53,21 +53,21 @@ namespace Isis { * kernel.add("mycube.cub"); * kernel.write("mycube.ck"); // Writes a type 3 CK kernel by default * @endcode - * + * * Note that processing ISIS cubes is expensive in terms of NAIF kernel * management. Lots of NAIF kernel activity is incurred in resolving all the * necessary requirements to get the SPICE data in a form that satisfies NAIF * kernel specifications. - * + * * @ingroup Utility - * + * * @author 2010-11-22 Kris Becker * @internal - * @history 2010-12-09 Kris Becker Add documentation and example - * @history 2013-07-10 Kris Becker Updated to better conform with coding + * @history 2010-12-09 Kris Becker Add documentation and example + * @history 2013-07-10 Kris Becker Updated to better conform with coding * standards - * @history 2013-12-17 Kris Becker Include user comments in generic comments - * rather than replacing them. + * @history 2013-12-17 Kris Becker Include user comments in generic comments + * rather than replacing them. */ class SpiceKernel { public: @@ -76,7 +76,7 @@ class SpiceKernel { /** Returns the number of segments */ int size() const { return (m_segments.size()); } - const SpiceSegment &operator[](const int i) const; + const CkSpiceSegment &operator[](const int i) const; void add(const QString &fname); void add(Cube &cube); @@ -89,7 +89,7 @@ class SpiceKernel { const int ckType = 3) const; private: - typedef std::vector Segments; + typedef std::vector Segments; Segments m_segments; void init(); @@ -98,4 +98,3 @@ class SpiceKernel { }; // namespace Isis #endif - diff --git a/isis/src/base/apps/ckwriter/ckwriter.cpp b/isis/src/base/apps/ckwriter/main.cpp similarity index 97% rename from isis/src/base/apps/ckwriter/ckwriter.cpp rename to isis/src/base/apps/ckwriter/main.cpp index d2ecfc9b41..3871d14c6c 100644 --- a/isis/src/base/apps/ckwriter/ckwriter.cpp +++ b/isis/src/base/apps/ckwriter/main.cpp @@ -6,7 +6,7 @@ #include "Process.h" #include "Pvl.h" #include "SpiceKernel.h" -#include "SpiceSegment.h" +#include "CkSpiceSegment.h" using namespace std; using namespace Isis; @@ -51,7 +51,7 @@ void IsisMain() { PvlGroup overlap = overrors.group(i); overlap.setName("Overlaps"); overlap.addKeyword(PvlKeyword("Class", "WARNING"), PvlContainer::Replace); - Application::Log(overlap); + Application::Log(overlap); } } diff --git a/isis/src/base/apps/copylabel/copylabel.cpp b/isis/src/base/apps/copylabel/main.cpp similarity index 100% rename from isis/src/base/apps/copylabel/copylabel.cpp rename to isis/src/base/apps/copylabel/main.cpp diff --git a/isis/src/base/apps/cosi/cosi.cpp b/isis/src/base/apps/cosi/main.cpp similarity index 100% rename from isis/src/base/apps/cosi/cosi.cpp rename to isis/src/base/apps/cosi/main.cpp diff --git a/isis/src/base/apps/crop/crop.cpp b/isis/src/base/apps/crop/crop.cpp index 074924e29c..0c7a9d0209 100644 --- a/isis/src/base/apps/crop/crop.cpp +++ b/isis/src/base/apps/crop/crop.cpp @@ -1,35 +1,37 @@ -#include "Isis.h" - #include -#include "Cube.h" -#include "ProcessByLine.h" -#include "SpecialPixel.h" -#include "LineManager.h" -#include "FileName.h" -#include "IException.h" -#include "Projection.h" -#include "AlphaCube.h" -#include "Table.h" -#include "SubArea.h" +#include "crop.h" using namespace std; using namespace Isis; -// Globals and prototypes -int ss, sl, sb; -int ns, nl, nb; -int sinc, linc; -Cube *cube = NULL; -LineManager *in = NULL; +PvlGroup crop(UserInterface &ui) { + // Globals and prototypes + int ss, sl, sb; + int ns, nl, nb; + int sinc, linc; + + Cube *cube = NULL; + LineManager *in = NULL; + + // Line processing routine + auto cropProccess = [&](Buffer &out)->void { + // Read the input line + int iline = sl + (out.Line() - 1) * linc; + in->SetLine(iline, sb); + cube->read(*in); + + // Loop and move appropriate samples + for(int i = 0; i < out.size(); i++) { + out[i] = (*in)[(ss - 1) + i * sinc]; + } -void crop(Buffer &out); + if(out.Line() == nl) sb++; + }; -void IsisMain() { ProcessByLine p; // Open the input cube - UserInterface &ui = Application::GetUserInterface(); QString from = ui.GetAsString("FROM"); CubeAttributeInput inAtt(from); cube = new Cube(); @@ -170,7 +172,7 @@ void IsisMain() { in = new LineManager(*cube); // Crop the input cube - p.StartProcess(crop); + p.StartProcess(cropProccess); delete in; in = NULL; @@ -204,20 +206,5 @@ void IsisMain() { cube = NULL; // Write the results to the log - Application::Log(results); -} - -// Line processing routine -void crop(Buffer &out) { - // Read the input line - int iline = sl + (out.Line() - 1) * linc; - in->SetLine(iline, sb); - cube->read(*in); - - // Loop and move appropriate samples - for(int i = 0; i < out.size(); i++) { - out[i] = (*in)[(ss - 1) + i * sinc]; - } - - if(out.Line() == nl) sb++; + return results; } diff --git a/isis/src/base/apps/crop/crop.h b/isis/src/base/apps/crop/crop.h new file mode 100644 index 0000000000..bbe9fbd549 --- /dev/null +++ b/isis/src/base/apps/crop/crop.h @@ -0,0 +1,13 @@ +#include "Cube.h" +#include "ProcessByLine.h" +#include "SpecialPixel.h" +#include "LineManager.h" +#include "FileName.h" +#include "IException.h" +#include "Projection.h" +#include "AlphaCube.h" +#include "Table.h" +#include "SubArea.h" +#include "UserInterface.h" + +extern Isis::PvlGroup crop(Isis::UserInterface &ui); diff --git a/isis/src/base/apps/crop/main.cpp b/isis/src/base/apps/crop/main.cpp new file mode 100644 index 0000000000..bda49e09f5 --- /dev/null +++ b/isis/src/base/apps/crop/main.cpp @@ -0,0 +1,12 @@ +#include "Isis.h" + +#include "crop.h" + +using namespace std; +using namespace Isis; + +void IsisMain() { + UserInterface &ui = Application::GetUserInterface(); + PvlGroup results = crop(ui); + Application::Log(results); +} diff --git a/isis/src/base/apps/cropspecial/cropspecial.cpp b/isis/src/base/apps/cropspecial/main.cpp similarity index 100% rename from isis/src/base/apps/cropspecial/cropspecial.cpp rename to isis/src/base/apps/cropspecial/main.cpp diff --git a/isis/src/base/apps/csv2table/csv2table.cpp b/isis/src/base/apps/csv2table/main.cpp similarity index 100% rename from isis/src/base/apps/csv2table/csv2table.cpp rename to isis/src/base/apps/csv2table/main.cpp diff --git a/isis/src/base/apps/cubeatt/cubeatt.cpp b/isis/src/base/apps/cubeatt/main.cpp similarity index 100% rename from isis/src/base/apps/cubeatt/cubeatt.cpp rename to isis/src/base/apps/cubeatt/main.cpp diff --git a/isis/src/base/apps/cubeavg/cubeavg.cpp b/isis/src/base/apps/cubeavg/main.cpp similarity index 100% rename from isis/src/base/apps/cubeavg/cubeavg.cpp rename to isis/src/base/apps/cubeavg/main.cpp diff --git a/isis/src/base/apps/cubediff/cubediff.cpp b/isis/src/base/apps/cubediff/main.cpp similarity index 100% rename from isis/src/base/apps/cubediff/cubediff.cpp rename to isis/src/base/apps/cubediff/main.cpp diff --git a/isis/src/base/apps/cubefunc/cubefunc.cpp b/isis/src/base/apps/cubefunc/main.cpp similarity index 100% rename from isis/src/base/apps/cubefunc/cubefunc.cpp rename to isis/src/base/apps/cubefunc/main.cpp diff --git a/isis/src/base/apps/cubeit/cubeit.cpp b/isis/src/base/apps/cubeit/main.cpp similarity index 100% rename from isis/src/base/apps/cubeit/cubeit.cpp rename to isis/src/base/apps/cubeit/main.cpp diff --git a/isis/src/base/apps/cubenorm/cubenorm.cpp b/isis/src/base/apps/cubenorm/main.cpp similarity index 100% rename from isis/src/base/apps/cubenorm/cubenorm.cpp rename to isis/src/base/apps/cubenorm/main.cpp diff --git a/isis/src/base/apps/ddd2isis/ddd2isis.cpp b/isis/src/base/apps/ddd2isis/main.cpp similarity index 100% rename from isis/src/base/apps/ddd2isis/ddd2isis.cpp rename to isis/src/base/apps/ddd2isis/main.cpp diff --git a/isis/src/base/apps/decorstretch/decorstretch.cpp b/isis/src/base/apps/decorstretch/main.cpp similarity index 100% rename from isis/src/base/apps/decorstretch/decorstretch.cpp rename to isis/src/base/apps/decorstretch/main.cpp diff --git a/isis/src/base/apps/demprep/demprep.cpp b/isis/src/base/apps/demprep/main.cpp similarity index 100% rename from isis/src/base/apps/demprep/demprep.cpp rename to isis/src/base/apps/demprep/main.cpp diff --git a/isis/src/base/apps/deriv/deriv.cpp b/isis/src/base/apps/deriv/main.cpp similarity index 100% rename from isis/src/base/apps/deriv/deriv.cpp rename to isis/src/base/apps/deriv/main.cpp diff --git a/isis/src/base/apps/desmear/desmear.cpp b/isis/src/base/apps/desmear/main.cpp similarity index 100% rename from isis/src/base/apps/desmear/desmear.cpp rename to isis/src/base/apps/desmear/main.cpp diff --git a/isis/src/base/apps/desmile/desmile.cpp b/isis/src/base/apps/desmile/main.cpp similarity index 100% rename from isis/src/base/apps/desmile/desmile.cpp rename to isis/src/base/apps/desmile/main.cpp diff --git a/isis/src/base/apps/divfilter/divfilter.cpp b/isis/src/base/apps/divfilter/main.cpp similarity index 100% rename from isis/src/base/apps/divfilter/divfilter.cpp rename to isis/src/base/apps/divfilter/main.cpp diff --git a/isis/src/base/apps/dsk2isis/dsk2isis.cpp b/isis/src/base/apps/dsk2isis/main.cpp similarity index 100% rename from isis/src/base/apps/dsk2isis/dsk2isis.cpp rename to isis/src/base/apps/dsk2isis/main.cpp diff --git a/isis/src/base/apps/dstripe/dstripe.cpp b/isis/src/base/apps/dstripe/main.cpp similarity index 100% rename from isis/src/base/apps/dstripe/dstripe.cpp rename to isis/src/base/apps/dstripe/main.cpp diff --git a/isis/src/base/apps/editlab/editlab.cpp b/isis/src/base/apps/editlab/main.cpp similarity index 100% rename from isis/src/base/apps/editlab/editlab.cpp rename to isis/src/base/apps/editlab/main.cpp diff --git a/isis/src/base/apps/edrget/edrget.cpp b/isis/src/base/apps/edrget/main.cpp similarity index 100% rename from isis/src/base/apps/edrget/edrget.cpp rename to isis/src/base/apps/edrget/main.cpp diff --git a/isis/src/base/apps/enlarge/enlarge.cpp b/isis/src/base/apps/enlarge/main.cpp similarity index 100% rename from isis/src/base/apps/enlarge/enlarge.cpp rename to isis/src/base/apps/enlarge/main.cpp diff --git a/isis/src/base/apps/equalizer/equalizer.cpp b/isis/src/base/apps/equalizer/main.cpp similarity index 100% rename from isis/src/base/apps/equalizer/equalizer.cpp rename to isis/src/base/apps/equalizer/main.cpp diff --git a/isis/src/base/apps/errors/errors.cpp b/isis/src/base/apps/errors/main.cpp similarity index 100% rename from isis/src/base/apps/errors/errors.cpp rename to isis/src/base/apps/errors/main.cpp diff --git a/isis/src/base/apps/explode/explode.cpp b/isis/src/base/apps/explode/main.cpp similarity index 100% rename from isis/src/base/apps/explode/explode.cpp rename to isis/src/base/apps/explode/main.cpp diff --git a/isis/src/base/apps/fakecube/fakecube.cpp b/isis/src/base/apps/fakecube/main.cpp similarity index 100% rename from isis/src/base/apps/fakecube/fakecube.cpp rename to isis/src/base/apps/fakecube/main.cpp diff --git a/isis/src/base/apps/fft/fft.cpp b/isis/src/base/apps/fft/main.cpp similarity index 100% rename from isis/src/base/apps/fft/fft.cpp rename to isis/src/base/apps/fft/main.cpp diff --git a/isis/src/base/apps/fillgap/fillgap.cpp b/isis/src/base/apps/fillgap/main.cpp similarity index 100% rename from isis/src/base/apps/fillgap/fillgap.cpp rename to isis/src/base/apps/fillgap/main.cpp diff --git a/isis/src/base/apps/findgaps/findgaps.cpp b/isis/src/base/apps/findgaps/main.cpp similarity index 100% rename from isis/src/base/apps/findgaps/findgaps.cpp rename to isis/src/base/apps/findgaps/main.cpp diff --git a/isis/src/base/apps/findimageoverlaps/findimageoverlaps.cpp b/isis/src/base/apps/findimageoverlaps/main.cpp similarity index 100% rename from isis/src/base/apps/findimageoverlaps/findimageoverlaps.cpp rename to isis/src/base/apps/findimageoverlaps/main.cpp diff --git a/isis/src/base/apps/findrx/findrx.cpp b/isis/src/base/apps/findrx/main.cpp similarity index 100% rename from isis/src/base/apps/findrx/findrx.cpp rename to isis/src/base/apps/findrx/main.cpp diff --git a/isis/src/base/apps/fits2isis/fits2isis.cpp b/isis/src/base/apps/fits2isis/main.cpp similarity index 100% rename from isis/src/base/apps/fits2isis/fits2isis.cpp rename to isis/src/base/apps/fits2isis/main.cpp diff --git a/isis/src/base/apps/flip/flip.cpp b/isis/src/base/apps/flip/main.cpp similarity index 100% rename from isis/src/base/apps/flip/flip.cpp rename to isis/src/base/apps/flip/main.cpp diff --git a/isis/src/base/apps/footprintinit/footprintinit.cpp b/isis/src/base/apps/footprintinit/main.cpp similarity index 100% rename from isis/src/base/apps/footprintinit/footprintinit.cpp rename to isis/src/base/apps/footprintinit/main.cpp diff --git a/isis/src/base/apps/footprintmerge/footprintmerge.cpp b/isis/src/base/apps/footprintmerge/main.cpp similarity index 100% rename from isis/src/base/apps/footprintmerge/footprintmerge.cpp rename to isis/src/base/apps/footprintmerge/main.cpp diff --git a/isis/src/base/apps/fx/fx.cpp b/isis/src/base/apps/fx/main.cpp similarity index 100% rename from isis/src/base/apps/fx/fx.cpp rename to isis/src/base/apps/fx/main.cpp diff --git a/isis/src/base/apps/gauss/gauss.cpp b/isis/src/base/apps/gauss/main.cpp similarity index 100% rename from isis/src/base/apps/gauss/gauss.cpp rename to isis/src/base/apps/gauss/main.cpp diff --git a/isis/src/base/apps/gaussstretch/gaussstretch.cpp b/isis/src/base/apps/gaussstretch/main.cpp similarity index 100% rename from isis/src/base/apps/gaussstretch/gaussstretch.cpp rename to isis/src/base/apps/gaussstretch/main.cpp diff --git a/isis/src/base/apps/getkey/getkey.cpp b/isis/src/base/apps/getkey/main.cpp similarity index 100% rename from isis/src/base/apps/getkey/getkey.cpp rename to isis/src/base/apps/getkey/main.cpp diff --git a/isis/src/base/apps/getsn/getsn.cpp b/isis/src/base/apps/getsn/main.cpp similarity index 100% rename from isis/src/base/apps/getsn/getsn.cpp rename to isis/src/base/apps/getsn/main.cpp diff --git a/isis/src/base/apps/gradient/gradient.cpp b/isis/src/base/apps/gradient/main.cpp similarity index 100% rename from isis/src/base/apps/gradient/gradient.cpp rename to isis/src/base/apps/gradient/main.cpp diff --git a/isis/src/base/apps/greyscale/greyscale.cpp b/isis/src/base/apps/greyscale/main.cpp similarity index 100% rename from isis/src/base/apps/greyscale/greyscale.cpp rename to isis/src/base/apps/greyscale/main.cpp diff --git a/isis/src/base/apps/grid/grid.cpp b/isis/src/base/apps/grid/main.cpp similarity index 100% rename from isis/src/base/apps/grid/grid.cpp rename to isis/src/base/apps/grid/main.cpp diff --git a/isis/src/base/apps/handmos/handmos.cpp b/isis/src/base/apps/handmos/main.cpp similarity index 100% rename from isis/src/base/apps/handmos/handmos.cpp rename to isis/src/base/apps/handmos/main.cpp diff --git a/isis/src/base/apps/highpass/highpass.cpp b/isis/src/base/apps/highpass/main.cpp similarity index 100% rename from isis/src/base/apps/highpass/highpass.cpp rename to isis/src/base/apps/highpass/main.cpp diff --git a/isis/src/base/apps/hist/hist.cpp b/isis/src/base/apps/hist/main.cpp similarity index 100% rename from isis/src/base/apps/hist/hist.cpp rename to isis/src/base/apps/hist/main.cpp diff --git a/isis/src/base/apps/histeq/histeq.cpp b/isis/src/base/apps/histeq/main.cpp similarity index 100% rename from isis/src/base/apps/histeq/histeq.cpp rename to isis/src/base/apps/histeq/main.cpp diff --git a/isis/src/base/apps/histmatch/histmatch.cpp b/isis/src/base/apps/histmatch/main.cpp similarity index 100% rename from isis/src/base/apps/histmatch/histmatch.cpp rename to isis/src/base/apps/histmatch/main.cpp diff --git a/isis/src/base/apps/hsv2rgb/hsv2rgb.cpp b/isis/src/base/apps/hsv2rgb/main.cpp similarity index 100% rename from isis/src/base/apps/hsv2rgb/hsv2rgb.cpp rename to isis/src/base/apps/hsv2rgb/main.cpp diff --git a/isis/src/base/apps/ifft/ifft.cpp b/isis/src/base/apps/ifft/main.cpp similarity index 100% rename from isis/src/base/apps/ifft/ifft.cpp rename to isis/src/base/apps/ifft/main.cpp diff --git a/isis/src/base/apps/interestcube/interestcube.cpp b/isis/src/base/apps/interestcube/main.cpp similarity index 100% rename from isis/src/base/apps/interestcube/interestcube.cpp rename to isis/src/base/apps/interestcube/main.cpp diff --git a/isis/src/base/apps/isis2ascii/isis2ascii.cpp b/isis/src/base/apps/isis2ascii/main.cpp similarity index 100% rename from isis/src/base/apps/isis2ascii/isis2ascii.cpp rename to isis/src/base/apps/isis2ascii/main.cpp diff --git a/isis/src/base/apps/isis2fits/isis2fits.cpp b/isis/src/base/apps/isis2fits/main.cpp similarity index 100% rename from isis/src/base/apps/isis2fits/isis2fits.cpp rename to isis/src/base/apps/isis2fits/main.cpp diff --git a/isis/src/base/apps/isis2gml/isis2gml.cpp b/isis/src/base/apps/isis2gml/main.cpp similarity index 100% rename from isis/src/base/apps/isis2gml/isis2gml.cpp rename to isis/src/base/apps/isis2gml/main.cpp diff --git a/isis/src/base/apps/isis2pds/isis2pds.cpp b/isis/src/base/apps/isis2pds/main.cpp similarity index 100% rename from isis/src/base/apps/isis2pds/isis2pds.cpp rename to isis/src/base/apps/isis2pds/main.cpp diff --git a/isis/src/base/apps/isis2raw/isis2raw.cpp b/isis/src/base/apps/isis2raw/main.cpp similarity index 100% rename from isis/src/base/apps/isis2raw/isis2raw.cpp rename to isis/src/base/apps/isis2raw/main.cpp diff --git a/isis/src/base/apps/isis2std/isis2std.cpp b/isis/src/base/apps/isis2std/main.cpp similarity index 100% rename from isis/src/base/apps/isis2std/isis2std.cpp rename to isis/src/base/apps/isis2std/main.cpp diff --git a/isis/src/base/apps/isisminer/isisminer.cpp b/isis/src/base/apps/isisminer/main.cpp similarity index 100% rename from isis/src/base/apps/isisminer/isisminer.cpp rename to isis/src/base/apps/isisminer/main.cpp diff --git a/isis/src/base/apps/isisui/isisui.cpp b/isis/src/base/apps/isisui/main.cpp similarity index 100% rename from isis/src/base/apps/isisui/isisui.cpp rename to isis/src/base/apps/isisui/main.cpp diff --git a/isis/src/base/apps/kernfilter/kernfilter.cpp b/isis/src/base/apps/kernfilter/main.cpp similarity index 100% rename from isis/src/base/apps/kernfilter/kernfilter.cpp rename to isis/src/base/apps/kernfilter/main.cpp diff --git a/isis/src/base/apps/kuwahara/kuwahara.cpp b/isis/src/base/apps/kuwahara/main.cpp similarity index 100% rename from isis/src/base/apps/kuwahara/kuwahara.cpp rename to isis/src/base/apps/kuwahara/main.cpp diff --git a/isis/src/base/apps/lineeq/lineeq.cpp b/isis/src/base/apps/lineeq/main.cpp similarity index 100% rename from isis/src/base/apps/lineeq/lineeq.cpp rename to isis/src/base/apps/lineeq/main.cpp diff --git a/isis/src/base/apps/lowpass/lowpass.cpp b/isis/src/base/apps/lowpass/main.cpp similarity index 100% rename from isis/src/base/apps/lowpass/lowpass.cpp rename to isis/src/base/apps/lowpass/main.cpp diff --git a/isis/src/base/apps/makecube/makecube.cpp b/isis/src/base/apps/makecube/main.cpp similarity index 100% rename from isis/src/base/apps/makecube/makecube.cpp rename to isis/src/base/apps/makecube/main.cpp diff --git a/isis/src/base/apps/makeflat/makeflat.cpp b/isis/src/base/apps/makeflat/main.cpp similarity index 100% rename from isis/src/base/apps/makeflat/makeflat.cpp rename to isis/src/base/apps/makeflat/main.cpp diff --git a/isis/src/base/apps/map2cam/map2cam.cpp b/isis/src/base/apps/map2cam/main.cpp similarity index 100% rename from isis/src/base/apps/map2cam/map2cam.cpp rename to isis/src/base/apps/map2cam/main.cpp diff --git a/isis/src/base/apps/map2map/map2map.cpp b/isis/src/base/apps/map2map/main.cpp similarity index 100% rename from isis/src/base/apps/map2map/map2map.cpp rename to isis/src/base/apps/map2map/main.cpp diff --git a/isis/src/base/apps/mapgrid/mapgrid.cpp b/isis/src/base/apps/mapgrid/main.cpp similarity index 100% rename from isis/src/base/apps/mapgrid/mapgrid.cpp rename to isis/src/base/apps/mapgrid/main.cpp diff --git a/isis/src/base/apps/maplab/maplab.cpp b/isis/src/base/apps/maplab/main.cpp similarity index 100% rename from isis/src/base/apps/maplab/maplab.cpp rename to isis/src/base/apps/maplab/main.cpp diff --git a/isis/src/base/apps/mapmos/mapmos.cpp b/isis/src/base/apps/mapmos/main.cpp similarity index 100% rename from isis/src/base/apps/mapmos/mapmos.cpp rename to isis/src/base/apps/mapmos/main.cpp diff --git a/isis/src/base/apps/mappt/mappt.cpp b/isis/src/base/apps/mappt/main.cpp similarity index 100% rename from isis/src/base/apps/mappt/mappt.cpp rename to isis/src/base/apps/mappt/main.cpp diff --git a/isis/src/base/apps/mapsize/mapsize.cpp b/isis/src/base/apps/mapsize/main.cpp similarity index 100% rename from isis/src/base/apps/mapsize/mapsize.cpp rename to isis/src/base/apps/mapsize/main.cpp diff --git a/isis/src/base/apps/maptemplate/maptemplate.cpp b/isis/src/base/apps/maptemplate/main.cpp similarity index 100% rename from isis/src/base/apps/maptemplate/maptemplate.cpp rename to isis/src/base/apps/maptemplate/main.cpp diff --git a/isis/src/base/apps/maptrim/maptrim.cpp b/isis/src/base/apps/maptrim/main.cpp similarity index 100% rename from isis/src/base/apps/maptrim/maptrim.cpp rename to isis/src/base/apps/maptrim/main.cpp diff --git a/isis/src/base/apps/mask/mask.cpp b/isis/src/base/apps/mask/main.cpp similarity index 100% rename from isis/src/base/apps/mask/mask.cpp rename to isis/src/base/apps/mask/main.cpp diff --git a/isis/src/base/apps/median/median.cpp b/isis/src/base/apps/median/main.cpp similarity index 100% rename from isis/src/base/apps/median/median.cpp rename to isis/src/base/apps/median/main.cpp diff --git a/isis/src/base/apps/minmax/minmax.cpp b/isis/src/base/apps/minmax/main.cpp similarity index 100% rename from isis/src/base/apps/minmax/minmax.cpp rename to isis/src/base/apps/minmax/main.cpp diff --git a/isis/src/base/apps/mirror/mirror.cpp b/isis/src/base/apps/mirror/main.cpp similarity index 100% rename from isis/src/base/apps/mirror/mirror.cpp rename to isis/src/base/apps/mirror/main.cpp diff --git a/isis/src/base/apps/mode/mode.cpp b/isis/src/base/apps/mode/main.cpp similarity index 100% rename from isis/src/base/apps/mode/mode.cpp rename to isis/src/base/apps/mode/main.cpp diff --git a/isis/src/base/apps/mosrange/mosrange.cpp b/isis/src/base/apps/mosrange/main.cpp similarity index 100% rename from isis/src/base/apps/mosrange/mosrange.cpp rename to isis/src/base/apps/mosrange/main.cpp diff --git a/isis/src/base/apps/mvstats/mvstats.cpp b/isis/src/base/apps/mvstats/main.cpp similarity index 100% rename from isis/src/base/apps/mvstats/mvstats.cpp rename to isis/src/base/apps/mvstats/main.cpp diff --git a/isis/src/base/apps/nocam2map/nocam2map.cpp b/isis/src/base/apps/nocam2map/main.cpp similarity index 100% rename from isis/src/base/apps/nocam2map/nocam2map.cpp rename to isis/src/base/apps/nocam2map/main.cpp diff --git a/isis/src/base/apps/noisefilter/noisefilter.cpp b/isis/src/base/apps/noisefilter/main.cpp similarity index 100% rename from isis/src/base/apps/noisefilter/noisefilter.cpp rename to isis/src/base/apps/noisefilter/main.cpp diff --git a/isis/src/base/apps/noproj/noproj.cpp b/isis/src/base/apps/noproj/main.cpp similarity index 100% rename from isis/src/base/apps/noproj/noproj.cpp rename to isis/src/base/apps/noproj/main.cpp diff --git a/isis/src/base/apps/noseam/noseam.cpp b/isis/src/base/apps/noseam/main.cpp similarity index 100% rename from isis/src/base/apps/noseam/noseam.cpp rename to isis/src/base/apps/noseam/main.cpp diff --git a/isis/src/base/apps/outline/outline.cpp b/isis/src/base/apps/outline/main.cpp similarity index 100% rename from isis/src/base/apps/outline/outline.cpp rename to isis/src/base/apps/outline/main.cpp diff --git a/isis/src/base/apps/overlapstats/overlapstats.cpp b/isis/src/base/apps/overlapstats/main.cpp similarity index 100% rename from isis/src/base/apps/overlapstats/overlapstats.cpp rename to isis/src/base/apps/overlapstats/main.cpp diff --git a/isis/src/base/apps/pad/pad.cpp b/isis/src/base/apps/pad/main.cpp similarity index 100% rename from isis/src/base/apps/pad/pad.cpp rename to isis/src/base/apps/pad/main.cpp diff --git a/isis/src/base/apps/pca/pca.cpp b/isis/src/base/apps/pca/main.cpp similarity index 100% rename from isis/src/base/apps/pca/pca.cpp rename to isis/src/base/apps/pca/main.cpp diff --git a/isis/src/base/apps/pds2isis/pds2isis.cpp b/isis/src/base/apps/pds2isis/main.cpp similarity index 100% rename from isis/src/base/apps/pds2isis/pds2isis.cpp rename to isis/src/base/apps/pds2isis/main.cpp diff --git a/isis/src/base/apps/percent/percent.cpp b/isis/src/base/apps/percent/main.cpp similarity index 100% rename from isis/src/base/apps/percent/percent.cpp rename to isis/src/base/apps/percent/main.cpp diff --git a/isis/src/base/apps/phocube/phocube.cpp b/isis/src/base/apps/phocube/main.cpp similarity index 100% rename from isis/src/base/apps/phocube/phocube.cpp rename to isis/src/base/apps/phocube/main.cpp diff --git a/isis/src/base/apps/phoempglobal/phoempglobal.cpp b/isis/src/base/apps/phoempglobal/main.cpp similarity index 100% rename from isis/src/base/apps/phoempglobal/phoempglobal.cpp rename to isis/src/base/apps/phoempglobal/main.cpp diff --git a/isis/src/base/apps/phoemplocal/phoemplocal.cpp b/isis/src/base/apps/phoemplocal/main.cpp similarity index 100% rename from isis/src/base/apps/phoemplocal/phoemplocal.cpp rename to isis/src/base/apps/phoemplocal/main.cpp diff --git a/isis/src/base/apps/phohillier/phohillier.cpp b/isis/src/base/apps/phohillier/main.cpp similarity index 100% rename from isis/src/base/apps/phohillier/phohillier.cpp rename to isis/src/base/apps/phohillier/main.cpp diff --git a/isis/src/base/apps/photemplate/photemplate.cpp b/isis/src/base/apps/photemplate/main.cpp similarity index 100% rename from isis/src/base/apps/photemplate/photemplate.cpp rename to isis/src/base/apps/photemplate/main.cpp diff --git a/isis/src/base/apps/photomet/photomet.cpp b/isis/src/base/apps/photomet/main.cpp similarity index 100% rename from isis/src/base/apps/photomet/photomet.cpp rename to isis/src/base/apps/photomet/main.cpp diff --git a/isis/src/base/apps/photrim/photrim.cpp b/isis/src/base/apps/photrim/main.cpp similarity index 100% rename from isis/src/base/apps/photrim/photrim.cpp rename to isis/src/base/apps/photrim/main.cpp diff --git a/isis/src/base/apps/pixel2map/pixel2map.cpp b/isis/src/base/apps/pixel2map/main.cpp similarity index 100% rename from isis/src/base/apps/pixel2map/pixel2map.cpp rename to isis/src/base/apps/pixel2map/main.cpp diff --git a/isis/src/base/apps/poly/poly.cpp b/isis/src/base/apps/poly/main.cpp similarity index 100% rename from isis/src/base/apps/poly/poly.cpp rename to isis/src/base/apps/poly/main.cpp diff --git a/isis/src/base/apps/pvldiff/pvldiff.cpp b/isis/src/base/apps/pvldiff/main.cpp similarity index 100% rename from isis/src/base/apps/pvldiff/pvldiff.cpp rename to isis/src/base/apps/pvldiff/main.cpp diff --git a/isis/src/base/apps/ratio/ratio.cpp b/isis/src/base/apps/ratio/main.cpp similarity index 100% rename from isis/src/base/apps/ratio/ratio.cpp rename to isis/src/base/apps/ratio/main.cpp diff --git a/isis/src/base/apps/raw2isis/raw2isis.cpp b/isis/src/base/apps/raw2isis/main.cpp similarity index 100% rename from isis/src/base/apps/raw2isis/raw2isis.cpp rename to isis/src/base/apps/raw2isis/main.cpp diff --git a/isis/src/base/apps/reduce/reduce.cpp b/isis/src/base/apps/reduce/main.cpp similarity index 100% rename from isis/src/base/apps/reduce/reduce.cpp rename to isis/src/base/apps/reduce/main.cpp diff --git a/isis/src/base/apps/remrx/remrx.cpp b/isis/src/base/apps/remrx/main.cpp similarity index 100% rename from isis/src/base/apps/remrx/remrx.cpp rename to isis/src/base/apps/remrx/main.cpp diff --git a/isis/src/base/apps/rgb2hsv/rgb2hsv.cpp b/isis/src/base/apps/rgb2hsv/main.cpp similarity index 100% rename from isis/src/base/apps/rgb2hsv/rgb2hsv.cpp rename to isis/src/base/apps/rgb2hsv/main.cpp diff --git a/isis/src/base/apps/ringsautomos/ringsautomos.cpp b/isis/src/base/apps/ringsautomos/main.cpp similarity index 100% rename from isis/src/base/apps/ringsautomos/ringsautomos.cpp rename to isis/src/base/apps/ringsautomos/main.cpp diff --git a/isis/src/base/apps/ringscam2map/ringscam2map.cpp b/isis/src/base/apps/ringscam2map/main.cpp similarity index 100% rename from isis/src/base/apps/ringscam2map/ringscam2map.cpp rename to isis/src/base/apps/ringscam2map/main.cpp diff --git a/isis/src/base/apps/ringsmappt/ringsmappt.cpp b/isis/src/base/apps/ringsmappt/main.cpp similarity index 100% rename from isis/src/base/apps/ringsmappt/ringsmappt.cpp rename to isis/src/base/apps/ringsmappt/main.cpp diff --git a/isis/src/base/apps/ringspt/ringspt.cpp b/isis/src/base/apps/ringspt/main.cpp similarity index 100% rename from isis/src/base/apps/ringspt/ringspt.cpp rename to isis/src/base/apps/ringspt/main.cpp diff --git a/isis/src/base/apps/rotate/rotate.cpp b/isis/src/base/apps/rotate/main.cpp similarity index 100% rename from isis/src/base/apps/rotate/rotate.cpp rename to isis/src/base/apps/rotate/main.cpp diff --git a/isis/src/base/apps/segment/segment.cpp b/isis/src/base/apps/segment/main.cpp similarity index 100% rename from isis/src/base/apps/segment/segment.cpp rename to isis/src/base/apps/segment/main.cpp diff --git a/isis/src/base/apps/shade/shade.cpp b/isis/src/base/apps/shade/main.cpp similarity index 100% rename from isis/src/base/apps/shade/shade.cpp rename to isis/src/base/apps/shade/main.cpp diff --git a/isis/src/base/apps/shadow/shadow.cpp b/isis/src/base/apps/shadow/main.cpp similarity index 100% rename from isis/src/base/apps/shadow/shadow.cpp rename to isis/src/base/apps/shadow/main.cpp diff --git a/isis/src/base/apps/shadowtau/shadowtau.cpp b/isis/src/base/apps/shadowtau/main.cpp similarity index 100% rename from isis/src/base/apps/shadowtau/shadowtau.cpp rename to isis/src/base/apps/shadowtau/main.cpp diff --git a/isis/src/base/apps/sharpen/sharpen.cpp b/isis/src/base/apps/sharpen/main.cpp similarity index 100% rename from isis/src/base/apps/sharpen/sharpen.cpp rename to isis/src/base/apps/sharpen/main.cpp diff --git a/isis/src/base/apps/sigmastretch/sigmastretch.cpp b/isis/src/base/apps/sigmastretch/main.cpp similarity index 100% rename from isis/src/base/apps/sigmastretch/sigmastretch.cpp rename to isis/src/base/apps/sigmastretch/main.cpp diff --git a/isis/src/base/apps/skymap/skymap.cpp b/isis/src/base/apps/skymap/main.cpp similarity index 100% rename from isis/src/base/apps/skymap/skymap.cpp rename to isis/src/base/apps/skymap/main.cpp diff --git a/isis/src/base/apps/skypt/skypt.cpp b/isis/src/base/apps/skypt/main.cpp similarity index 100% rename from isis/src/base/apps/skypt/skypt.cpp rename to isis/src/base/apps/skypt/main.cpp diff --git a/isis/src/base/apps/skyrange/skyrange.cpp b/isis/src/base/apps/skyrange/main.cpp similarity index 100% rename from isis/src/base/apps/skyrange/skyrange.cpp rename to isis/src/base/apps/skyrange/main.cpp diff --git a/isis/src/base/apps/slpmap/slpmap.cpp b/isis/src/base/apps/slpmap/main.cpp similarity index 100% rename from isis/src/base/apps/slpmap/slpmap.cpp rename to isis/src/base/apps/slpmap/main.cpp diff --git a/isis/src/base/apps/smtk/smtk.cpp b/isis/src/base/apps/smtk/main.cpp similarity index 100% rename from isis/src/base/apps/smtk/smtk.cpp rename to isis/src/base/apps/smtk/main.cpp diff --git a/isis/src/base/apps/specadd/specadd.cpp b/isis/src/base/apps/specadd/main.cpp similarity index 100% rename from isis/src/base/apps/specadd/specadd.cpp rename to isis/src/base/apps/specadd/main.cpp diff --git a/isis/src/base/apps/specdivfilter/specdivfilter.cpp b/isis/src/base/apps/specdivfilter/main.cpp similarity index 100% rename from isis/src/base/apps/specdivfilter/specdivfilter.cpp rename to isis/src/base/apps/specdivfilter/main.cpp diff --git a/isis/src/base/apps/spechighpass/spechighpass.cpp b/isis/src/base/apps/spechighpass/main.cpp similarity index 100% rename from isis/src/base/apps/spechighpass/spechighpass.cpp rename to isis/src/base/apps/spechighpass/main.cpp diff --git a/isis/src/base/apps/speclowpass/speclowpass.cpp b/isis/src/base/apps/speclowpass/main.cpp similarity index 100% rename from isis/src/base/apps/speclowpass/speclowpass.cpp rename to isis/src/base/apps/speclowpass/main.cpp diff --git a/isis/src/base/apps/specpix/specpix.cpp b/isis/src/base/apps/specpix/main.cpp similarity index 100% rename from isis/src/base/apps/specpix/specpix.cpp rename to isis/src/base/apps/specpix/main.cpp diff --git a/isis/src/base/apps/spicefit/spicefit.cpp b/isis/src/base/apps/spicefit/main.cpp similarity index 100% rename from isis/src/base/apps/spicefit/spicefit.cpp rename to isis/src/base/apps/spicefit/main.cpp diff --git a/isis/src/base/apps/spiceinit/spiceinit.cpp b/isis/src/base/apps/spiceinit/main.cpp similarity index 100% rename from isis/src/base/apps/spiceinit/spiceinit.cpp rename to isis/src/base/apps/spiceinit/main.cpp diff --git a/isis/src/base/apps/spiceserver/spiceserver.cpp b/isis/src/base/apps/spiceserver/main.cpp similarity index 100% rename from isis/src/base/apps/spiceserver/spiceserver.cpp rename to isis/src/base/apps/spiceserver/main.cpp diff --git a/isis/src/base/apps/spkwriter/SpiceKernel.h b/isis/src/base/apps/spkwriter/SpiceKernel.h index fb01d7ebe8..a51274e90a 100644 --- a/isis/src/base/apps/spkwriter/SpiceKernel.h +++ b/isis/src/base/apps/spkwriter/SpiceKernel.h @@ -1,29 +1,29 @@ #ifndef SpiceKernel_h #define SpiceKernel_h -/** - * @file - * $Revision: 5850 $ +/** + * @file + * $Revision: 5850 $ * $Date: 2014-05-27 15:22:24 -0700 (Tue, 27 May 2014) $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. - * + * * $Id: SpiceKernel.h 5850 2014-05-27 22:22:24Z jwbacker@GS.DOI.NET $ - */ + */ #include #include @@ -37,48 +37,48 @@ #include "IString.h" #include "IException.h" -#include "SpiceSegment.h" +#include "SpkSpiceSegment.h" namespace Isis { /** * @brief Container for SPICE kernel creation - * + * * This class serves as a container for ISIS cube files to prep for writing the - * contents to a NAIF SPICE kernel. Each file added is a CK or SPK segment - * depending upon the type specified in the K template parameter. When the ISIS - * cube SPICE segment is added, the contents of the Table BLOB - * (InstrumentRotation for CKs, InstrumentPosition for SPKs) have been read and - * transformed to the appropriate state intended to be compatible with kernels - * issued by each mission source. - * + * contents to a NAIF SPICE kernel. Each file added is a CK or SPK segment + * depending upon the type specified in the K template parameter. When the ISIS + * cube SPICE segment is added, the contents of the Table BLOB + * (InstrumentRotation for CKs, InstrumentPosition for SPKs) have been read and + * transformed to the appropriate state intended to be compatible with kernels + * issued by each mission source. + * * It is designed for ease of use. Here is an example to create the most basic * of CK kernel from a single ISIS file: * @code * SpiceKernel kernel; * kernel.add("mycube.cub"); * @endcode - * + * * Note that processing ISIS cubes is expensive in terms of NAIF kernel * management. Lots of NAIF kernel activity is incurred in resolving all the * necessary requirements to get the SPICE data in a form that satisfies NAIF * kernel specifications. - * - * To get access to the segments a Visitor design pattern is used whereby the - * generic Visitor class need only write an paren operator that accepts a - * segment of the K type. This class interates through all the segments calling - * the operator(K &segment) method for each one in the container. - * - * Note that when a new K Segment is added, the list is immediately sorted based - * on time. The sort is a stable sort, meaning if the segments are added in a - * time chronologically increasing time, the original list order is preserved. - * + * + * To get access to the segments a Visitor design pattern is used whereby the + * generic Visitor class need only write an paren operator that accepts a + * segment of the K type. This class interates through all the segments calling + * the operator(K &segment) method for each one in the container. + * + * Note that when a new K Segment is added, the list is immediately sorted based + * on time. The sort is a stable sort, meaning if the segments are added in a + * time chronologically increasing time, the original list order is preserved. + * * @ingroup Utility - * + * * @author 2010-11-22 Kris Becker * @internal - * @history 2010-12-09 Kris Becker Add documentation and example - * @history 2011-04-02 Kris Becker Modified to a template container class and + * @history 2010-12-09 Kris Becker Add documentation and example + * @history 2011-04-02 Kris Becker Modified to a template container class and * updated documentation */ template @@ -88,12 +88,12 @@ template typedef std::vector SegmentList; typedef typename SegmentList::iterator SegmentIter; typedef typename SegmentList::const_iterator ConstSegmentIter; - + /** Constructor */ SpiceKernel() { } /** Destructor */ virtual ~SpiceKernel() { } - + /** Returns the number of segments */ int size() const { return (m_segments.size()); } @@ -143,10 +143,10 @@ template /** * @brief Add a new segment to the kernel - * + * * This method accepts a new segment and inserts it in the list - actually - * appends it and then resorts the list so they are ordered by time. - * + * appends it and then resorts the list so they are ordered by time. + * * @param segment New segment to add to list */ void add(const K &segment) { @@ -156,13 +156,13 @@ template /** * @brief Template method Visitor implementation - * + * * This method accepts a Visitor that defines an operator() of the form * Visitor::operator()(K &segment). For every segment in the list, * the operator will be called. The caller is assured the list is sorted - * via the operator<(const K &segment) of the segment type when they were - * added. - * + * via the operator<(const K &segment) of the segment type when they were + * added. + * * @param Visitor Visitor class that accepts each segment in the list */ template @@ -172,15 +172,15 @@ template v(*k); k++; } - return; + return; } /** * @brief Const template methoid visitor implementation - * + * * This is a const Visitor method implementation with same functionality * as the non-const version. - * + * * @param Visitor Visitor class that accepts each segment in the list */ template @@ -190,7 +190,7 @@ template v(*k); k++; } - return; + return; } @@ -203,4 +203,3 @@ template }; // namespace Isis #endif - diff --git a/isis/src/base/apps/spkwriter/SpkKernelWriter.h b/isis/src/base/apps/spkwriter/SpkKernelWriter.h index 1dfb86e76c..9feee403b5 100644 --- a/isis/src/base/apps/spkwriter/SpkKernelWriter.h +++ b/isis/src/base/apps/spkwriter/SpkKernelWriter.h @@ -27,7 +27,7 @@ #include #include "SpiceKernel.h" #include "KernelWriter.h" -#include "SpiceSegment.h" +#include "SpkSpiceSegment.h" #include "SpkSegment.h" #include "FileName.h" namespace Isis { @@ -60,8 +60,8 @@ typedef SpiceKernel SpkKernel; * * @author 2011-05-02 Kris Becker * - * @internal - * @history 2013-12-19 Kris Becker Add user comments to header section rather + * @internal + * @history 2013-12-19 Kris Becker Add user comments to header section rather * than replace generic comments. */ @@ -199,5 +199,3 @@ class SpkKernelWriter : public KernelWriter { } // namespace Isis #endif - - diff --git a/isis/src/base/apps/spkwriter/SpkSegment.cpp b/isis/src/base/apps/spkwriter/SpkSegment.cpp index a1b923bef7..ac4b92fa88 100644 --- a/isis/src/base/apps/spkwriter/SpkSegment.cpp +++ b/isis/src/base/apps/spkwriter/SpkSegment.cpp @@ -46,21 +46,21 @@ using namespace std; namespace Isis { /** Default constructor */ -SpkSegment::SpkSegment() : SpiceSegment() { +SpkSegment::SpkSegment() : SpkSpiceSegment() { init(); } /** Constructor from ISIS cube file by name of the cube */ -SpkSegment::SpkSegment(const QString &fname, const int spkType) : SpiceSegment() { +SpkSegment::SpkSegment(const QString &fname, const int spkType) : SpkSpiceSegment() { init(spkType); Cube cube; cube.open(fname); - SpiceSegment::init(cube); + SpkSpiceSegment::init(cube); import(cube); } /** Constructor from ISIS cube object */ -SpkSegment::SpkSegment(Cube &cube, const int spkType) : SpiceSegment(cube) { +SpkSegment::SpkSegment(Cube &cube, const int spkType) : SpkSpiceSegment(cube) { init(spkType); import(cube); } @@ -113,7 +113,7 @@ void SpkSegment::import(Cube &cube) { spkCache = camera->instrumentPosition()->LoadHermiteCache("SpkSegment"); } else { - QString mess = "Unsupported SPK kernel type (" + + QString mess = "Unsupported SPK kernel type (" + QString::number(m_spkType) + ") - must be 9 or 13."; throw IException(IException::User, mess, _FILEINFO_); } @@ -318,25 +318,25 @@ QString SpkSegment::getComment() const { } /** - * @brief Determine if another SPK segment has common time/body coverage - * - * This method is used to determine if another SPK segment contains some of the - * same coverage information as this one. This is typically a conflict when - * creating SPK kernels from a list of files. - * - * If the body and center codes of the two segments are not the same, this is - * allowed even if the times are the same as it indicates different position - * data. If the codes are the same, then if any portion of the segements - * contain common times of coverage, then this would indicate one of them would - * be hidden in the resulting SPK kernel. - * - * Using this method, users can determine how to handle common times of - * coverage. - * + * @brief Determine if another SPK segment has common time/body coverage + * + * This method is used to determine if another SPK segment contains some of the + * same coverage information as this one. This is typically a conflict when + * creating SPK kernels from a list of files. + * + * If the body and center codes of the two segments are not the same, this is + * allowed even if the times are the same as it indicates different position + * data. If the codes are the same, then if any portion of the segements + * contain common times of coverage, then this would indicate one of them would + * be hidden in the resulting SPK kernel. + * + * Using this method, users can determine how to handle common times of + * coverage. + * * @author 2014-03-26 Kris Becker - * + * * @param other Other SpkSegment to check for common coverage - * + * * @return bool True if data represents the same coverage, false otherwise. */ bool SpkSegment::overlaps(const SpkSegment &other) const { @@ -410,7 +410,7 @@ SpkSegment::SMatrix SpkSegment::load(Table &table) { void SpkSegment::validateType(const int spktype) const { if ( !(( 9 == spktype ) || ( 13 == spktype )) ) { - QString mess = "Unsupported SPK kernel type (" + + QString mess = "Unsupported SPK kernel type (" + QString::number(spktype) + ") - must be 9 or 13."; throw IException(IException::User, mess, _FILEINFO_); } @@ -418,4 +418,3 @@ void SpkSegment::validateType(const int spktype) const { } }; // namespace Isis - diff --git a/isis/src/base/apps/spkwriter/SpkSegment.h b/isis/src/base/apps/spkwriter/SpkSegment.h index a98f254cc8..ed276b18a3 100644 --- a/isis/src/base/apps/spkwriter/SpkSegment.h +++ b/isis/src/base/apps/spkwriter/SpkSegment.h @@ -1,29 +1,29 @@ #ifndef SpkSegment_h #define SpkSegment_h -/** - * @file - * $Revision: 6314 $ +/** + * @file + * $Revision: 6314 $ * $Date: 2015-08-12 15:30:27 -0700 (Wed, 12 Aug 2015) $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. - * + * * $Id: SpkSegment.h 6314 2015-08-12 22:30:27Z jwbacker@GS.DOI.NET $ - */ + */ #include #include @@ -31,7 +31,7 @@ #include #include -#include "SpiceSegment.h" +#include "SpkSpiceSegment.h" #include "IString.h" #include "IException.h" @@ -45,14 +45,14 @@ class PvlObject; /** * @brief Maintain a SPK SPICE kernel segment for conversions and export - * + * * This class is designed to read SPICE data from ISIS cube blobs and convert - * them to proper formats for export to NAIF formatted SPK SPICE kernel files. - * This particular implementation supports NAIF SPK kernel types 9 and 13. - * - * @author 2011-02-12 Kris Becker - * @internal - * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis + * them to proper formats for export to NAIF formatted SPK SPICE kernel files. + * This particular implementation supports NAIF SPK kernel types 9 and 13. + * + * @author 2011-02-12 Kris Becker + * @internal + * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis * coding standards. References #972. * @history 2013-12-19 Kris Becker Add SPK kernel type parameter to * constructors; removed adjustTimes() method; modified @@ -63,10 +63,10 @@ class PvlObject; * @history 2015-07-21 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors * were signaled. References #2248. */ -class SpkSegment : public SpiceSegment { +class SpkSegment : public SpkSpiceSegment { public: - typedef SpiceSegment::SVector SVector; - typedef SpiceSegment::SMatrix SMatrix; + typedef SpkSpiceSegment::SVector SVector; + typedef SpkSpiceSegment::SMatrix SMatrix; SpkSegment(); SpkSegment(const QString &fname, const int spkType); @@ -74,7 +74,7 @@ class SpkSegment : public SpiceSegment { virtual ~SpkSegment() { } void import(Cube &cube); - + /** Returns the number of elements in the vectors */ int size() const { return (size(m_states)); } @@ -120,8 +120,8 @@ class SpkSegment : public SpiceSegment { template int size(const TNTSTORE &t) const { return (t.dim1()); } SMatrix load(Table &cache); - void getStates(Camera &camera, const SMatrix &spice, SMatrix &states, - SVector &epochs, bool &hasVV) const; + void getStates(Camera &camera, const SMatrix &spice, SMatrix &states, + SVector &epochs, bool &hasVV) const; SVector makeState(SpicePosition *position, const double &time0, const SVector &stateT, const double &timeT) const; void validateType(const int spktype) const; @@ -129,4 +129,3 @@ class SpkSegment : public SpiceSegment { }; // namespace Isis #endif - diff --git a/isis/src/base/apps/spkwriter/SpiceSegment.cpp b/isis/src/base/apps/spkwriter/SpkSpiceSegment.cpp similarity index 89% rename from isis/src/base/apps/spkwriter/SpiceSegment.cpp rename to isis/src/base/apps/spkwriter/SpkSpiceSegment.cpp index 3d01f716af..bc18000380 100644 --- a/isis/src/base/apps/spkwriter/SpiceSegment.cpp +++ b/isis/src/base/apps/spkwriter/SpkSpiceSegment.cpp @@ -2,7 +2,7 @@ * @file * $Revision: 6715 $ * $Date: 2016-04-28 10:58:43 -0700 (Thu, 28 Apr 2016) $ - * $Id: SpiceSegment.cpp 6715 2016-04-28 17:58:43Z tsucharski@GS.DOI.NET $ + * $Id: SpkSpiceSegment.cpp 6715 2016-04-28 17:58:43Z tsucharski@GS.DOI.NET $ * * Unless noted otherwise, the portions of Isis written by the USGS are * public domain. See individual third-party library and package descriptions @@ -37,7 +37,7 @@ #include "IString.h" #include "iTime.h" #include "NaifStatus.h" -#include "SpiceSegment.h" +#include "SpkSpiceSegment.h" using namespace std; @@ -45,17 +45,17 @@ namespace Isis { /** Initialize */ -SpiceSegment::SpiceSegment() { +SpkSpiceSegment::SpkSpiceSegment() { init(); } /** Initialize with a cube extracting BLOB content */ -SpiceSegment::SpiceSegment(Cube &cube) { +SpkSpiceSegment::SpkSpiceSegment(Cube &cube) { init(cube); } /** Set the segment Id that will be written to the kernel */ -void SpiceSegment::setId(const QString &name) { +void SpkSpiceSegment::setId(const QString &name) { _name = name; return; } @@ -76,7 +76,7 @@ void SpiceSegment::setId(const QString &name) { * * @return int Number of kernels loaded for the requested type */ -int SpiceSegment::LoadKernelType(const QString &ktypes) const { +int SpkSpiceSegment::LoadKernelType(const QString &ktypes) const { return (_kernels.Load(ktypes)); } @@ -90,7 +90,7 @@ int SpiceSegment::LoadKernelType(const QString &ktypes) const { * * @return int Number kernels unloaded */ -int SpiceSegment::UnloadKernelType(const QString &ktypes) const { +int SpkSpiceSegment::UnloadKernelType(const QString &ktypes) const { return (_kernels.UnLoad(ktypes)); } @@ -105,7 +105,7 @@ int SpiceSegment::UnloadKernelType(const QString &ktypes) const { * * @param cube ISIS cube file to accumulate information from */ -void SpiceSegment::init(Cube &cube) { +void SpkSpiceSegment::init(Cube &cube) { _kernels.UnLoad(); // Unload all active, owned kernels init(); // Init local variables @@ -165,7 +165,7 @@ void SpiceSegment::init(Cube &cube) { * @return QString Returns first value in the found keyword. If the keyword * does not exist, an empty string is returned. */ -QString SpiceSegment::getKeyValue(PvlObject &label, +QString SpkSpiceSegment::getKeyValue(PvlObject &label, const QString &keyword) { QString value(""); if ( label.hasKeyword(keyword,Pvl::Traverse) ) { @@ -182,7 +182,7 @@ QString SpiceSegment::getKeyValue(PvlObject &label, * binaries are 0 and the Kernels object is cleared. * */ -void SpiceSegment::init() { +void SpkSpiceSegment::init() { _name = _fname = _instId = _target = ""; _startTime = _endTime = 0.0; _utcStartTime = _utcEndTime = ""; @@ -204,7 +204,7 @@ void SpiceSegment::init() { * * @return bool Always returns true */ -bool SpiceSegment::getImageTimes(Pvl &lab, double &start, double &end) const { +bool SpkSpiceSegment::getImageTimes(Pvl &lab, double &start, double &end) const { _kernels.Load("LSK,SCLK"); PvlObject &cube = lab.findObject("IsisCube"); @@ -240,10 +240,10 @@ bool SpiceSegment::getImageTimes(Pvl &lab, double &start, double &end) const { * @param vec number of elements to add to the bottom * @param matrix Matrix to add elements to * - * @return SpiceSegment::SMatrix Expanded matrix + * @return SpkSpiceSegment::SMatrix Expanded matrix */ -SpiceSegment::SMatrix SpiceSegment::expand(int ntop, int nbot, - const SpiceSegment::SMatrix &matrix) +SpkSpiceSegment::SMatrix SpkSpiceSegment::expand(int ntop, int nbot, + const SpkSpiceSegment::SMatrix &matrix) const { // Add lines to matrix at top and bottom int ndim(matrix.dim1()); @@ -297,10 +297,10 @@ SpiceSegment::SMatrix SpiceSegment::expand(int ntop, int nbot, * @param vec number of elements to add to the bottom * @param vector Vector to add elements to * - * @return SpiceSegment::SVector Expanded vector + * @return SpkSpiceSegment::SVector Expanded vector */ -SpiceSegment::SVector SpiceSegment::expand(int ntop, int nbot, - const SpiceSegment::SVector &vec) +SpkSpiceSegment::SVector SpkSpiceSegment::expand(int ntop, int nbot, + const SpkSpiceSegment::SVector &vec) const { // Add lines to matrix at top and bottom int ndim(vec.dim1()); @@ -330,13 +330,13 @@ SpiceSegment::SVector SpiceSegment::expand(int ntop, int nbot, /** Sets start time */ -void SpiceSegment::setStartTime(double et) { +void SpkSpiceSegment::setStartTime(double et) { _startTime = et; _utcStartTime = toUTC(_startTime); } /** Sets end time */ -void SpiceSegment::setEndTime(double et) { +void SpkSpiceSegment::setEndTime(double et) { _endTime = et; _utcEndTime = toUTC(_endTime); } @@ -353,7 +353,7 @@ void SpiceSegment::setEndTime(double et) { * * @return QString Returns the frame or body name. */ -QString SpiceSegment::getNaifName(int naifid) const { +QString SpkSpiceSegment::getNaifName(int naifid) const { SpiceChar naifBuf[40]; NaifStatus::CheckErrors(); @@ -380,7 +380,7 @@ QString SpiceSegment::getNaifName(int naifid) const { } /** Converts and ET time to UTC string */ -QString SpiceSegment::toUTC(const double &et) const { +QString SpkSpiceSegment::toUTC(const double &et) const { const int UTCLEN = 80; char utcout[UTCLEN]; @@ -392,7 +392,7 @@ QString SpiceSegment::toUTC(const double &et) const { } /** Converts a UTC time string to ET */ -double SpiceSegment::UTCtoET(const QString &utc) const { +double SpkSpiceSegment::UTCtoET(const QString &utc) const { SpiceDouble et; NaifStatus::CheckErrors(); @@ -403,4 +403,3 @@ double SpiceSegment::UTCtoET(const QString &utc) const { } }; // namespace Isis - diff --git a/isis/src/base/apps/spkwriter/SpiceSegment.h b/isis/src/base/apps/spkwriter/SpkSpiceSegment.h similarity index 73% rename from isis/src/base/apps/spkwriter/SpiceSegment.h rename to isis/src/base/apps/spkwriter/SpkSpiceSegment.h index e6c74c63ab..ce2279ff1c 100644 --- a/isis/src/base/apps/spkwriter/SpiceSegment.h +++ b/isis/src/base/apps/spkwriter/SpkSpiceSegment.h @@ -1,29 +1,29 @@ -#ifndef SpiceSegment_h -#define SpiceSegment_h -/** - * @file - * $Revision: 6314 $ +#ifndef SpkSpiceSegment_h +#define SpkSpiceSegment_h +/** + * @file + * $Revision: 6314 $ * $Date: 2015-08-12 15:30:27 -0700 (Wed, 12 Aug 2015) $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. - * - * $Id: SpiceSegment.h 6314 2015-08-12 22:30:27Z jwbacker@GS.DOI.NET $ - */ + * + * $Id: SpkSpiceSegment.h 6314 2015-08-12 22:30:27Z jwbacker@GS.DOI.NET $ + */ #include #include @@ -48,28 +48,28 @@ namespace Isis { /** * @brief Container for SPICE kernel segment used in conversions and export - * - * This class is designed to contain SPICE data from ISIS cube blobs in proper - * formats for export to NAIF formatted SPICE kernel files. It is intended to - * be used as a base class that can be augmented to specific implementations of - * CK and SPK type kernels. - * - * @author 2010-11-10 Kris Becker - * @internal + * + * This class is designed to contain SPICE data from ISIS cube blobs in proper + * formats for export to NAIF formatted SPICE kernel files. It is intended to + * be used as a base class that can be augmented to specific implementations of + * CK and SPK type kernels. + * + * @author 2010-11-10 Kris Becker + * @internal * @history 2010-12-09 Kris Becker Added more documentation - * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis + * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis * coding standards. References #972. - * @history 2015-07-22 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors + * @history 2015-07-22 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors * were signaled. References #2248. */ -class SpiceSegment { +class SpkSpiceSegment { public: typedef TNT::Array1D SVector; //!< 1-D Buffer typedef TNT::Array2D SMatrix; //!< 2-D buffer - - SpiceSegment(); - SpiceSegment(Cube &cube); - virtual ~SpiceSegment() { } + + SpkSpiceSegment(); + SpkSpiceSegment(Cube &cube); + virtual ~SpkSpiceSegment() { } /** Returns size of elements in segment */ virtual int size() const = 0; @@ -94,7 +94,7 @@ class SpiceSegment { QString utcStartTime() const { return (_utcStartTime); } QString utcEndTime() const { return (_utcEndTime); } - inline bool operator<(const SpiceSegment &segment) const { + inline bool operator<(const SpkSpiceSegment &segment) const { return (startTime() < segment.startTime()); } @@ -109,7 +109,7 @@ class SpiceSegment { virtual QString getComment() const = 0; protected: - void init(Cube &cube); + void init(Cube &cube); QString getKeyValue(PvlObject &label, const QString &keyword); const Kernels &getKernels() const { return (_kernels); } bool getImageTimes(Pvl &lab, double &start, double &end) const; @@ -118,7 +118,7 @@ class SpiceSegment { void setStartTime(double et); void setEndTime(double et); - + QString getNaifName(int naifid) const; QString toUTC(const double &et) const; double UTCtoET(const QString &utc) const; @@ -128,17 +128,16 @@ class SpiceSegment { QString _fname; QString _instId; QString _target; - + double _startTime; double _endTime; QString _utcStartTime; // Need to store these as conversion from ET - QString _utcEndTime; // requires leap seconds kernel + QString _utcEndTime; // requires leap seconds kernel mutable Kernels _kernels; // Kernel manager void init(); - + }; }; // namespace Isis #endif - diff --git a/isis/src/base/apps/spkwriter/spkwriter.cpp b/isis/src/base/apps/spkwriter/main.cpp similarity index 100% rename from isis/src/base/apps/spkwriter/spkwriter.cpp rename to isis/src/base/apps/spkwriter/main.cpp diff --git a/isis/src/base/apps/stats/stats.cpp b/isis/src/base/apps/stats/main.cpp similarity index 100% rename from isis/src/base/apps/stats/stats.cpp rename to isis/src/base/apps/stats/main.cpp diff --git a/isis/src/base/apps/std2isis/std2isis.cpp b/isis/src/base/apps/std2isis/main.cpp similarity index 100% rename from isis/src/base/apps/std2isis/std2isis.cpp rename to isis/src/base/apps/std2isis/main.cpp diff --git a/isis/src/base/apps/stretch/stretch.cpp b/isis/src/base/apps/stretch/main.cpp similarity index 100% rename from isis/src/base/apps/stretch/stretch.cpp rename to isis/src/base/apps/stretch/main.cpp diff --git a/isis/src/base/apps/svfilter/svfilter.cpp b/isis/src/base/apps/svfilter/main.cpp similarity index 100% rename from isis/src/base/apps/svfilter/svfilter.cpp rename to isis/src/base/apps/svfilter/main.cpp diff --git a/isis/src/base/apps/table2cube/table2cube.cpp b/isis/src/base/apps/table2cube/main.cpp similarity index 100% rename from isis/src/base/apps/table2cube/table2cube.cpp rename to isis/src/base/apps/table2cube/main.cpp diff --git a/isis/src/base/apps/tabledump/tabledump.cpp b/isis/src/base/apps/tabledump/main.cpp similarity index 100% rename from isis/src/base/apps/tabledump/tabledump.cpp rename to isis/src/base/apps/tabledump/main.cpp diff --git a/isis/src/base/apps/tonematch/tonematch.cpp b/isis/src/base/apps/tonematch/main.cpp similarity index 100% rename from isis/src/base/apps/tonematch/tonematch.cpp rename to isis/src/base/apps/tonematch/main.cpp diff --git a/isis/src/base/apps/trackextract/trackextract.cpp b/isis/src/base/apps/trackextract/main.cpp similarity index 100% rename from isis/src/base/apps/trackextract/trackextract.cpp rename to isis/src/base/apps/trackextract/main.cpp diff --git a/isis/src/base/apps/translate/translate.cpp b/isis/src/base/apps/translate/main.cpp similarity index 100% rename from isis/src/base/apps/translate/translate.cpp rename to isis/src/base/apps/translate/main.cpp diff --git a/isis/src/base/apps/trim/trim.cpp b/isis/src/base/apps/trim/main.cpp similarity index 100% rename from isis/src/base/apps/trim/trim.cpp rename to isis/src/base/apps/trim/main.cpp diff --git a/isis/src/base/apps/trimfilter/trimfilter.cpp b/isis/src/base/apps/trimfilter/main.cpp similarity index 100% rename from isis/src/base/apps/trimfilter/trimfilter.cpp rename to isis/src/base/apps/trimfilter/main.cpp diff --git a/isis/src/base/apps/uncrop/uncrop.cpp b/isis/src/base/apps/uncrop/main.cpp similarity index 100% rename from isis/src/base/apps/uncrop/uncrop.cpp rename to isis/src/base/apps/uncrop/main.cpp diff --git a/isis/src/base/apps/vicar2isis/vicar2isis.cpp b/isis/src/base/apps/vicar2isis/main.cpp similarity index 100% rename from isis/src/base/apps/vicar2isis/vicar2isis.cpp rename to isis/src/base/apps/vicar2isis/main.cpp diff --git a/isis/src/base/objs/Angle/Angle.h b/isis/src/base/objs/Angle/Angle.h index 0e91454adb..1b1a9fc9f5 100644 --- a/isis/src/base/objs/Angle/Angle.h +++ b/isis/src/base/objs/Angle/Angle.h @@ -55,6 +55,7 @@ namespace Isis { * @history 2014-08-21 Jeannie Backer - Modified isValid to utilize the IsValidPixel() * method in the SpecialPixel header. References #1659. * @history 2017-07-03 Makayla Shepherd - Updated documentation. References #4807. + * @history 2018-11-13 Kristin Berry - Made protected methods public as part of testing refactor. */ class Angle { @@ -260,8 +261,6 @@ namespace Isis { void setDegrees(double degrees) { setAngle(degrees, Degrees); } virtual QString toString(bool includeUnits = true) const; - - protected: double unitWrapValue(const Units& unit) const; virtual double angle(const Units& unit) const; virtual void setAngle(const double &angle, const Units& unit); diff --git a/isis/src/base/objs/FileName/FileName.h b/isis/src/base/objs/FileName/FileName.h index efd86aa900..f6b455a095 100644 --- a/isis/src/base/objs/FileName/FileName.h +++ b/isis/src/base/objs/FileName/FileName.h @@ -173,8 +173,6 @@ namespace Isis { FileName highestVersion() const; FileName newVersion() const; - FileName version(long versionNumber) const; - FileName version(QDate versionDate) const; bool fileExists() const; QDir dir() const; @@ -201,7 +199,8 @@ namespace Isis { private: - + FileName version(long versionNumber) const; + FileName version(QDate versionDate) const; QDate highestVersionDate() const; long highestVersionNum() const; void validateVersioningState() const; @@ -247,4 +246,4 @@ namespace Isis { }; }; -#endif \ No newline at end of file +#endif diff --git a/isis/src/base/objs/IException/IException.h b/isis/src/base/objs/IException/IException.h index 561bd85d6d..8bb73ca243 100644 --- a/isis/src/base/objs/IException/IException.h +++ b/isis/src/base/objs/IException/IException.h @@ -203,6 +203,7 @@ namespace Isis { void append(const IException &exceptionSource); ErrorType errorType() const; + static QString errorTypeToString(ErrorType t); void print() const; void print(bool printFileInfo) const; Pvl toPvl() const; @@ -214,7 +215,6 @@ namespace Isis { private: static IException createStackTrace(); - static QString errorTypeToString(ErrorType t); static ErrorType stringToErrorType(const QString &s); char *buildWhat() const; void deleteEmptyMemberStrings(); diff --git a/isis/src/lro/apps/lronac2pds/md5.cpp b/isis/src/base/objs/Md5/md5.cpp similarity index 100% rename from isis/src/lro/apps/lronac2pds/md5.cpp rename to isis/src/base/objs/Md5/md5.cpp diff --git a/isis/src/lro/apps/lrowac2pds/md5.h b/isis/src/base/objs/Md5/md5.h similarity index 100% rename from isis/src/lro/apps/lrowac2pds/md5.h rename to isis/src/base/objs/Md5/md5.h diff --git a/isis/src/lro/apps/lronac2pds/md5wrapper.cpp b/isis/src/base/objs/Md5Wrapper/md5wrapper.cpp similarity index 100% rename from isis/src/lro/apps/lronac2pds/md5wrapper.cpp rename to isis/src/base/objs/Md5Wrapper/md5wrapper.cpp diff --git a/isis/src/lro/apps/lronac2pds/md5wrapper.h b/isis/src/base/objs/Md5Wrapper/md5wrapper.h similarity index 100% rename from isis/src/lro/apps/lronac2pds/md5wrapper.h rename to isis/src/base/objs/Md5Wrapper/md5wrapper.h diff --git a/isis/src/base/objs/ProcessByBrick/ProcessByBrick.cpp b/isis/src/base/objs/ProcessByBrick/ProcessByBrick.cpp index 3668baa7cd..2dbe34da31 100644 --- a/isis/src/base/objs/ProcessByBrick/ProcessByBrick.cpp +++ b/isis/src/base/objs/ProcessByBrick/ProcessByBrick.cpp @@ -20,8 +20,9 @@ * http://www.usgs.gov/privacy.html. */ -#include "ProcessByBrick.h" +#include +#include "ProcessByBrick.h" #include "Brick.h" #include "Cube.h" @@ -228,8 +229,8 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { /** - * Sets the input and output bricks sizes to the given number of samples, - * lines, and bands. + * Sets the input and output bricks sizes to the given number of samples, + * lines, and bands. * * @param ns Number of samples * @@ -363,9 +364,9 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { } /** - * Create the output file. This method assumes that the output cube size - * matches the input cube size. Therefore, SetInputCube() must be called - * before this method. + * Create the output file. This method assumes that the output cube size + * matches the input cube size. Therefore, SetInputCube() must be called + * before this method. * * @param parameter The output file name. * @@ -441,7 +442,7 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { * shaped brick through the cube. This method requires that exactly one input * cube be loaded. No output cubes are produced. * - * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes + * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes * @param funct (Buffer &in) Receive an nxm brick in the input buffer. * If n=1 and m=lines this will process by * columns. Likewise if n=samples and m=1 this @@ -460,9 +461,50 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { p_progress->CheckStatus(); for (brick->begin(); !brick->end(); (*brick)++) { - if (haveInput) + if (haveInput) cube->read(*brick); // input only - + + funct(*brick); + + // output only or input/output + if ((!haveInput) || (cube->isReadWrite())) { + cube->write(*brick); + } + + p_progress->CheckStatus(); + } + + delete brick; + } + + + /** + * Starts the systematic processing of the input cube by moving an arbitrary + * shaped brick through the cube. This method requires that exactly one input + * cube be loaded. No output cubes are produced. + * + * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes + * @param funct (Buffer &in) Receive an nxm brick in the input buffer. + * If n=1 and m=lines this will process by + * columns. Likewise if n=samples and m=1 this + * will process by lines. + * + * @throws iException::Programmer + */ + void ProcessByBrick::StartProcess(std::function funct ) { + Cube *cube = NULL; + Brick *brick = NULL; + + bool haveInput = PrepProcessCubeInPlace(&cube, &brick); + + // Loop and let the app programmer work with the bricks + p_progress->SetMaximumSteps(brick->Bricks()); + p_progress->CheckStatus(); + + for (brick->begin(); !brick->end(); (*brick)++) { + if (haveInput) + cube->read(*brick); // input only + funct(*brick); // output only or input/output @@ -483,7 +525,7 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { * cube and one output cube be loaded using the SetInputCube and SetOutputCube * methods. * - * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes + * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes * @param funct (Buffer &in, Buffer &out) Receive an nxm brick in * the input buffer and output the an nxm brick. If n=1 and * m=lines this will process by columns. Likewise if n=samples @@ -518,12 +560,53 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { } + /** + * Starts the systematic processing of the input cube by moving an arbitrary + * shaped brick through the cube. This method requires that exactly one input + * cube and one output cube be loaded using the SetInputCube and SetOutputCube + * methods. + * + * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes + * @param funct (Buffer &in, Buffer &out) Receive an nxm brick in + * the input buffer and output the an nxm brick. If n=1 and + * m=lines this will process by columns. Likewise if n=samples + * and m=1 this will process by lines. + * + * @throws iException::Programmer + */ + void ProcessByBrick::StartProcess(std::function funct ) { + Brick *ibrick = NULL; + Brick *obrick = NULL; + + int numBricks = PrepProcessCube(&ibrick, &obrick); + + // Loop and let the app programmer work with the bricks + p_progress->SetMaximumSteps(numBricks); + p_progress->CheckStatus(); + + ibrick->begin(); + obrick->begin(); + + for (int i = 0; i < numBricks; i++) { + InputCubes[0]->read(*ibrick); + funct(*ibrick, *obrick); + OutputCubes[0]->write(*obrick); + p_progress->CheckStatus(); + (*ibrick)++; + (*obrick)++; + } + + delete ibrick; + delete obrick; + } + + /** * Starts the systematic processing of the input cube by moving an arbitrary * shaped brick through the cube. This method allows multiple input and output * cubes. * - * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes + * @deprecated Please use ProcessCubeInPlace, ProcessCube, or ProcessCubes * @param funct (vector &in, vector &out) * Receive an nxm brick in the input buffer. If n=1 and m=lines * this will process by columns. Likewise if n=samples and m=1 @@ -756,7 +839,7 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { *bricks = new Brick(**cube, p_outputBrickSamples[1], p_outputBrickLines[1], p_outputBrickBands[1], p_reverse); } - + return haveInput; } @@ -1017,4 +1100,3 @@ void ProcessByBrick::SetOutputRequirements(int outputRequirements) { return *this; } } // end namespace isis - diff --git a/isis/src/base/objs/ProcessByBrick/ProcessByBrick.h b/isis/src/base/objs/ProcessByBrick/ProcessByBrick.h index 1bbb30223f..0ee0780c67 100644 --- a/isis/src/base/objs/ProcessByBrick/ProcessByBrick.h +++ b/isis/src/base/objs/ProcessByBrick/ProcessByBrick.h @@ -147,6 +147,8 @@ namespace Isis { using Isis::Process::StartProcess; // make parents virtual function visable virtual void StartProcess(void funct(Buffer &in)); + virtual void StartProcess(std::function funct ); + virtual void StartProcess(std::function funct); virtual void StartProcess(void funct(Buffer &in, Buffer &out)); virtual void StartProcess(void funct(std::vector &in, std::vector &out)); diff --git a/isis/src/base/objs/ProcessByLine/ProcessByLine.cpp b/isis/src/base/objs/ProcessByLine/ProcessByLine.cpp index f4fc966c34..22a841cac8 100644 --- a/isis/src/base/objs/ProcessByLine/ProcessByLine.cpp +++ b/isis/src/base/objs/ProcessByLine/ProcessByLine.cpp @@ -158,7 +158,33 @@ namespace Isis { */ void ProcessByLine::StartProcess(void funct(Isis::Buffer &inout)) { VerifyCubes(InPlace); - SetBricks(InPlace); + SetBricks(InPlace); + ProcessByBrick::StartProcess(funct); + } + + + /** + * This method invokes the process by line operation over a single input or + * output cube. It will be an input cube if the method SetInputCube was + * invoked exactly one time before calling StartProcess. It will be an output + * cube if the SetOutputCube method was invoked exactly one time. Typically + * this method can be used to obtain statistics, histograms, or other + * information from an input cube. + * + * @deprecated Please use ProcessCubeInPlace() + * @param funct (Isis::Buffer &b) Name of your processing function + * + * @throws Isis::IException::Message + * + * @internal + * @history 2005-02-28 Stuart Sides - Modified so cube that are opended + * ReadWrite will be written. Before + * only cube opened Write would be + * written. + */ + void ProcessByLine::StartProcess(std::function funct ) { + VerifyCubes(InPlace); + SetBricks(InPlace); ProcessByBrick::StartProcess(funct); } @@ -196,7 +222,7 @@ namespace Isis { void ProcessByLine::StartProcess(void funct(std::vector &in, std::vector &out)) { VerifyCubes(InputOutputList); - SetBricks(InputOutputList); + SetBricks(InputOutputList); ProcessByBrick::StartProcess(funct); } } diff --git a/isis/src/base/objs/ProcessByLine/ProcessByLine.h b/isis/src/base/objs/ProcessByLine/ProcessByLine.h index 3c64b1e26e..8738e70c92 100644 --- a/isis/src/base/objs/ProcessByLine/ProcessByLine.h +++ b/isis/src/base/objs/ProcessByLine/ProcessByLine.h @@ -127,13 +127,15 @@ namespace Isis { void SetInputCube(Isis::Cube *inCube); void StartProcess(void funct(Isis::Buffer &inout)); + virtual void StartProcess(std::function funct ); + void StartProcess(void funct(Isis::Buffer &in, Isis::Buffer &out)); void StartProcess(void funct(std::vector &in, std::vector &out)); void SetBricks(IOCubes cn); - + /** * Same functionality as StartProcess(void funct(Isis::Buffer &inout)) * using Functors. The Functor operator(), takes the parameter diff --git a/isis/src/cassini/apps/ciss2isis/ciss2isis.cpp b/isis/src/cassini/apps/ciss2isis/main.cpp similarity index 100% rename from isis/src/cassini/apps/ciss2isis/ciss2isis.cpp rename to isis/src/cassini/apps/ciss2isis/main.cpp diff --git a/isis/src/cassini/apps/cisscal/cisscal.cpp b/isis/src/cassini/apps/cisscal/main.cpp similarity index 100% rename from isis/src/cassini/apps/cisscal/cisscal.cpp rename to isis/src/cassini/apps/cisscal/main.cpp diff --git a/isis/src/cassini/apps/vims2isis/vims2isis.cpp b/isis/src/cassini/apps/vims2isis/main.cpp similarity index 100% rename from isis/src/cassini/apps/vims2isis/vims2isis.cpp rename to isis/src/cassini/apps/vims2isis/main.cpp diff --git a/isis/src/cassini/apps/vimscal/vimscal.cpp b/isis/src/cassini/apps/vimscal/main.cpp similarity index 100% rename from isis/src/cassini/apps/vimscal/vimscal.cpp rename to isis/src/cassini/apps/vimscal/main.cpp diff --git a/isis/src/chandrayaan1/apps/chan1m32isis/chan1m32isis.cpp b/isis/src/chandrayaan1/apps/chan1m32isis/main.cpp similarity index 100% rename from isis/src/chandrayaan1/apps/chan1m32isis/chan1m32isis.cpp rename to isis/src/chandrayaan1/apps/chan1m32isis/main.cpp diff --git a/isis/src/clementine/apps/clem2isis/clem2isis.cpp b/isis/src/clementine/apps/clem2isis/main.cpp similarity index 100% rename from isis/src/clementine/apps/clem2isis/clem2isis.cpp rename to isis/src/clementine/apps/clem2isis/main.cpp diff --git a/isis/src/clementine/apps/clemhirescal/clemhirescal.cpp b/isis/src/clementine/apps/clemhirescal/main.cpp similarity index 100% rename from isis/src/clementine/apps/clemhirescal/clemhirescal.cpp rename to isis/src/clementine/apps/clemhirescal/main.cpp diff --git a/isis/src/clementine/apps/clemnircal/clemnircal.cpp b/isis/src/clementine/apps/clemnircal/main.cpp similarity index 100% rename from isis/src/clementine/apps/clemnircal/clemnircal.cpp rename to isis/src/clementine/apps/clemnircal/main.cpp diff --git a/isis/src/clementine/apps/clemnirclean/clemnirclean.cpp b/isis/src/clementine/apps/clemnirclean/main.cpp similarity index 100% rename from isis/src/clementine/apps/clemnirclean/clemnirclean.cpp rename to isis/src/clementine/apps/clemnirclean/main.cpp diff --git a/isis/src/clementine/apps/clemnirnoise/clemnirnoise.cpp b/isis/src/clementine/apps/clemnirnoise/main.cpp similarity index 100% rename from isis/src/clementine/apps/clemnirnoise/clemnirnoise.cpp rename to isis/src/clementine/apps/clemnirnoise/main.cpp diff --git a/isis/src/clementine/apps/clemuvviscal/clemuvviscal.cpp b/isis/src/clementine/apps/clemuvviscal/main.cpp similarity index 100% rename from isis/src/clementine/apps/clemuvviscal/clemuvviscal.cpp rename to isis/src/clementine/apps/clemuvviscal/main.cpp diff --git a/isis/src/control/apps/autoseed/autoseed.cpp b/isis/src/control/apps/autoseed/main.cpp similarity index 100% rename from isis/src/control/apps/autoseed/autoseed.cpp rename to isis/src/control/apps/autoseed/main.cpp diff --git a/isis/src/control/apps/cnet2dem/cnet2dem.cpp b/isis/src/control/apps/cnet2dem/main.cpp similarity index 100% rename from isis/src/control/apps/cnet2dem/cnet2dem.cpp rename to isis/src/control/apps/cnet2dem/main.cpp diff --git a/isis/src/control/apps/cnet2mat/cnet2mat.cpp b/isis/src/control/apps/cnet2mat/main.cpp similarity index 100% rename from isis/src/control/apps/cnet2mat/cnet2mat.cpp rename to isis/src/control/apps/cnet2mat/main.cpp diff --git a/isis/src/control/apps/cnetadd/cnetadd.cpp b/isis/src/control/apps/cnetadd/main.cpp similarity index 100% rename from isis/src/control/apps/cnetadd/cnetadd.cpp rename to isis/src/control/apps/cnetadd/main.cpp diff --git a/isis/src/control/apps/cnetbin2pvl/cnetbin2pvl.cpp b/isis/src/control/apps/cnetbin2pvl/main.cpp similarity index 100% rename from isis/src/control/apps/cnetbin2pvl/cnetbin2pvl.cpp rename to isis/src/control/apps/cnetbin2pvl/main.cpp diff --git a/isis/src/control/apps/cnetcheck/cnetcheck.cpp b/isis/src/control/apps/cnetcheck/main.cpp similarity index 100% rename from isis/src/control/apps/cnetcheck/cnetcheck.cpp rename to isis/src/control/apps/cnetcheck/main.cpp diff --git a/isis/src/control/apps/cnetcombinept/cnetcombinept.cpp b/isis/src/control/apps/cnetcombinept/main.cpp similarity index 100% rename from isis/src/control/apps/cnetcombinept/cnetcombinept.cpp rename to isis/src/control/apps/cnetcombinept/main.cpp diff --git a/isis/src/control/apps/cnetdiff/cnetdiff.cpp b/isis/src/control/apps/cnetdiff/main.cpp similarity index 100% rename from isis/src/control/apps/cnetdiff/cnetdiff.cpp rename to isis/src/control/apps/cnetdiff/main.cpp diff --git a/isis/src/control/apps/cnetedit/cnetedit.cpp b/isis/src/control/apps/cnetedit/main.cpp similarity index 100% rename from isis/src/control/apps/cnetedit/cnetedit.cpp rename to isis/src/control/apps/cnetedit/main.cpp diff --git a/isis/src/control/apps/cnetextract/cnetextract.cpp b/isis/src/control/apps/cnetextract/main.cpp similarity index 100% rename from isis/src/control/apps/cnetextract/cnetextract.cpp rename to isis/src/control/apps/cnetextract/main.cpp diff --git a/isis/src/control/apps/cnethist/cnethist.cpp b/isis/src/control/apps/cnethist/main.cpp similarity index 100% rename from isis/src/control/apps/cnethist/cnethist.cpp rename to isis/src/control/apps/cnethist/main.cpp diff --git a/isis/src/control/apps/cnetmerge/cnetmerge.cpp b/isis/src/control/apps/cnetmerge/main.cpp similarity index 100% rename from isis/src/control/apps/cnetmerge/cnetmerge.cpp rename to isis/src/control/apps/cnetmerge/main.cpp diff --git a/isis/src/control/apps/cnetnewradii/cnetnewradii.cpp b/isis/src/control/apps/cnetnewradii/main.cpp similarity index 100% rename from isis/src/control/apps/cnetnewradii/cnetnewradii.cpp rename to isis/src/control/apps/cnetnewradii/main.cpp diff --git a/isis/src/control/apps/cnetpvl2bin/cnetpvl2bin.cpp b/isis/src/control/apps/cnetpvl2bin/main.cpp similarity index 100% rename from isis/src/control/apps/cnetpvl2bin/cnetpvl2bin.cpp rename to isis/src/control/apps/cnetpvl2bin/main.cpp diff --git a/isis/src/control/apps/cnetref/cnetref.cpp b/isis/src/control/apps/cnetref/main.cpp similarity index 100% rename from isis/src/control/apps/cnetref/cnetref.cpp rename to isis/src/control/apps/cnetref/main.cpp diff --git a/isis/src/control/apps/cnetsplit/cnetsplit.cpp b/isis/src/control/apps/cnetsplit/main.cpp similarity index 100% rename from isis/src/control/apps/cnetsplit/cnetsplit.cpp rename to isis/src/control/apps/cnetsplit/main.cpp diff --git a/isis/src/control/apps/cnetstats/cnetstats.cpp b/isis/src/control/apps/cnetstats/main.cpp similarity index 100% rename from isis/src/control/apps/cnetstats/cnetstats.cpp rename to isis/src/control/apps/cnetstats/main.cpp diff --git a/isis/src/control/apps/cnettable/cnettable.cpp b/isis/src/control/apps/cnettable/main.cpp similarity index 100% rename from isis/src/control/apps/cnettable/cnettable.cpp rename to isis/src/control/apps/cnettable/main.cpp diff --git a/isis/src/control/apps/cnetthinner/cnetthinner.cpp b/isis/src/control/apps/cnetthinner/main.cpp similarity index 100% rename from isis/src/control/apps/cnetthinner/cnetthinner.cpp rename to isis/src/control/apps/cnetthinner/main.cpp diff --git a/isis/src/control/apps/cnetwinnow/cnetwinnow.cpp b/isis/src/control/apps/cnetwinnow/main.cpp similarity index 100% rename from isis/src/control/apps/cnetwinnow/cnetwinnow.cpp rename to isis/src/control/apps/cnetwinnow/main.cpp diff --git a/isis/src/control/apps/coreg/coreg.cpp b/isis/src/control/apps/coreg/main.cpp similarity index 100% rename from isis/src/control/apps/coreg/coreg.cpp rename to isis/src/control/apps/coreg/main.cpp diff --git a/isis/src/control/apps/deltack/deltack.cpp b/isis/src/control/apps/deltack/main.cpp similarity index 100% rename from isis/src/control/apps/deltack/deltack.cpp rename to isis/src/control/apps/deltack/main.cpp diff --git a/isis/src/control/apps/findfeatures/findfeatures.cpp b/isis/src/control/apps/findfeatures/main.cpp similarity index 100% rename from isis/src/control/apps/findfeatures/findfeatures.cpp rename to isis/src/control/apps/findfeatures/main.cpp diff --git a/isis/src/control/apps/fplanemap/fplanemap.cpp b/isis/src/control/apps/fplanemap/main.cpp similarity index 100% rename from isis/src/control/apps/fplanemap/fplanemap.cpp rename to isis/src/control/apps/fplanemap/main.cpp diff --git a/isis/src/control/apps/jigsaw/jigsaw.cpp b/isis/src/control/apps/jigsaw/main.cpp similarity index 100% rename from isis/src/control/apps/jigsaw/jigsaw.cpp rename to isis/src/control/apps/jigsaw/main.cpp diff --git a/isis/src/control/apps/mat2cnet/mat2cnet.cpp b/isis/src/control/apps/mat2cnet/main.cpp similarity index 100% rename from isis/src/control/apps/mat2cnet/mat2cnet.cpp rename to isis/src/control/apps/mat2cnet/main.cpp diff --git a/isis/src/control/apps/pointreg/pointreg.cpp b/isis/src/control/apps/pointreg/main.cpp similarity index 100% rename from isis/src/control/apps/pointreg/pointreg.cpp rename to isis/src/control/apps/pointreg/main.cpp diff --git a/isis/src/control/apps/seedgrid/seedgrid.cpp b/isis/src/control/apps/seedgrid/main.cpp similarity index 100% rename from isis/src/control/apps/seedgrid/seedgrid.cpp rename to isis/src/control/apps/seedgrid/main.cpp diff --git a/isis/src/control/apps/slither/slither.cpp b/isis/src/control/apps/slither/main.cpp similarity index 100% rename from isis/src/control/apps/slither/slither.cpp rename to isis/src/control/apps/slither/main.cpp diff --git a/isis/src/control/apps/sumspice/sumspice.cpp b/isis/src/control/apps/sumspice/main.cpp similarity index 100% rename from isis/src/control/apps/sumspice/sumspice.cpp rename to isis/src/control/apps/sumspice/main.cpp diff --git a/isis/src/control/apps/warp/warp.cpp b/isis/src/control/apps/warp/main.cpp similarity index 100% rename from isis/src/control/apps/warp/warp.cpp rename to isis/src/control/apps/warp/main.cpp diff --git a/isis/src/control/objs/BundleUtilities/BundleTargetBody.h b/isis/src/control/objs/BundleUtilities/BundleTargetBody.h index 5e214e83b4..7fa8cec75f 100644 --- a/isis/src/control/objs/BundleUtilities/BundleTargetBody.h +++ b/isis/src/control/objs/BundleUtilities/BundleTargetBody.h @@ -42,8 +42,8 @@ namespace Isis { class Target; /** - * This class is used to represent a target body in a bundle and how to solve for it. - * + * This class is used to represent a target body in a bundle and how to solve for it. + * * @ingroup ControlNetworks * * @author 2015-05-15 Ken Edmundson @@ -59,6 +59,8 @@ namespace Isis { * @history 2016-08-23 Ian Humphrey - The applyParameterCorrections() method now throws its * last exception. Updated unit test to test that exception. * Fixes #4153. + * @history 2018-11-13 Jesse Mapel - Made methods used by BundleSettings virtual + * so they can be override by mock testing objects. */ class BundleTargetBody { @@ -67,13 +69,13 @@ namespace Isis { BundleTargetBody(); // default BundleTargetBody(Target *target); BundleTargetBody(const BundleTargetBody &src); // copy - ~BundleTargetBody(); + virtual ~BundleTargetBody(); BundleTargetBody &operator=(const BundleTargetBody &src); //! Enumeration that defines how to solve for target radii. enum TargetRadiiSolveMethod { - None = 0, //!< Solve for none. + None = 0, //!< Solve for none. Mean = 1, //!< Solve for mean radius. All = 2 //!< Solve for all radii. }; @@ -141,23 +143,23 @@ namespace Isis { QString formatWDotAdjustedSigmaString(int fieldWidth, int precision) const; QString formatRadiusAdjustedSigmaString(int fieldWidth, int precision) const; - bool solvePoleRA(); - bool solvePoleRAVelocity(); - bool solvePoleRAAcceleration(); - bool solvePoleDec(); - bool solvePoleDecVelocity(); - bool solvePoleDecAcceleration(); - bool solvePM(); - bool solvePMVelocity(); - bool solvePMAcceleration(); - bool solveTriaxialRadii(); - bool solveMeanRadius(); + virtual bool solvePoleRA(); + virtual bool solvePoleRAVelocity(); + virtual bool solvePoleRAAcceleration(); + virtual bool solvePoleDec(); + virtual bool solvePoleDecVelocity(); + virtual bool solvePoleDecAcceleration(); + virtual bool solvePM(); + virtual bool solvePMVelocity(); + virtual bool solvePMAcceleration(); + virtual bool solveTriaxialRadii(); + virtual bool solveMeanRadius(); // int numberPoleParameters(); // int numberW0Parameters(); // int numberWDotParameters(); int numberRadiusParameters(); - int numberParameters(); + virtual int numberParameters(); void applyParameterCorrections(LinearAlgebra::Vector corrections); diff --git a/isis/src/dawn/apps/dawnfc2isis/dawnfc2isis.cpp b/isis/src/dawn/apps/dawnfc2isis/main.cpp similarity index 100% rename from isis/src/dawn/apps/dawnfc2isis/dawnfc2isis.cpp rename to isis/src/dawn/apps/dawnfc2isis/main.cpp diff --git a/isis/src/dawn/apps/dawnvir2isis/dawnvir2isis.cpp b/isis/src/dawn/apps/dawnvir2isis/main.cpp similarity index 100% rename from isis/src/dawn/apps/dawnvir2isis/dawnvir2isis.cpp rename to isis/src/dawn/apps/dawnvir2isis/main.cpp diff --git a/isis/src/dev/apps/camcoeffs/camcoeffs.cpp b/isis/src/dev/apps/camcoeffs/main.cpp similarity index 100% rename from isis/src/dev/apps/camcoeffs/camcoeffs.cpp rename to isis/src/dev/apps/camcoeffs/main.cpp diff --git a/isis/src/dev/apps/camdev/camdev.cpp b/isis/src/dev/apps/camdev/main.cpp similarity index 100% rename from isis/src/dev/apps/camdev/camdev.cpp rename to isis/src/dev/apps/camdev/main.cpp diff --git a/isis/src/dev/apps/camtest/camtest.cpp b/isis/src/dev/apps/camtest/main.cpp similarity index 100% rename from isis/src/dev/apps/camtest/camtest.cpp rename to isis/src/dev/apps/camtest/main.cpp diff --git a/isis/src/dev/apps/m3loc2net/m3loc2net.cpp b/isis/src/dev/apps/m3loc2net/main.cpp similarity index 100% rename from isis/src/dev/apps/m3loc2net/m3loc2net.cpp rename to isis/src/dev/apps/m3loc2net/main.cpp diff --git a/isis/src/galileo/apps/gllnims2isis/gllnims2isis.cpp b/isis/src/galileo/apps/gllnims2isis/main.cpp similarity index 100% rename from isis/src/galileo/apps/gllnims2isis/gllnims2isis.cpp rename to isis/src/galileo/apps/gllnims2isis/main.cpp diff --git a/isis/src/galileo/apps/gllssi2isis/gllssi2isis.cpp b/isis/src/galileo/apps/gllssi2isis/main.cpp similarity index 100% rename from isis/src/galileo/apps/gllssi2isis/gllssi2isis.cpp rename to isis/src/galileo/apps/gllssi2isis/main.cpp diff --git a/isis/src/galileo/apps/gllssical/gllssical.cpp b/isis/src/galileo/apps/gllssical/main.cpp similarity index 100% rename from isis/src/galileo/apps/gllssical/gllssical.cpp rename to isis/src/galileo/apps/gllssical/main.cpp diff --git a/isis/src/hayabusa/apps/amica2isis/ImportFits.cpp b/isis/src/hayabusa/apps/amica2isis/AmicaImportFits.cpp similarity index 88% rename from isis/src/hayabusa/apps/amica2isis/ImportFits.cpp rename to isis/src/hayabusa/apps/amica2isis/AmicaImportFits.cpp index 2be84deaac..7588718c78 100644 --- a/isis/src/hayabusa/apps/amica2isis/ImportFits.cpp +++ b/isis/src/hayabusa/apps/amica2isis/AmicaImportFits.cpp @@ -19,7 +19,7 @@ * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. */ -#include "ImportFits.h" +#include "AmicaImportFits.h" #include #include @@ -41,23 +41,23 @@ using namespace std; namespace Isis { - /** + /** * Default constructor. This constructor initializes the FITS object * */ - ImportFits::ImportFits() { + AmicaImportFits::AmicaImportFits() { init(); } /** * @brief This constructor automatically loads the given label and table files. * - * This constructor takes the name of the label file describing the PDS - * table, the table data file name, and the name of the PDS table object. - * It will extract the description of the columns and read the contents of the + * This constructor takes the name of the label file describing the PDS + * table, the table data file name, and the name of the PDS table object. + * It will extract the description of the columns and read the contents of the * table data file. * - * If no table file is given or an empty QString is given for the table file, + * If no table file is given or an empty QString is given for the table file, * the table location will be read from the label file. * * If no table name is given, the default name for the object is TABLE. @@ -67,35 +67,35 @@ namespace Isis { * @param pdsLabFile Name of table label file * @param pdsTableName The name of the table object in the PDS file. */ - ImportFits::ImportFits(const FileName &fitsFile, + AmicaImportFits::AmicaImportFits(const FileName &fitsFile, const QString &fitsLabelName) { init(); load(fitsFile.expanded(), fitsLabelName); } /** - * Destructs the ImportFits object. - */ - ImportFits::~ImportFits() { + * Destructs the AmicaImportFits object. + */ + AmicaImportFits::~AmicaImportFits() { } /** Return the number of samples in the FITS image */ - int ImportFits::samples() const { + int AmicaImportFits::samples() const { return (m_samples); } /** Return the number of lines in the FITS image */ - int ImportFits::lines() const { + int AmicaImportFits::lines() const { return (m_lines); } /** Return the number of bands in the FITS image */ - int ImportFits::bands() const { + int AmicaImportFits::bands() const { return (m_bands); } /** Returns the FITS label in a group name specified in the constructor */ - PvlGroup ImportFits::label() const { + PvlGroup AmicaImportFits::label() const { return (m_label); } @@ -108,19 +108,19 @@ namespace Isis { * otherwise, the location of the table data is extracted from the ^TABLE_NAME * keyword in the provided labels. The table data is then loaded. * - * This method needs to be called if the default constructor is used. - * Otherwise, it is invoked in the constructor that takes the label, table - * file, and table name. This method may be used to overwrite the label and + * This method needs to be called if the default constructor is used. + * Otherwise, it is invoked in the constructor that takes the label, table + * file, and table name. This method may be used to overwrite the label and * table file used. When it is invoked, the current contents of the object are * discarded. * * This method is used for ASCII or BINARY PDS tables. * * @param pdsLabFile Name of PDS table label file - * @param pdsTableFile Name of PDS table data file to be imported into Isis + * @param pdsTableFile Name of PDS table data file to be imported into Isis * (optional) */ - void ImportFits::load(const QString &fitsfile, + void AmicaImportFits::load(const QString &fitsfile, const QString &fitsLabelName) { init(); @@ -137,7 +137,7 @@ namespace Isis { QString msg = "Cannot open input file [" + fitsfile + "]"; throw IException(IException::Io, msg, _FILEINFO_); } - + // Parse the labels m_label = parseLabel(input, fitsLabelName); @@ -154,8 +154,8 @@ namespace Isis { m_bands = toInt(m_label["NAXIS3"][0]); } else { - QString msg = "NAXIS count of [" + m_label["NAXIS"][0] + - "] is not supported at this time"; + QString msg = "NAXIS count of [" + m_label["NAXIS"][0] + + "] is not supported at this time"; throw IException(IException::User, msg, _FILEINFO_); } @@ -163,13 +163,13 @@ namespace Isis { } - /** - * Initialize object variables - * - * This method is reentrant. + /** + * Initialize object variables + * + * This method is reentrant. * */ - void ImportFits::init() { + void AmicaImportFits::init() { m_file = ""; m_lines = m_samples = m_bands = 0; m_label = PvlGroup("FitsLabel"); @@ -178,15 +178,15 @@ namespace Isis { /** * @brief Import a FITS label in to PvlGroup - * - * @author 2013-11-07 kbecker - * + * + * @author 2013-11-07 kbecker + * * @param input Input stream to read label from * @param fitLabelName Name of group to parse and store FITS label into - * + * * @return PvlGroup Returns the FITS keywords in this group */ - PvlGroup ImportFits::parseLabel(std::ifstream &input, + PvlGroup AmicaImportFits::parseLabel(std::ifstream &input, const QString &fitLabelName) { char reading[81]; @@ -243,4 +243,3 @@ namespace Isis { } } // namespace Isis - diff --git a/isis/src/hayabusa/apps/amica2isis/ImportFits.h b/isis/src/hayabusa/apps/amica2isis/AmicaImportFits.h similarity index 84% rename from isis/src/hayabusa/apps/amica2isis/ImportFits.h rename to isis/src/hayabusa/apps/amica2isis/AmicaImportFits.h index 2569860f43..63237afddf 100644 --- a/isis/src/hayabusa/apps/amica2isis/ImportFits.h +++ b/isis/src/hayabusa/apps/amica2isis/AmicaImportFits.h @@ -1,5 +1,5 @@ -#ifndef ImportFits_h -#define ImportFits_h +#ifndef AmicaImportFits_h +#define AmicaImportFits_h /** * @file * $Revision: 5602 $ @@ -37,38 +37,38 @@ namespace Isis { * @brief Import a FITS file with a label description * * This class interrogates a \b simple file formatted with the Flexible Image - * Transport System (FITS) file and provides tools to converts it to an ISIS - * image cube. - * - * Example of interrogation of a FITS file in an ImportFits object. + * Transport System (FITS) file and provides tools to converts it to an ISIS + * image cube. + * + * Example of interrogation of a FITS file in an AmicaImportFits object. * - * ImportFits fits(fitsfile, fitsLabelName); + * AmicaImportFits fits(fitsfile, fitsLabelName); * Pvl label; * label.addGroup(fits.label()); * - * + * * @ingroup Utility * * @author 2013-11-07 Kris Becker * - * @internal + * @internal */ - class ImportFits { + class AmicaImportFits { public: - ImportFits(); - ImportFits(const FileName &fitsfile, + AmicaImportFits(); + AmicaImportFits(const FileName &fitsfile, const QString &fitsLabelName="FitsLabel"); - ~ImportFits(); - + ~AmicaImportFits(); + int samples() const; int lines() const; int bands() const; PvlGroup label() const; - - void load(const QString &fitsfile, + + void load(const QString &fitsfile, const QString &fitsLabelName = "FitsLabel"); - + private: void init(); PvlGroup parseLabel(std::ifstream &in, const QString &fitLabelName); @@ -84,5 +84,3 @@ namespace Isis { } #endif - - diff --git a/isis/src/hayabusa/apps/amica2isis/amica2isis.cpp b/isis/src/hayabusa/apps/amica2isis/main.cpp similarity index 94% rename from isis/src/hayabusa/apps/amica2isis/amica2isis.cpp rename to isis/src/hayabusa/apps/amica2isis/main.cpp index a63d2121e5..b372ef48cb 100644 --- a/isis/src/hayabusa/apps/amica2isis/amica2isis.cpp +++ b/isis/src/hayabusa/apps/amica2isis/main.cpp @@ -7,7 +7,7 @@ #include "AlphaCube.h" #include "Brick.h" #include "FileName.h" -#include "ImportFits.h" +#include "AmicaImportFits.h" #include "iTime.h" #include "OriginalLabel.h" #include "PixelType.h" @@ -27,20 +27,20 @@ void IsisMain () Pvl label; p.SetPdsFile (inFile.expanded(), "", label); - // Add FITS header - QString fitsImage = inFile.path() + "/" + (QString) label.findKeyword("^IMAGE"); + // Add FITS header + QString fitsImage = inFile.path() + "/" + (QString) label.findKeyword("^IMAGE"); FileName fitsFile(fitsImage); - ImportFits fits(fitsFile, "FitsLabel"); + AmicaImportFits fits(fitsFile, "FitsLabel"); label.addGroup(fits.label()); QString instid; QString missid; try { instid = (QString) label.findKeyword ("INSTRUMENT_ID", PvlObject::Traverse); - missid = (QString) label.findKeyword ("INSTRUMENT_HOST_NAME", PvlObject::Traverse); + missid = (QString) label.findKeyword ("INSTRUMENT_HOST_NAME", PvlObject::Traverse); } catch (IException &e) { - QString msg = "Unable to read [INSTRUMENT_ID] or [INSTRUMENT_HOST_NAME] " + QString msg = "Unable to read [INSTRUMENT_ID] or [INSTRUMENT_HOST_NAME] " "from input file [" + inFile.expanded() + "]"; throw IException(e, IException::Io,msg, _FILEINFO_); } @@ -48,7 +48,7 @@ void IsisMain () instid = instid.simplified().trimmed(); missid = missid.simplified().trimmed(); if (missid != "HAYABUSA" && instid != "AMICA") { - QString msg = "Input file [" + inFile.expanded() + + QString msg = "Input file [" + inFile.expanded() + "] does not appear to be a " + "Hayabusa/AMICA PDS label file."; throw IException(IException::Unknown, msg, _FILEINFO_); @@ -59,7 +59,7 @@ void IsisMain () target = ui.GetString("TARGET"); } - // Set up image translation. Omit the inclusion of this .lbl file and we + // Set up image translation. Omit the inclusion of this .lbl file and we // add the label with the FITS header augmentation as the orginal label // further below. p.OmitOriginalLabel(); @@ -91,8 +91,8 @@ void IsisMain () samp0 += nsamps; samp1 -= nsamps; } - - outcube->write(image); + + outcube->write(image); image.next(); } @@ -167,8 +167,8 @@ void IsisMain () int ending_samp = (int) inst["LastSample"] + 1; int ending_line = (int) inst["LastLine"] + 1; - AlphaCube subarea(1024, 1024, - nsamps, nlines, + AlphaCube subarea(1024, 1024, + nsamps, nlines, starting_samp - 0.5, starting_line - 0.5, ending_samp + 0.5, ending_line + 0.5); @@ -179,4 +179,3 @@ void IsisMain () // All done... p.EndProcess(); } - diff --git a/isis/src/hayabusa/apps/amicacal/amicacal.cpp b/isis/src/hayabusa/apps/amicacal/main.cpp similarity index 100% rename from isis/src/hayabusa/apps/amicacal/amicacal.cpp rename to isis/src/hayabusa/apps/amicacal/main.cpp diff --git a/isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.cpp b/isis/src/hayabusa/apps/hyb1pds4gen/main.cpp similarity index 100% rename from isis/src/hayabusa/apps/hyb1pds4gen/hyb1pds4gen.cpp rename to isis/src/hayabusa/apps/hyb1pds4gen/main.cpp diff --git a/isis/src/hayabusa/apps/nirs2isis/ImportFits.cpp b/isis/src/hayabusa/apps/nirs2isis/NirsImportFits.cpp similarity index 88% rename from isis/src/hayabusa/apps/nirs2isis/ImportFits.cpp rename to isis/src/hayabusa/apps/nirs2isis/NirsImportFits.cpp index 0d4b24e025..b790725f2c 100644 --- a/isis/src/hayabusa/apps/nirs2isis/ImportFits.cpp +++ b/isis/src/hayabusa/apps/nirs2isis/NirsImportFits.cpp @@ -19,7 +19,7 @@ * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on * http://www.usgs.gov/privacy.html. */ -#include "ImportFits.h" +#include "NirsImportFits.h" #include #include @@ -41,23 +41,23 @@ using namespace std; namespace Isis { - /** + /** * Default constructor. This constructor initializes the FITS object * */ - ImportFits::ImportFits() { + NirsImportFits::NirsImportFits() { init(); } /** * @brief This constructor automatically loads the given label and table files. * - * This constructor takes the name of the label file describing the PDS - * table, the table data file name, and the name of the PDS table object. - * It will extract the description of the columns and read the contents of the + * This constructor takes the name of the label file describing the PDS + * table, the table data file name, and the name of the PDS table object. + * It will extract the description of the columns and read the contents of the * table data file. * - * If no table file is given or an empty QString is given for the table file, + * If no table file is given or an empty QString is given for the table file, * the table location will be read from the label file. * * If no table name is given, the default name for the object is TABLE. @@ -67,35 +67,35 @@ namespace Isis { * @param pdsLabFile Name of table label file * @param pdsTableName The name of the table object in the PDS file. */ - ImportFits::ImportFits(const FileName &fitsFile, + NirsImportFits::NirsImportFits(const FileName &fitsFile, const QString &fitsLabelName) { init(); load(fitsFile.expanded(), fitsLabelName); } /** - * Destructs the ImportFits object. - */ - ImportFits::~ImportFits() { + * Destructs the NirsImportFits object. + */ + NirsImportFits::~NirsImportFits() { } /** Return the number of samples in the FITS image */ - int ImportFits::samples() const { + int NirsImportFits::samples() const { return (m_samples); } /** Return the number of lines in the FITS image */ - int ImportFits::lines() const { + int NirsImportFits::lines() const { return (m_lines); } /** Return the number of bands in the FITS image */ - int ImportFits::bands() const { + int NirsImportFits::bands() const { return (m_bands); } /** Returns the FITS label in a object name specified in the constructor */ - PvlObject ImportFits::label() const { + PvlObject NirsImportFits::label() const { return (m_label); } @@ -108,19 +108,19 @@ namespace Isis { * otherwise, the location of the table data is extracted from the ^TABLE_NAME * keyword in the provided labels. The table data is then loaded. * - * This method needs to be called if the default constructor is used. - * Otherwise, it is invoked in the constructor that takes the label, table - * file, and table name. This method may be used to overwrite the label and + * This method needs to be called if the default constructor is used. + * Otherwise, it is invoked in the constructor that takes the label, table + * file, and table name. This method may be used to overwrite the label and * table file used. When it is invoked, the current contents of the object are * discarded. * * This method is used for ASCII or BINARY PDS tables. * * @param pdsLabFile Name of PDS table label file - * @param pdsTableFile Name of PDS table data file to be imported into Isis + * @param pdsTableFile Name of PDS table data file to be imported into Isis * (optional) */ - void ImportFits::load(const QString &fitsfile, + void NirsImportFits::load(const QString &fitsfile, const QString &fitsLabelName) { init(); @@ -137,7 +137,7 @@ namespace Isis { QString msg = "Cannot open input file [" + fitsfile + "]"; throw IException(IException::Io, msg, _FILEINFO_); } - + // Parse the labels m_label = parseLabel(input, fitsLabelName); @@ -154,8 +154,8 @@ namespace Isis { m_bands = toInt(m_label["NAXIS3"][0]); } else { - QString msg = "NAXIS count of [" + m_label["NAXIS"][0] + - "] is not supported at this time"; + QString msg = "NAXIS count of [" + m_label["NAXIS"][0] + + "] is not supported at this time"; throw IException(IException::User, msg, _FILEINFO_); } @@ -163,13 +163,13 @@ namespace Isis { } - /** - * Initialize object variables - * - * This method is reentrant. + /** + * Initialize object variables + * + * This method is reentrant. * */ - void ImportFits::init() { + void NirsImportFits::init() { m_file = ""; m_lines = m_samples = m_bands = 0; m_label = PvlObject("FitsLabel"); @@ -178,15 +178,15 @@ namespace Isis { /** * @brief Import a FITS label in to PvlGroup - * - * @author 2013-11-07 kbecker - * + * + * @author 2013-11-07 kbecker + * * @param input Input stream to read label from * @param fitLabelName Name of group to parse and store FITS label into - * + * * @return PvlObject Returns the FITS keywords in this object */ - PvlObject ImportFits::parseLabel(std::ifstream &input, + PvlObject NirsImportFits::parseLabel(std::ifstream &input, const QString &fitLabelName) { char reading[81]; @@ -252,4 +252,3 @@ namespace Isis { } } // namespace Isis - diff --git a/isis/src/hayabusa/apps/nirs2isis/ImportFits.h b/isis/src/hayabusa/apps/nirs2isis/NirsImportFits.h similarity index 84% rename from isis/src/hayabusa/apps/nirs2isis/ImportFits.h rename to isis/src/hayabusa/apps/nirs2isis/NirsImportFits.h index bb4850a384..27226109cc 100644 --- a/isis/src/hayabusa/apps/nirs2isis/ImportFits.h +++ b/isis/src/hayabusa/apps/nirs2isis/NirsImportFits.h @@ -1,5 +1,5 @@ -#ifndef ImportFits_h -#define ImportFits_h +#ifndef NirsImportFits_h +#define NirsImportFits_h /** * @file * $Revision: 5602 $ @@ -37,38 +37,38 @@ namespace Isis { * @brief Import a FITS file with a label description * * This class interrogates a \b simple file formatted with the Flexible Image - * Transport System (FITS) file and provides tools to converts it to an ISIS - * image cube. - * - * Example of interrogation of a FITS file in an ImportFits object. + * Transport System (FITS) file and provides tools to converts it to an ISIS + * image cube. + * + * Example of interrogation of a FITS file in an NirsImportFits object. * - * ImportFits fits(fitsfile, fitsLabelName); + * NirsImportFits fits(fitsfile, fitsLabelName); * Pvl label; * label.addGroup(fits.label()); * - * + * * @ingroup Utility * * @author 2013-11-07 Kris Becker * - * @internal + * @internal */ - class ImportFits { + class NirsImportFits { public: - ImportFits(); - ImportFits(const FileName &fitsfile, + NirsImportFits(); + NirsImportFits(const FileName &fitsfile, const QString &fitsLabelName="FitsLabel"); - ~ImportFits(); - + ~NirsImportFits(); + int samples() const; int lines() const; int bands() const; PvlObject label() const; - - void load(const QString &fitsfile, + + void load(const QString &fitsfile, const QString &fitsLabelName = "FitsLabel"); - + private: void init(); PvlObject parseLabel(std::ifstream &in, const QString &fitLabelName); @@ -84,5 +84,3 @@ namespace Isis { } #endif - - diff --git a/isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp b/isis/src/hayabusa/apps/nirs2isis/main.cpp similarity index 98% rename from isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp rename to isis/src/hayabusa/apps/nirs2isis/main.cpp index e213c4c01b..a5cc7b466e 100644 --- a/isis/src/hayabusa/apps/nirs2isis/nirs2isis.cpp +++ b/isis/src/hayabusa/apps/nirs2isis/main.cpp @@ -2,7 +2,7 @@ #include "Cube.h" #include "IException.h" -#include "ImportFits.h" +#include "NirsImportFits.h" #include "iTime.h" #include "LineManager.h" #include "PixelType.h" @@ -32,9 +32,9 @@ void IsisMain() { Pvl label; processPDS.SetPdsFile (detachedLabel.expanded(), "", label); - QString fitsImage = detachedLabel.path() + "/" + (QString) label.findKeyword("^COMBINED_SPECTRUM"); + QString fitsImage = detachedLabel.path() + "/" + (QString) label.findKeyword("^COMBINED_SPECTRUM"); FileName fitsFile(fitsImage); - ImportFits fits(fitsFile, "FitsLabel"); + NirsImportFits fits(fitsFile, "FitsLabel"); label += fits.label(); QString axisCount; diff --git a/isis/src/hayabusa2/apps/hyb2onc2isis/hyb2onc2isis.cpp b/isis/src/hayabusa2/apps/hyb2onc2isis/main.cpp similarity index 100% rename from isis/src/hayabusa2/apps/hyb2onc2isis/hyb2onc2isis.cpp rename to isis/src/hayabusa2/apps/hyb2onc2isis/main.cpp diff --git a/isis/src/hayabusa2/apps/hyb2onccal/hyb2onccal.cpp b/isis/src/hayabusa2/apps/hyb2onccal/main.cpp similarity index 100% rename from isis/src/hayabusa2/apps/hyb2onccal/hyb2onccal.cpp rename to isis/src/hayabusa2/apps/hyb2onccal/main.cpp diff --git a/isis/src/juno/apps/junocam2isis/junocam2isis.cpp b/isis/src/juno/apps/junocam2isis/main.cpp similarity index 100% rename from isis/src/juno/apps/junocam2isis/junocam2isis.cpp rename to isis/src/juno/apps/junocam2isis/main.cpp diff --git a/isis/src/kaguya/apps/kaguyami2isis/kaguyami2isis.cpp b/isis/src/kaguya/apps/kaguyami2isis/main.cpp similarity index 100% rename from isis/src/kaguya/apps/kaguyami2isis/kaguyami2isis.cpp rename to isis/src/kaguya/apps/kaguyami2isis/main.cpp diff --git a/isis/src/kaguya/apps/kaguyasp2ascii/kaguyasp2ascii.cpp b/isis/src/kaguya/apps/kaguyasp2ascii/main.cpp similarity index 100% rename from isis/src/kaguya/apps/kaguyasp2ascii/kaguyasp2ascii.cpp rename to isis/src/kaguya/apps/kaguyasp2ascii/main.cpp diff --git a/isis/src/kaguya/apps/kaguyasp2isis/kaguyasp2isis.cpp b/isis/src/kaguya/apps/kaguyasp2isis/main.cpp similarity index 100% rename from isis/src/kaguya/apps/kaguyasp2isis/kaguyasp2isis.cpp rename to isis/src/kaguya/apps/kaguyasp2isis/main.cpp diff --git a/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.cpp b/isis/src/kaguya/apps/kaguyatc2isis/main.cpp similarity index 100% rename from isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.cpp rename to isis/src/kaguya/apps/kaguyatc2isis/main.cpp diff --git a/isis/src/kaguya/apps/mimap2isis/mimap2isis.cpp b/isis/src/kaguya/apps/mimap2isis/main.cpp similarity index 100% rename from isis/src/kaguya/apps/mimap2isis/mimap2isis.cpp rename to isis/src/kaguya/apps/mimap2isis/main.cpp diff --git a/isis/src/lo/apps/lo2isis/lo2isis.cpp b/isis/src/lo/apps/lo2isis/main.cpp similarity index 100% rename from isis/src/lo/apps/lo2isis/lo2isis.cpp rename to isis/src/lo/apps/lo2isis/main.cpp diff --git a/isis/src/lo/apps/lopdsgen/lopdsgen.cpp b/isis/src/lo/apps/lopdsgen/main.cpp similarity index 100% rename from isis/src/lo/apps/lopdsgen/lopdsgen.cpp rename to isis/src/lo/apps/lopdsgen/main.cpp diff --git a/isis/src/lro/apps/lromakeflat/lromakeflat.cpp b/isis/src/lro/apps/lromakeflat/main.cpp similarity index 100% rename from isis/src/lro/apps/lromakeflat/lromakeflat.cpp rename to isis/src/lro/apps/lromakeflat/main.cpp diff --git a/isis/src/lro/apps/lronac2isis/lronac2isis.cpp b/isis/src/lro/apps/lronac2isis/main.cpp similarity index 100% rename from isis/src/lro/apps/lronac2isis/lronac2isis.cpp rename to isis/src/lro/apps/lronac2isis/main.cpp diff --git a/isis/src/lro/apps/lronac2pds/lronac2pds.cpp b/isis/src/lro/apps/lronac2pds/main.cpp similarity index 100% rename from isis/src/lro/apps/lronac2pds/lronac2pds.cpp rename to isis/src/lro/apps/lronac2pds/main.cpp diff --git a/isis/src/lro/apps/lronac2pds/md5.h b/isis/src/lro/apps/lronac2pds/md5.h deleted file mode 100644 index 8cd2bb07bd..0000000000 --- a/isis/src/lro/apps/lronac2pds/md5.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This is the C++ implementation of the MD5 Message-Digest - * Algorithm desrcipted in RFC 1321. - * I translated the C code from this RFC to C++. - * There is no warranty. - * - * Feb. 12. 2005 - * Benjamin Gr�delbach - */ - -/* - * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All - * rights reserved. - * - * License to copy and use this software is granted provided that it - * is identified as the "RSA Data Security, Inc. MD5 Message-Digest - * Algorithm" in all material mentioning or referencing this software - * or this function. - * - * License is also granted to make and use derivative works provided - * that such works are identified as "derived from the RSA Data - * Security, Inc. MD5 Message-Digest Algorithm" in all material - * mentioning or referencing the derived work. - * - * RSA Data Security, Inc. makes no representations concerning either - * the merchantability of this software or the suitability of this - * software for any particular purpose. It is provided "as is" - * without express or implied warranty of any kind. - * - * These notices must be retained in any copies of any part of this - * documentation and/or software. - */ - -//---------------------------------------------------------------------- -//include protection -#ifndef MD5_H -#define MD5_H - -//---------------------------------------------------------------------- -//STL includes -#include "stdint.h" -#include - -//---------------------------------------------------------------------- -//typedefs -typedef uint8_t *POINTER; - -/* - * MD5 context. - */ -typedef struct { - uint32_t state[4]; /* state (ABCD) */ - uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ - uint8_t buffer[64]; /* input buffer */ -} MD5_CTX; - -/** - * MD5 class - * - * This is the RSA Data Security, Inc. MD5 Message-Digest Algorithm - * - * @author ????-??-?? Unknown - * - * @internal - */ -class MD5 { - - private: - - void MD5Transform(uint32_t state[4], uint8_t block[64]); - void Encode(uint8_t *, uint32_t *, uint32_t); - void Decode(uint32_t *, uint8_t *, uint32_t); - void MD5_memcpy(POINTER, POINTER, uint32_t); - void MD5_memset(POINTER, int32_t, uint32_t); - - public: - - void MD5Init(MD5_CTX *); - void MD5Update(MD5_CTX *, uint8_t *, uint32_t); - void MD5Final(uint8_t [16], MD5_CTX *); - - MD5() {}; -}; - -//---------------------------------------------------------------------- -//End of include protection -#endif - -/* - * EOF - */ diff --git a/isis/src/lro/apps/lronaccal/lronaccal.cpp b/isis/src/lro/apps/lronaccal/main.cpp similarity index 100% rename from isis/src/lro/apps/lronaccal/lronaccal.cpp rename to isis/src/lro/apps/lronaccal/main.cpp diff --git a/isis/src/lro/apps/lronacecho/lronacecho.cpp b/isis/src/lro/apps/lronacecho/main.cpp similarity index 100% rename from isis/src/lro/apps/lronacecho/lronacecho.cpp rename to isis/src/lro/apps/lronacecho/main.cpp diff --git a/isis/src/lro/apps/lronacpho/lronacpho.cpp b/isis/src/lro/apps/lronacpho/main.cpp similarity index 100% rename from isis/src/lro/apps/lronacpho/lronacpho.cpp rename to isis/src/lro/apps/lronacpho/main.cpp diff --git a/isis/src/lro/apps/lrowac2isis/lrowac2isis.cpp b/isis/src/lro/apps/lrowac2isis/main.cpp similarity index 100% rename from isis/src/lro/apps/lrowac2isis/lrowac2isis.cpp rename to isis/src/lro/apps/lrowac2isis/main.cpp diff --git a/isis/src/lro/apps/lrowac2pds/lrowac2pds.cpp b/isis/src/lro/apps/lrowac2pds/main.cpp similarity index 100% rename from isis/src/lro/apps/lrowac2pds/lrowac2pds.cpp rename to isis/src/lro/apps/lrowac2pds/main.cpp diff --git a/isis/src/lro/apps/lrowac2pds/md5.cpp b/isis/src/lro/apps/lrowac2pds/md5.cpp deleted file mode 100644 index cfc7e30bf3..0000000000 --- a/isis/src/lro/apps/lrowac2pds/md5.cpp +++ /dev/null @@ -1,318 +0,0 @@ -/* - * This is the C++ implementation of the MD5 Message-Digest - * Algorithm desrcipted in RFC 1321. - * I translated the C code from this RFC to C++. - * There is no warranty. - * - * Feb. 12. 2005 - * Benjamin Gr�delbach - */ - -/* - * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All - * rights reserved. - * - * License to copy and use this software is granted provided that it - * is identified as the "RSA Data Security, Inc. MD5 Message-Digest - * Algorithm" in all material mentioning or referencing this software - * or this function. - * - * License is also granted to make and use derivative works provided - * that such works are identified as "derived from the RSA Data - * Security, Inc. MD5 Message-Digest Algorithm" in all material - * mentioning or referencing the derived work. - * - * RSA Data Security, Inc. makes no representations concerning either - * the merchantability of this software or the suitability of this - * software for any particular purpose. It is provided "as is" - * without express or implied warranty of any kind. - * - * These notices must be retained in any copies of any part of this - * documentation and/or software. - */ - -//md5 class include -#include "md5.h" - -// Constants for MD5Transform routine. -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static uint8_t PADDING[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G, H and I are basic MD5 functions. */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) -//#define ROTATE_LEFT(x, n) (((x) << (n)) | (( (UINT32) x) >> (32-(n)))) - -/* -FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. -Rotation is separate from addition to prevent recomputation. -*/ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. */ -void MD5::MD5Init(MD5_CTX *context) { - context->count[0] = context->count[1] = 0; - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* - MD5 block update operation. Continues an MD5 message-digest - operation, processing another message block, and updating the - context. -*/ -void MD5::MD5Update(MD5_CTX *context, uint8_t *input, uint32_t inputLen) { - uint32_t i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (uint32_t)((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if((context->count[0] += ((uint32_t)inputLen << 3)) - < ((uint32_t)inputLen << 3)) - context->count[1]++; - - context->count[1] += ((uint32_t)inputLen >> 29); - partLen = 64 - index; - - /* - * Transform as many times as possible. - */ - if(inputLen >= partLen) { - MD5_memcpy((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD5Transform(context->state, context->buffer); - - for(i = partLen; i + 63 < inputLen; i += 64) - MD5Transform(context->state, &input[i]); - - index = 0; - } - else - i = 0; - - /* Buffer remaining input */ - MD5_memcpy((POINTER)&context->buffer[index], - (POINTER)&input[i], - inputLen - i); -} - -/* - * MD5 finalization. Ends an MD5 message-digest operation, writing the - * the message digest and zeroizing the context. - */ -void MD5::MD5Final(uint8_t digest[16], MD5_CTX *context) { - uint8_t bits[8]; - uint32_t index, padLen; - - /* Save number of bits */ - Encode(bits, context->count, 8); - - /* - * Pad out to 56 mod 64. - */ - index = (uint32_t)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - MD5Update(context, PADDING, padLen); - - /* Append length (before padding) */ - MD5Update(context, bits, 8); - - /* Store state in digest */ - Encode(digest, context->state, 16); - - /* - * Zeroize sensitive information. - */ - MD5_memset((POINTER)context, 0, sizeof(*context)); -} - -/* - * MD5 basic transformation. Transforms state based on block. - */ -void MD5::MD5Transform(uint32_t state[4], uint8_t block[64]) { - uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode(x, block, 64); - - /* Round 1 */ - FF(a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - FF(d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - FF(c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - FF(b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - FF(a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - FF(d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - FF(c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - FF(b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - FF(a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - FF(d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG(a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - GG(d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG(b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - GG(a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG(b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - GG(a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG(c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - - GG(b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG(d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - GG(c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH(a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - HH(d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH(a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - HH(d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - HH(c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH(d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - HH(c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - HH(b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - HH(a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH(b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II(a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - II(d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II(b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II(d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II(b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - II(a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II(c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II(a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II(c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - II(b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* - * Zeroize sensitive information. - */ - MD5_memset((POINTER)x, 0, sizeof(x)); -} - -/* - * Encodes input (uint32_t) into output (uint8_t). Assumes len is - * a multiple of 4. - */ -void MD5::Encode(uint8_t *output, uint32_t *input, uint32_t len) { - uint32_t i, j; - - for(i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (uint8_t)(input[i] & 0xff); - output[j+1] = (uint8_t)((input[i] >> 8) & 0xff); - output[j+2] = (uint8_t)((input[i] >> 16) & 0xff); - output[j+3] = (uint8_t)((input[i] >> 24) & 0xff); - } -} - -/* - * Decodes input (uint8_t) into output (uint32_t). Assumes len is - * a multiple of 4. - */ -void MD5::Decode(uint32_t *output, uint8_t *input, uint32_t len) { - uint32_t i, j; - - for(i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((uint32_t)input[j]) | - (((uint32_t)input[j+1]) << 8) | - (((uint32_t)input[j+2]) << 16) | - (((uint32_t)input[j+3]) << 24); -} - -/* - * Note: Replace "for loop" with standard memcpy if possible. - */ -void MD5::MD5_memcpy(POINTER output, POINTER input, uint32_t len) { - uint32_t i; - - for(i = 0; i < len; i++) - output[i] = input[i]; -} - -/* - * Note: Replace "for loop" with standard memset if possible. - */ -void MD5::MD5_memset(POINTER output, int32_t value, uint32_t len) { - uint32_t i; - for(i = 0; i < len; i++) - ((int8_t *)output)[i] = (int8_t)value; -} - -/* - * EOF - */ diff --git a/isis/src/lro/apps/lrowac2pds/md5wrapper.cpp b/isis/src/lro/apps/lrowac2pds/md5wrapper.cpp deleted file mode 100644 index 853920494a..0000000000 --- a/isis/src/lro/apps/lrowac2pds/md5wrapper.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - * This is part of my wrapper-class to create - * a MD5 Hash from a string and a file. - * - * This code is completly free, you - * can copy it, modify it, or do - * what ever you want with it. - * - * Feb. 2005 - * Benjamin Grüdelbach - */ - -//---------------------------------------------------------------------- -//basic includes -#include -#include - -//my includes -#include "md5wrapper.h" -#include "md5.h" - -//---------privates-------------------------- - -/* - * internal hash function, calling - * the basic methods from md5.h - */ -QString md5wrapper::hashit(QString text) { - MD5_CTX ctx; - - //init md5 - md5->MD5Init(&ctx); - //update with our string - md5->MD5Update(&ctx, - (unsigned char *)text.toLatin1().data(), - text.length()); - - //create the hash - unsigned char buff[16] = ""; - md5->MD5Final((unsigned char *)buff, &ctx); - - //converte the hash to a string and return it - return convToString(buff); -} - -/* - * converts the numeric hash to - * a valid QString. - * (based on Jim Howard's code; - * http://www.codeproject.com/cpp/cmd5.asp) - */ -QString md5wrapper::convToString(unsigned char *bytes) { - char asciihash[33]; - - int p = 0; - for(int i = 0; i < 16; i++) { - ::sprintf(&asciihash[p], "%02x", bytes[i]); - p += 2; - } - asciihash[32] = '\0'; - return QString(asciihash); -} - -//---------publics-------------------------- - -//constructor -md5wrapper::md5wrapper() { - md5 = new MD5(); -} - - -//destructor -md5wrapper::~md5wrapper() { - delete md5; -} - -/* - * creates a MD5 hash from - * "text" and returns it as - * string - */ -QString md5wrapper::getHashFromString(QString text) { - return this->hashit(text); -} - - -/* - * creates a MD5 hash from - * a file specified in "filename" and - * returns it as string - * (based on Ronald L. Rivest's code - * from RFC1321 "The MD5 Message-Digest Algorithm") - */ -QString md5wrapper::getHashFromFile(QString filename) { - FILE *file; - MD5_CTX context; - - int len; - unsigned char buffer[1024], digest[16]; - - //open file - if((file = fopen(filename.toLatin1().data(), "rb")) == NULL) { - return "-1"; - } - - //init md5 - md5->MD5Init(&context); - - //read the filecontent - while((len = fread(buffer, 1, 1024, file))) { - md5->MD5Update(&context, buffer, len); - } - - /* - generate hash, close the file and return the - hash as QString - */ - md5->MD5Final(digest, &context); - fclose(file); - return convToString(digest); -} - -/* - * EOF - */ diff --git a/isis/src/lro/apps/lrowac2pds/md5wrapper.h b/isis/src/lro/apps/lrowac2pds/md5wrapper.h deleted file mode 100644 index 82d8db8141..0000000000 --- a/isis/src/lro/apps/lrowac2pds/md5wrapper.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This is my wrapper-class to create - * a MD5 Hash from a string and a file. - * - * This code is completly free, you - * can copy it, modify it, or do - * what ever you want with it. - * - * Feb. 2005 - * Benjamin Grüdelbach - */ - -//include protection -#ifndef MD5WRAPPER_H -#define MD5WRAPPER_H - -//basic includes -#include - -//forwards -class MD5; - -/** - * @author 2005-02-?? Benjamin Grudelbach - * - * @internal - */ -class md5wrapper { - private: - MD5 *md5; - - /* - * internal hash function, calling - * the basic methods from md5.h - */ - QString hashit(QString text); - - /* - * converts the numeric giets to - * a valid QString - */ - QString convToString(unsigned char *bytes); - public: - //constructor - md5wrapper(); - - //destructor - ~md5wrapper(); - - /* - * creates a MD5 hash from - * "text" and returns it as - * string - */ - QString getHashFromString(QString text); - - /* - * creates a MD5 hash from - * a file specified in "filename" and - * returns it as string - */ - QString getHashFromFile(QString filename); -}; - - -//include protection -#endif - -/* - * EOF - */ diff --git a/isis/src/lro/apps/lrowaccal/lrowaccal.cpp b/isis/src/lro/apps/lrowaccal/main.cpp similarity index 100% rename from isis/src/lro/apps/lrowaccal/lrowaccal.cpp rename to isis/src/lro/apps/lrowaccal/main.cpp diff --git a/isis/src/lro/apps/lrowacpho/Exponential.cpp b/isis/src/lro/apps/lrowacpho/Exponential.cpp index 3e45d472fb..97c5a96320 100644 --- a/isis/src/lro/apps/lrowacpho/Exponential.cpp +++ b/isis/src/lro/apps/lrowacpho/Exponential.cpp @@ -60,12 +60,12 @@ namespace Isis { */ double Exponential::photometry ( double i, double e, double g, int band ) const { // Test for valid band - if ((band <= 0) || (band > (int) _bandpho.size())) { + if ((band <= 0) || (band > (int) m_bandpho.size())) { std::string mess = "Provided band " + IString(band) + " out of range."; throw IException(IException::Programmer, mess, _FILEINFO_); } - double ph = photometry(_bandpho[band - 1], i, e, g); - return (_bandpho[band - 1].phoStd / ph); + double ph = photometry(m_bandpho[band - 1], i, e, g); + return (m_bandpho[band - 1].phoStd / ph); } /** @@ -122,7 +122,7 @@ namespace Isis { * * @param pvl Output PVL container write keywords */ - void Exponential::Report ( PvlContainer &pvl ) { + void Exponential::report ( PvlContainer &pvl ) { pvl.addComment("I/F = mu0/(mu0+mu) * F(phase)"); pvl.addComment("where:"); pvl.addComment(" mu0 = cos(incidence)"); @@ -130,9 +130,9 @@ namespace Isis { pvl.addComment(" F(phase) = A0*exp(B0*phase) + A1*exp(B1*phase) + ... + An*exp(Bn*phase)"); pvl += PvlKeyword("Algorithm", "Exponential"); - pvl += PvlKeyword("IncRef", toString(_iRef), "degrees"); - pvl += PvlKeyword("EmaRef", toString(_eRef), "degrees"); - pvl += PvlKeyword("PhaRef", toString(_gRef), "degrees"); + pvl += PvlKeyword("IncRef", toString(m_iRef), "degrees"); + pvl += PvlKeyword("EmaRef", toString(m_eRef), "degrees"); + pvl += PvlKeyword("PhaRef", toString(m_gRef), "degrees"); PvlKeyword units("ExponentialUnits"); PvlKeyword phostd("PhotometricStandard"); PvlKeyword bbc("BandBinCenter"); @@ -141,13 +141,13 @@ namespace Isis { std::vector < PvlKeyword > aTermKeywords; std::vector < PvlKeyword > bTermKeywords; - for (unsigned int i = 0; i < _bandpho[0].aTerms.size(); i++) + for (unsigned int i = 0; i < m_bandpho[0].aTerms.size(); i++) aTermKeywords.push_back(PvlKeyword("A" + toString((int) i))); - for (unsigned int i = 0; i < _bandpho[0].bTerms.size(); i++) + for (unsigned int i = 0; i < m_bandpho[0].bTerms.size(); i++) bTermKeywords.push_back(PvlKeyword("B" + toString((int) i))); - for (unsigned int i = 0; i < _bandpho.size(); i++) { - Parameters &p = _bandpho[i]; + for (unsigned int i = 0; i < m_bandpho.size(); i++) { + Parameters &p = m_bandpho[i]; units.addValue(p.units); phostd.addValue(toString(p.phoStd)); bbc.addValue(toString(p.wavelength)); @@ -192,8 +192,8 @@ namespace Isis { * not found, a value of iProfile = -1 is returned. */ Exponential::Parameters Exponential::findParameters ( const double wavelength ) const { - for (unsigned int i = 0; i < _profiles.size(); i++) { - const DbProfile &p = _profiles[i]; + for (unsigned int i = 0; i < m_profiles.size(); i++) { + const DbProfile &p = m_profiles[i]; if (p.exists("BandBinCenter")) { double p_center = toDouble(ConfKey(p, "BandBinCenter", toString(Null))); double tolerance = toDouble(ConfKey(p, "BandBinCenterTolerance", toString(1.0E-6))); @@ -259,21 +259,21 @@ namespace Isis { void Exponential::init ( PvlObject &pvl, Cube &cube ) { // Make it reentrant - _profiles.clear(); - _bandpho.clear(); + m_profiles.clear(); + m_bandpho.clear(); // Interate over all Photometric groups - _normProf = DbProfile(pvl.findObject("NormalizationModel").findGroup("Algorithm", Pvl::Traverse)); - _iRef = toDouble(ConfKey(_normProf, "IncRef", toString(30.0))); - _eRef = toDouble(ConfKey(_normProf, "EmaRef", toString(0.0))); - _gRef = toDouble(ConfKey(_normProf, "PhaRef", toString(_iRef))); + m_normProf = DbProfile(pvl.findObject("NormalizationModel").findGroup("Algorithm", Pvl::Traverse)); + m_iRef = toDouble(ConfKey(m_normProf, "IncRef", toString(30.0))); + m_eRef = toDouble(ConfKey(m_normProf, "EmaRef", toString(0.0))); + m_gRef = toDouble(ConfKey(m_normProf, "PhaRef", toString(m_iRef))); PvlObject &phoObj = pvl.findObject("PhotometricModel"); DbProfile phoProf = DbProfile(phoObj); PvlObject::PvlGroupIterator algo = phoObj.beginGroup(); while (algo != phoObj.endGroup()) { if (algo->name().toLower() == "algorithm") { - _profiles.push_back(DbProfile(phoProf, DbProfile(*algo))); + m_profiles.push_back(DbProfile(phoProf, DbProfile(*algo))); } ++algo; } @@ -286,8 +286,8 @@ namespace Isis { if (parms.IsValid()) { parms.band = i + 1; //_camera->SetBand(i + 1); - parms.phoStd = photometry(parms, _iRef, _eRef, _gRef); - _bandpho.push_back(parms); + parms.phoStd = photometry(parms, m_iRef, m_eRef, m_gRef); + m_bandpho.push_back(parms); } else { // Appropriate photometric parameters not found ostringstream mess; @@ -308,5 +308,3 @@ namespace Isis { } } // namespace Isis - - diff --git a/isis/src/lro/apps/lrowacpho/Exponential.h b/isis/src/lro/apps/lrowacpho/Exponential.h index bc0e8d8923..95148f0a9d 100644 --- a/isis/src/lro/apps/lrowacpho/Exponential.h +++ b/isis/src/lro/apps/lrowacpho/Exponential.h @@ -63,7 +63,7 @@ namespace Isis { virtual ~Exponential () {} double photometry ( double i, double e, double g, int band = 1 ) const; - void Report ( PvlContainer &pvl ); + void report ( PvlContainer &pvl ); private: /** @@ -92,8 +92,8 @@ namespace Isis { int iProfile; // _profiles; - std::vector _bandpho; + std::vector m_profiles; + std::vector m_bandpho; void init(PvlObject &pvl, Cube &cube); @@ -107,4 +107,3 @@ namespace Isis { ; #endif - diff --git a/isis/src/lro/apps/lrowacpho/HapkeExponential.cpp b/isis/src/lro/apps/lrowacpho/HapkeExponential.cpp index a8d5973ec5..a44dc219fb 100644 --- a/isis/src/lro/apps/lrowacpho/HapkeExponential.cpp +++ b/isis/src/lro/apps/lrowacpho/HapkeExponential.cpp @@ -60,12 +60,12 @@ namespace Isis { */ double HapkeExponential::photometry ( double i, double e, double g, int band ) const { // Test for valid band - if ((band <= 0) || (band > (int) _bandpho.size())) { + if ((band <= 0) || (band > (int) m_bandpho.size())) { std::string mess = "Provided band " + IString(band) + " out of range."; throw IException(IException::Programmer, mess, _FILEINFO_); } - double ph = photometry(_bandpho[band - 1], i, e, g); - return (_bandpho[band - 1].phoStd / ph); + double ph = photometry(m_bandpho[band - 1], i, e, g); + return (m_bandpho[band - 1].phoStd / ph); } /** @@ -102,11 +102,11 @@ namespace Isis { double alpha = g; // Simple HapkeExponential photometric polynomial equation with exponential opposition - // surge term. + // surge term. -// I µ0 + µ -// _ * ______ = A1 exp(B1 phase) + A2 ( µ0 + µ )exp(B2 phase) + A3 ( µ0 + µ ) + A4 -// F µ0 + // I µ0 + µ + // _ * ______ = A1 exp(B1 phase) + A2 ( µ0 + µ )exp(B2 phase) + A3 ( µ0 + µ ) + A4 + // F µ0 double rcal = parms.aTerms[0]*exp(parms.bTerms[0] * alpha); @@ -127,7 +127,7 @@ namespace Isis { * * @param pvl Output PVL container write keywords */ - void HapkeExponential::Report ( PvlContainer &pvl ) { + void HapkeExponential::report ( PvlContainer &pvl ) { pvl.addComment("I/F = mu0/(mu0+mu) * F(mu,mu0,phase)"); pvl.addComment(" where:"); pvl.addComment(" mu0 = cos(incidence)"); @@ -135,9 +135,9 @@ namespace Isis { pvl.addComment(" F(mu,mu0,phase) = A1*exp(B1*phase) + A2*( mu0 + mu )exp(B2*phase) + A3*( mu0 + mu ) + A4"); pvl += PvlKeyword("Algorithm", "HapkeExponential"); - pvl += PvlKeyword("IncRef", toString(_iRef), "degrees"); - pvl += PvlKeyword("EmaRef", toString(_eRef), "degrees"); - pvl += PvlKeyword("PhaRef", toString(_gRef), "degrees"); + pvl += PvlKeyword("IncRef", toString(m_iRef), "degrees"); + pvl += PvlKeyword("EmaRef", toString(m_eRef), "degrees"); + pvl += PvlKeyword("PhaRef", toString(m_gRef), "degrees"); PvlKeyword units("HapkeExponentialUnits"); PvlKeyword phostd("PhotometricStandard"); PvlKeyword bbc("BandBinCenter"); @@ -146,13 +146,13 @@ namespace Isis { std::vector aTermKeywords; std::vector bTermKeywords; - for (unsigned int i = 0; i < _bandpho[0].aTerms.size(); i++) + for (unsigned int i = 0; i < m_bandpho[0].aTerms.size(); i++) aTermKeywords.push_back(PvlKeyword("A" + toString((int) i+1))); - for (unsigned int i = 0; i < _bandpho[0].bTerms.size(); i++) + for (unsigned int i = 0; i < m_bandpho[0].bTerms.size(); i++) bTermKeywords.push_back(PvlKeyword("B" + toString((int) i+1))); - for (unsigned int i = 0; i < _bandpho.size(); i++) { - Parameters &p = _bandpho[i]; + for (unsigned int i = 0; i < m_bandpho.size(); i++) { + Parameters &p = m_bandpho[i]; units.addValue(p.units); phostd.addValue(toString(p.phoStd)); bbc.addValue(toString(p.wavelength)); @@ -197,8 +197,8 @@ namespace Isis { * not found, a value of iProfile = -1 is returned. */ HapkeExponential::Parameters HapkeExponential::findParameters ( const double wavelength ) const { - for (unsigned int i = 0; i < _profiles.size(); i++) { - const DbProfile &p = _profiles[i]; + for (unsigned int i = 0; i < m_profiles.size(); i++) { + const DbProfile &p = m_profiles[i]; if (p.exists("BandBinCenter")) { double p_center = toDouble(ConfKey(p, "BandBinCenter", toString(Null))); double tolerance = toDouble(ConfKey(p, "BandBinCenterTolerance", toString(1.0E-6))); @@ -262,21 +262,21 @@ namespace Isis { */ void HapkeExponential::init ( PvlObject &pvl, Cube &cube ) { // Make it reentrant - _profiles.clear(); - _bandpho.clear(); + m_profiles.clear(); + m_bandpho.clear(); // Interate over all Photometric groups - _normProf = DbProfile(pvl.findObject("NormalizationModel").findGroup("Algorithm", Pvl::Traverse)); - _iRef = toDouble(ConfKey(_normProf, "IncRef", toString(30.0))); - _eRef = toDouble(ConfKey(_normProf, "EmaRef", toString(0.0))); - _gRef = toDouble(ConfKey(_normProf, "PhaRef", toString(_iRef))); + m_normProf = DbProfile(pvl.findObject("NormalizationModel").findGroup("Algorithm", Pvl::Traverse)); + m_iRef = toDouble(ConfKey(m_normProf, "IncRef", toString(30.0))); + m_eRef = toDouble(ConfKey(m_normProf, "EmaRef", toString(0.0))); + m_gRef = toDouble(ConfKey(m_normProf, "PhaRef", toString(m_iRef))); PvlObject &phoObj = pvl.findObject("PhotometricModel"); DbProfile phoProf = DbProfile(phoObj); PvlObject::PvlGroupIterator algo = phoObj.beginGroup(); while (algo != phoObj.endGroup()) { if (algo->name().toLower() == "algorithm") { - _profiles.push_back(DbProfile(phoProf, DbProfile(*algo))); + m_profiles.push_back(DbProfile(phoProf, DbProfile(*algo))); } ++algo; } @@ -289,8 +289,8 @@ namespace Isis { if (parms.IsValid()) { parms.band = i + 1; //_camera->SetBand(i + 1); - parms.phoStd = photometry(parms, _iRef, _eRef, _gRef); - _bandpho.push_back(parms); + parms.phoStd = photometry(parms, m_iRef, m_eRef, m_gRef); + m_bandpho.push_back(parms); } else { // Appropriate photometric parameters not found ostringstream mess; @@ -311,5 +311,3 @@ namespace Isis { } } // namespace Isis - - diff --git a/isis/src/lro/apps/lrowacpho/HapkeExponential.h b/isis/src/lro/apps/lrowacpho/HapkeExponential.h index 647695791f..6a9fe46942 100644 --- a/isis/src/lro/apps/lrowacpho/HapkeExponential.h +++ b/isis/src/lro/apps/lrowacpho/HapkeExponential.h @@ -62,7 +62,7 @@ namespace Isis { virtual ~HapkeExponential () {} double photometry ( double i, double e, double g, int band = 1 ) const; - void Report ( PvlContainer &pvl ); + void report ( PvlContainer &pvl ); private: /** @@ -91,8 +91,8 @@ namespace Isis { int iProfile; // _profiles; - std::vector _bandpho; + std::vector m_profiles; + std::vector m_bandpho; void init(PvlObject &pvl, Cube &cube); @@ -106,4 +106,3 @@ namespace Isis { ; #endif - diff --git a/isis/src/lro/apps/lrowacpho/Hillier.cpp b/isis/src/lro/apps/lrowacpho/Hillier.cpp index f6362c2226..0726d71328 100644 --- a/isis/src/lro/apps/lrowacpho/Hillier.cpp +++ b/isis/src/lro/apps/lrowacpho/Hillier.cpp @@ -59,12 +59,12 @@ namespace Isis { */ double Hillier::photometry ( double i, double e, double g, int band ) const { // Test for valid band - if ((band <= 0) || (band > (int) _bandpho.size())) { + if ((band <= 0) || (band > (int) m_bandpho.size())) { std::string mess = "Provided band " + IString(band) + " out of range."; throw IException(IException::Programmer, mess, _FILEINFO_); } - double ph = photometry(_bandpho[band - 1], i, e, g); - return (_bandpho[band - 1].phoStd / ph); + double ph = photometry(m_bandpho[band - 1], i, e, g); + return (m_bandpho[band - 1].phoStd / ph); } /** @@ -120,7 +120,7 @@ namespace Isis { * * @param pvl Output PVL container write keywords */ - void Hillier::Report ( PvlContainer &pvl ) { + void Hillier::report ( PvlContainer &pvl ) { pvl.addComment("I/F = mu0/(mu0+mu) * F(phase)"); pvl.addComment(" where:"); pvl.addComment(" mu0 = cos(incidence)"); @@ -128,9 +128,9 @@ namespace Isis { pvl.addComment(" F(phase) = B0*exp(-B1*phase) + A0 + A1*phase + A2*phase^2 + A3*phase^3 + A4*phase^4"); pvl += PvlKeyword("Algorithm", "Hillier"); - pvl += PvlKeyword("IncRef", toString(_iRef), "degrees"); - pvl += PvlKeyword("EmaRef", toString(_eRef), "degrees"); - pvl += PvlKeyword("PhaRef", toString(_gRef), "degrees"); + pvl += PvlKeyword("IncRef", toString(m_iRef), "degrees"); + pvl += PvlKeyword("EmaRef", toString(m_eRef), "degrees"); + pvl += PvlKeyword("PhaRef", toString(m_gRef), "degrees"); PvlKeyword units("HillierUnits"); PvlKeyword phostd("PhotometricStandard"); PvlKeyword bbc("BandBinCenter"); @@ -143,8 +143,8 @@ namespace Isis { PvlKeyword a2("A2"); PvlKeyword a3("A3"); PvlKeyword a4("A4"); - for (unsigned int i = 0; i < _bandpho.size(); i++) { - Parameters &p = _bandpho[i]; + for (unsigned int i = 0; i < m_bandpho.size(); i++) { + Parameters &p = m_bandpho[i]; units.addValue(p.units); phostd.addValue(toString(p.phoStd)); bbc.addValue(toString(p.wavelength)); @@ -193,8 +193,8 @@ namespace Isis { * not found, a value of iProfile = -1 is returned. */ Hillier::Parameters Hillier::findParameters ( const double wavelength ) const { - for (unsigned int i = 0; i < _profiles.size(); i++) { - const DbProfile &p = _profiles[i]; + for (unsigned int i = 0; i < m_profiles.size(); i++) { + const DbProfile &p = m_profiles[i]; if (p.exists("BandBinCenter")) { double p_center = toDouble(ConfKey(p, "BandBinCenter", toString(Null))); double tolerance = toDouble(ConfKey(p, "BandBinCenterTolerance", toString(1.0E-6))); @@ -258,21 +258,21 @@ namespace Isis { */ void Hillier::init ( PvlObject &pvl, Cube &cube ) { // Make it reentrant - _profiles.clear(); - _bandpho.clear(); + m_profiles.clear(); + m_bandpho.clear(); // Interate over all Photometric groups - _normProf = DbProfile(pvl.findObject("NormalizationModel").findGroup("Algorithm", Pvl::Traverse)); - _iRef = toDouble(ConfKey(_normProf, "IncRef", toString(30.0))); - _eRef = toDouble(ConfKey(_normProf, "EmaRef", toString(0.0))); - _gRef = toDouble(ConfKey(_normProf, "PhaRef", toString(_iRef))); + m_normProf = DbProfile(pvl.findObject("NormalizationModel").findGroup("Algorithm", Pvl::Traverse)); + m_iRef = toDouble(ConfKey(m_normProf, "IncRef", toString(30.0))); + m_eRef = toDouble(ConfKey(m_normProf, "EmaRef", toString(0.0))); + m_gRef = toDouble(ConfKey(m_normProf, "PhaRef", toString(m_iRef))); PvlObject &phoObj = pvl.findObject("PhotometricModel"); DbProfile phoProf = DbProfile(phoObj); PvlObject::PvlGroupIterator algo = phoObj.beginGroup(); while (algo != phoObj.endGroup()) { if (algo->name().toLower() == "algorithm") { - _profiles.push_back(DbProfile(phoProf, DbProfile(*algo))); + m_profiles.push_back(DbProfile(phoProf, DbProfile(*algo))); } ++algo; } @@ -285,8 +285,8 @@ namespace Isis { if (parms.IsValid()) { parms.band = i + 1; //_camera->SetBand(i + 1); - parms.phoStd = photometry(parms, _iRef, _eRef, _gRef); - _bandpho.push_back(parms); + parms.phoStd = photometry(parms, m_iRef, m_eRef, m_gRef); + m_bandpho.push_back(parms); } else { // Appropriate photometric parameters not found ostringstream mess; @@ -307,5 +307,3 @@ namespace Isis { } } // namespace Isis - - diff --git a/isis/src/lro/apps/lrowacpho/Hillier.h b/isis/src/lro/apps/lrowacpho/Hillier.h index 7b29482b21..fde0bdb18e 100644 --- a/isis/src/lro/apps/lrowacpho/Hillier.h +++ b/isis/src/lro/apps/lrowacpho/Hillier.h @@ -61,7 +61,7 @@ namespace Isis { virtual ~Hillier() {}; double photometry(double i, double e, double g, int band = 1) const; - void Report(PvlContainer &pvl); + void report(PvlContainer &pvl); private: /** @@ -86,8 +86,8 @@ namespace Isis { int iProfile; // _profiles; - std::vector _bandpho; + std::vector m_profiles; + std::vector m_bandpho; void init(PvlObject &pvl, Cube &cube); @@ -100,4 +100,3 @@ namespace Isis { }; #endif - diff --git a/isis/src/lro/apps/lrowacpho/PhotometricFunction.cpp b/isis/src/lro/apps/lrowacpho/PhotometricFunction.cpp deleted file mode 100644 index 7aad51fce8..0000000000 --- a/isis/src/lro/apps/lrowacpho/PhotometricFunction.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/** - * @file - * $Revision$ - * $Date$ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "Angle.h" -#include "Camera.h" -#include "DbProfile.h" -#include "PhotometricFunction.h" -#include "PvlObject.h" - -using namespace std; - -namespace Isis { - - /** - * @brief Construct from PVL and Cube file - * - * @author Kris Becker - 2/21/2010 - * - * @param pvl Photometric parameter files - * @param cube Input cube file - */ - PhotometricFunction::PhotometricFunction ( PvlObject &pvl, Cube &cube , bool useCamera) { - if (useCamera) - _camera = cube.camera(); - } - /** - * @brief Compute photometric DN at given line/sample/band - * - * This routine applies the photometric angles to the equation - * and returns the calibration coefficient at the given cube - * location. - * - * The return parameter is the photometric standard/photometric - * correction coefficient at the given pixel location. - * - * @author Kris Becker - 2/21/2010 - * - * @param line Line of cube image to compute photometry - * @param sample Sample of cube image to compute photometry - * @param band Band of cube image to compute photometry - * - * @return double Photometric correction at cube loation - */ - double PhotometricFunction::Compute ( const double &line, const double &sample, int band, bool useDem) { - // Update band if necessary - if (_camera->Band() != band) { - _camera->SetBand(band); - } - if (!_camera->SetImage(sample, line)) - return (Null); - - // calculate photometric angles - double i = _camera->IncidenceAngle(); - double e = _camera->EmissionAngle(); - double g = _camera->PhaseAngle(); - bool success = true; - - if (useDem) { - Angle phase, incidence, emission; - _camera->LocalPhotometricAngles(phase, incidence, emission, success); - if (success) { - g = phase.degrees(); - i = incidence.degrees(); - e = emission.degrees(); - } - } - - if ( !success || i < MinimumIncidenceAngle() || i > MaximumIncidenceAngle() || e < MinimumEmissionAngle() || e - > MaximumEmissionAngle() || g < MinimumPhaseAngle() || g > MaximumPhaseAngle()) - return (Null); - - - return photometry(i, e, g, band); - } - -} // namespace Isis - - diff --git a/isis/src/lro/apps/lrowacpho/PhotometricFunction.h b/isis/src/lro/apps/lrowacpho/PhotometricFunction.h deleted file mode 100644 index 43b8f6d37d..0000000000 --- a/isis/src/lro/apps/lrowacpho/PhotometricFunction.h +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef PhotometricFunction_h -#define PhotometricFunction_h -/** - * @file - * $Revision$ - * $Date$ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include "IString.h" -#include "Camera.h" -#include "DbProfile.h" -#include "SpecialPixel.h" - -#include -#include -#include - -namespace Isis { - - /** Implement templatized MIN fumnction */ - template inline T MIN ( const T &A, const T &B ) { - if (A < B) { - return (A); - } - else { - return (B); - } - } - - /** Implement templatized MAX function */ - template inline T MAX ( const T &A, const T &B ) { - if (A > B) { - return (A); - } - else { - return (B); - } - } - - class PvlObject; - class Camera; - - /** - * @brief An implementation of the PhotometricFunction photometric function - * - * This class implements the PhotometricFunction-Buratti-Hill photometric - * equation as outline in thier paper "Multispectral Photometry - * of the Moon and Absolute Calibration of the Clementine UV/VIS - * Camera", published in Icaris v141, pg. 205-255 (1999). - * - * @author 2010-02-15 Kris Becker - * - * @internal - */ - class PhotometricFunction { - public: - /** - * @brief Create Hilier photometric object - * - */ - PhotometricFunction ( PvlObject &pvl, Cube &cube, bool useCamera); - - //! Destructor - virtual ~PhotometricFunction () { - } - ; - - void setCamera ( Camera *cam ) { - _camera = cam; - } - - static QString AlgorithmName ( const PvlObject &pvl ) { - return pvl.findObject("PhotometricModel").findGroup("Algorithm", Pvl::Traverse).findKeyword("Name")[0]; - } - - virtual double Compute ( const double &line, const double &sample, int band = 1, bool useDem = false); - virtual double photometry ( double i, double e, double g, int band = 1 ) const = 0; - virtual void Report ( PvlContainer &pvl ) = 0; - - void SetMinimumIncidenceAngle (double angle) { - p_minimumIncidenceAngle = angle; - } - void SetMaximumIncidenceAngle (double angle) { - p_maximumIncidenceAngle = angle; - } - void SetMinimumEmissionAngle (double angle) { - p_minimumEmissionAngle = angle; - } - void SetMaximumEmissionAngle (double angle) { - p_maximumEmissionAngle = angle; - } - void SetMinimumPhaseAngle (double angle) { - p_minimumPhaseAngle = angle; - } - void SetMaximumPhaseAngle (double angle) { - p_maximumPhaseAngle = angle; - } - - double MinimumIncidenceAngle () { - return p_minimumIncidenceAngle; - } - double MaximumIncidenceAngle () { - return p_maximumIncidenceAngle; - } - double MinimumEmissionAngle () { - return p_minimumEmissionAngle; - } - double MaximumEmissionAngle () { - return p_maximumEmissionAngle; - } - double MinimumPhaseAngle () { - return p_minimumPhaseAngle; - } - double MaximumPhaseAngle () { - return p_maximumPhaseAngle; - } - - protected: - - Camera *_camera; - double _iRef; //!< Incidence refernce angle - double _eRef; // Emission reference angle - double _gRef; // Phase reference angle - - double p_minimumIncidenceAngle; - double p_maximumIncidenceAngle; - double p_minimumEmissionAngle; - double p_maximumEmissionAngle; - double p_minimumPhaseAngle; - double p_maximumPhaseAngle; - - DbProfile _normProf; - - /** - * @brief Helper method to initialize parameters - * - * This method will check the existance of a keyword and extract the value - * if it exists to the passed parameter (type). If it doesn't exist, the - * default values is returned. - * - * @param T Templated variable type - * @param conf Parameter profile container - * @param keyname Name of keyword to get a value from - * @param defval Default value it keyword/value doesn't exist - * @param index Optional index of the value for keyword arrays - * - * @return T Return type - */ - template - T ConfKey ( const DbProfile &conf, const QString &keyname, const T &defval, int index = 0 ) const { - if (!conf.exists(keyname)) { - return (defval); - } - if (conf.count(keyname) < index) { - return (defval); - } - return conf.value(keyname, index); - } - - }; - -} -; - -#endif - diff --git a/isis/src/lro/apps/lrowacpho/lrowacpho.cpp b/isis/src/lro/apps/lrowacpho/main.cpp similarity index 87% rename from isis/src/lro/apps/lrowacpho/lrowacpho.cpp rename to isis/src/lro/apps/lrowacpho/main.cpp index ed9de39085..ac853d6056 100644 --- a/isis/src/lro/apps/lrowacpho/lrowacpho.cpp +++ b/isis/src/lro/apps/lrowacpho/main.cpp @@ -29,13 +29,13 @@ void IsisMain () { // We will be processing by line ProcessByLine p; - // Set up the input cube and get camera information + // set up the input cube and get camera information Cube *icube = p.SetInputCube("FROM"); // Create the output cube Cube *ocube = p.SetOutputCube("TO"); - // Set up the user interface + // set up the user interface UserInterface &ui = Application::GetUserInterface(); bool useBackplane = false; @@ -67,7 +67,7 @@ void IsisMain () { // Get the name of the parameter file Pvl par(ui.GetFileName("PHOPAR")); - IString algoName = PhotometricFunction::AlgorithmName(par); + IString algoName = PhotometricFunction::algorithmName(par); algoName.UpCase(); if (algoName == "HILLIER") { @@ -86,12 +86,12 @@ void IsisMain () { throw IException(IException::User, msg, _FILEINFO_); } - pho->SetMinimumPhaseAngle(ui.GetDouble("MINPHASE")); - pho->SetMaximumPhaseAngle(ui.GetDouble("MAXPHASE")); - pho->SetMinimumEmissionAngle(ui.GetDouble("MINEMISSION")); - pho->SetMaximumEmissionAngle(ui.GetDouble("MAXEMISSION")); - pho->SetMinimumIncidenceAngle(ui.GetDouble("MININCIDENCE")); - pho->SetMaximumIncidenceAngle(ui.GetDouble("MAXINCIDENCE")); + pho->setMinimumPhaseAngle(ui.GetDouble("MINPHASE")); + pho->setMaximumPhaseAngle(ui.GetDouble("MAXPHASE")); + pho->setMinimumEmissionAngle(ui.GetDouble("MINEMISSION")); + pho->setMaximumEmissionAngle(ui.GetDouble("MAXEMISSION")); + pho->setMinimumIncidenceAngle(ui.GetDouble("MININCIDENCE")); + pho->setMaximumIncidenceAngle(ui.GetDouble("MAXINCIDENCE")); // determine how photometric angles should be calculated useDem = ui.GetBoolean("USEDEM"); @@ -103,7 +103,7 @@ void IsisMain () { p.StartProcess(phoCal); PvlGroup photo("Photometry"); - pho->Report(photo); + pho->report(photo); ocube->putGroup(photo); Application::Log(photo); p.EndProcess(); @@ -129,7 +129,7 @@ void phoCal ( Buffer &in, Buffer &out ) { } else { // Get correction and test for validity - double ph = pho->Compute(in.Line(i), in.Sample(i), in.Band(i), useDem); + double ph = pho->compute(in.Line(i), in.Sample(i), in.Band(i), useDem); out[i] = (IsSpecial(ph) ? Null : in[i] * ph); } } diff --git a/isis/src/lro/apps/mrf2isis/mrf2isis.cpp b/isis/src/lro/apps/mrf2isis/main.cpp similarity index 100% rename from isis/src/lro/apps/mrf2isis/mrf2isis.cpp rename to isis/src/lro/apps/mrf2isis/main.cpp diff --git a/isis/src/lro/apps/mrf2pds/mrf2pds.cpp b/isis/src/lro/apps/mrf2pds/main.cpp similarity index 100% rename from isis/src/lro/apps/mrf2pds/mrf2pds.cpp rename to isis/src/lro/apps/mrf2pds/main.cpp diff --git a/isis/src/lro/apps/lronacpho/PhotometricFunction.cpp b/isis/src/lro/objs/PhotometricFunction/PhotometricFunction.cpp similarity index 99% rename from isis/src/lro/apps/lronacpho/PhotometricFunction.cpp rename to isis/src/lro/objs/PhotometricFunction/PhotometricFunction.cpp index 136211010d..87cdd9e97e 100644 --- a/isis/src/lro/apps/lronacpho/PhotometricFunction.cpp +++ b/isis/src/lro/objs/PhotometricFunction/PhotometricFunction.cpp @@ -13,7 +13,7 @@ using namespace std; namespace Isis { /** * Construct Photometric function from Pvl and Cube file - * + * * @param pvl photometric parameter files * @param cube Input cube file * @@ -38,7 +38,7 @@ namespace Isis { /** * Set the camera used to compute photometric angles. - * + * * @param cam A pointer to the camera to be used */ void PhotometricFunction::setCamera(Camera *cam) { @@ -48,9 +48,9 @@ namespace Isis { /** * Finds the name of the algorithm defined in a PVL object. - * + * * @param pvl The pvl to find the algorithm name in. - * + * * @return @b QString The algorithm name from the PVL object. */ QString PhotometricFunction::algorithmName( const PvlObject &pvl ) { @@ -60,12 +60,12 @@ namespace Isis { /** * Computes Photometric function from cube attributes - * + * * @param line line number in cube * @param sample sample number in cube * @param band band number in cube * @param useDem boolean to use provided Dem - * + * * @return @b double photometry calculations * * @author 2016-08-15 Victor Silva @@ -207,7 +207,7 @@ namespace Isis { /** * Accessor method to access minimum incidence angle - * + * * @return @b double The minimum incidence angle * * @author 2016-08-15 Victor Silva @@ -223,7 +223,7 @@ namespace Isis { /** * Accessor method to access maximum incidence angle - * + * * @return @b double The maximum incidence angle * * @author 2016-08-15 Victor Silva @@ -239,7 +239,7 @@ namespace Isis { /** * Accessor method to access minimum emission angle - * + * * @return @b double The minimum emission angle * * @author 2016-08-15 Victor Silva @@ -255,7 +255,7 @@ namespace Isis { /** * Accessor method to access maximum emission angle - * + * * @return @b double The maximum emission angle * * @author 2016-08-15 Victor Silva @@ -271,7 +271,7 @@ namespace Isis { /** * Accessor method to access minimum phase angle - * + * * @return @b double The minimum phase angle * * @author 2016-08-15 Victor Silva @@ -287,7 +287,7 @@ namespace Isis { /** * Accessor method to access maximum phase angle - * + * * @return @b double The maximum phase angle * * @author 2016-08-15 Victor Silva diff --git a/isis/src/lro/apps/lronacpho/PhotometricFunction.h b/isis/src/lro/objs/PhotometricFunction/PhotometricFunction.h similarity index 100% rename from isis/src/lro/apps/lronacpho/PhotometricFunction.h rename to isis/src/lro/objs/PhotometricFunction/PhotometricFunction.h diff --git a/isis/src/mariner/apps/mar102isis/mar102isis.cpp b/isis/src/mariner/apps/mar102isis/main.cpp similarity index 100% rename from isis/src/mariner/apps/mar102isis/mar102isis.cpp rename to isis/src/mariner/apps/mar102isis/main.cpp diff --git a/isis/src/mariner/apps/mar10cal/mar10cal.cpp b/isis/src/mariner/apps/mar10cal/main.cpp similarity index 100% rename from isis/src/mariner/apps/mar10cal/mar10cal.cpp rename to isis/src/mariner/apps/mar10cal/main.cpp diff --git a/isis/src/mariner/apps/mar10clean/mar10clean.cpp b/isis/src/mariner/apps/mar10clean/main.cpp similarity index 100% rename from isis/src/mariner/apps/mar10clean/mar10clean.cpp rename to isis/src/mariner/apps/mar10clean/main.cpp diff --git a/isis/src/mariner/apps/mar10nonoise/mar10nonoise.cpp b/isis/src/mariner/apps/mar10nonoise/main.cpp similarity index 100% rename from isis/src/mariner/apps/mar10nonoise/mar10nonoise.cpp rename to isis/src/mariner/apps/mar10nonoise/main.cpp diff --git a/isis/src/mariner/apps/mar10restore/mar10restore.cpp b/isis/src/mariner/apps/mar10restore/main.cpp similarity index 100% rename from isis/src/mariner/apps/mar10restore/mar10restore.cpp rename to isis/src/mariner/apps/mar10restore/main.cpp diff --git a/isis/src/mer/apps/mer2isis/mer2isis.cpp b/isis/src/mer/apps/mer2isis/main.cpp similarity index 100% rename from isis/src/mer/apps/mer2isis/mer2isis.cpp rename to isis/src/mer/apps/mer2isis/main.cpp diff --git a/isis/src/mer/apps/mical/mical.cpp b/isis/src/mer/apps/mical/main.cpp similarity index 100% rename from isis/src/mer/apps/mical/mical.cpp rename to isis/src/mer/apps/mical/main.cpp diff --git a/isis/src/messenger/apps/mdis2isis/mdis2isis.cpp b/isis/src/messenger/apps/mdis2isis/main.cpp similarity index 100% rename from isis/src/messenger/apps/mdis2isis/mdis2isis.cpp rename to isis/src/messenger/apps/mdis2isis/main.cpp diff --git a/isis/src/messenger/apps/mdis2pds/mdis2pds.cpp b/isis/src/messenger/apps/mdis2pds/main.cpp similarity index 100% rename from isis/src/messenger/apps/mdis2pds/mdis2pds.cpp rename to isis/src/messenger/apps/mdis2pds/main.cpp diff --git a/isis/src/messenger/apps/mdiscal/mdiscal.cpp b/isis/src/messenger/apps/mdiscal/main.cpp similarity index 100% rename from isis/src/messenger/apps/mdiscal/mdiscal.cpp rename to isis/src/messenger/apps/mdiscal/main.cpp diff --git a/isis/src/messenger/apps/mdisddr/mdisddr.cpp b/isis/src/messenger/apps/mdisddr/main.cpp similarity index 100% rename from isis/src/messenger/apps/mdisddr/mdisddr.cpp rename to isis/src/messenger/apps/mdisddr/main.cpp diff --git a/isis/src/messenger/apps/mdisedrinfo/mdisedrinfo.cpp b/isis/src/messenger/apps/mdisedrinfo/main.cpp similarity index 100% rename from isis/src/messenger/apps/mdisedrinfo/mdisedrinfo.cpp rename to isis/src/messenger/apps/mdisedrinfo/main.cpp diff --git a/isis/src/messenger/apps/mdisproc/mdisproc.cpp b/isis/src/messenger/apps/mdisproc/main.cpp similarity index 100% rename from isis/src/messenger/apps/mdisproc/mdisproc.cpp rename to isis/src/messenger/apps/mdisproc/main.cpp diff --git a/isis/src/mex/apps/hrsc2isis/hrsc2isis.cpp b/isis/src/mex/apps/hrsc2isis/main.cpp similarity index 100% rename from isis/src/mex/apps/hrsc2isis/hrsc2isis.cpp rename to isis/src/mex/apps/hrsc2isis/main.cpp diff --git a/isis/src/mgs/apps/moc2isis/moc2isis.cpp b/isis/src/mgs/apps/moc2isis/main.cpp similarity index 100% rename from isis/src/mgs/apps/moc2isis/moc2isis.cpp rename to isis/src/mgs/apps/moc2isis/main.cpp diff --git a/isis/src/mgs/apps/moccal/moccal.cpp b/isis/src/mgs/apps/moccal/main.cpp similarity index 100% rename from isis/src/mgs/apps/moccal/moccal.cpp rename to isis/src/mgs/apps/moccal/main.cpp diff --git a/isis/src/mgs/apps/mocevenodd/mocevenodd.cpp b/isis/src/mgs/apps/mocevenodd/main.cpp similarity index 100% rename from isis/src/mgs/apps/mocevenodd/mocevenodd.cpp rename to isis/src/mgs/apps/mocevenodd/main.cpp diff --git a/isis/src/mgs/apps/mocgap/mocgap.cpp b/isis/src/mgs/apps/mocgap/main.cpp similarity index 100% rename from isis/src/mgs/apps/mocgap/mocgap.cpp rename to isis/src/mgs/apps/mocgap/main.cpp diff --git a/isis/src/mgs/apps/mocnoise50/mocnoise50.cpp b/isis/src/mgs/apps/mocnoise50/main.cpp similarity index 100% rename from isis/src/mgs/apps/mocnoise50/mocnoise50.cpp rename to isis/src/mgs/apps/mocnoise50/main.cpp diff --git a/isis/src/mgs/apps/mocproc/mocproc.cpp b/isis/src/mgs/apps/mocproc/main.cpp similarity index 100% rename from isis/src/mgs/apps/mocproc/mocproc.cpp rename to isis/src/mgs/apps/mocproc/main.cpp diff --git a/isis/src/mgs/apps/mocuncompress/getdecode.cpp b/isis/src/mgs/apps/mocuncompress/getdecode.cpp deleted file mode 100644 index d0d3233852..0000000000 --- a/isis/src/mgs/apps/mocuncompress/getdecode.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* -NOTICE - -The software accompanying this notice (the "Software") is provided to you -free of charge to facilitate your use of the data collected by the Mars -Orbiter Camera (the "MOC Data"). Malin Space Science Systems ("MSSS") -grants to you (either as an individual or entity) a personal, -non-transferable, and non-exclusive right (i) to use and reproduce the -Software solely for the purpose of accessing the MOC Data; (ii) to modify -the source code of the Software as necessary to maintain or adapt the -Software to run on alternate computer platforms; and (iii) to compile, use -and reproduce the modified versions of the Software solely for the purpose -of accessing the MOC Data. In addition, you may distribute the Software, -including any modifications thereof, solely for use with the MOC Data, -provided that (i) you must include this notice with all copies of the -Software to be distributed; (ii) you may not remove or alter any -proprietary notices contained in the Software; (iii) you may not charge any -third party for the Software; and (iv) you will not export the Software -without the appropriate United States and foreign government licenses. - -You acknowledge that no title to the intellectual property in the Software -is transferred to you. You further acknowledge that title and full -ownership rights to the Software will remain the exclusive property of MSSS -or its suppliers, and you will not acquire any rights to the Software -except as expressly set forth above. The Software is provided to you AS -IS. MSSS MAKES NO WARRANTY, EXPRESS OR IMPLIED, WITH RESPECT TO THE -SOFTWARE, AND SPECIFICALLY DISCLAIMS THE IMPLIED WARRANTIES OF -NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR -LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO SUCH LIMITATIONS OR -EXCLUSIONS MAY NOT APPLY TO YOU. - -Your use or reproduction of the Software constitutes your agreement to the -terms of this Notice. If you do not agree with the terms of this notice, -promptly return or destroy all copies of the Software in your possession. - -Copyright (C) 1999 Malin Space Science Systems. All Rights Reserved. -*/ -//static char *sccsid = "@(#)getdecode.c 1.1 10/04/99"; - -/* - Huffman code tree module - Mike Caplinger, MOC GDS Design Scientist - SCCS @(#)getdecode.c 1.1 11/19/91 - - This module manages the Ligocki-style Huffman decoding trees for - the predictive decompressor. It is a little roundabout in that - it builds a Huffman code tree in node form from the flight software - encoding tables and then "tablefies" it; that way, separate decoding - tables don't have to be maintained. One can also just load an - existing decode file in (for testing.) - - This will probably all go away if the clean canonical decompressor - is ever written. -*/ - -#include -#include - -#include "fs.h" - -#define DEFINE_CODE_TABLES -#include "fs.h" -#include "predcode.h" - -typedef struct ht_node { - int value; - struct ht_node *zero, *one; -} Huffman_node; - -/* in TJL terminology, left is 0 and right is 1. */ -extern uint8 code[], left[], right[]; - -void decodeLoad(char *decodefile) -{ - unsigned int decodeSize; - FILE *fd; - - if((fd = fopen(decodefile, "r")) == NULL) { - (void)fprintf(stderr, "Unable to open '%s' for reading\n", - decodefile); - exit(1); - } - - if(fread((char *)(&decodeSize), sizeof(decodeSize), 1, fd) != 1) { - fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); - exit(1); - } - - if(fread(code, sizeof(code[0]), decodeSize, fd) != decodeSize) { - fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); - exit(1); - } - - if(fread(left, sizeof(left[0]), decodeSize, fd) != decodeSize) { - fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); - exit(1); - } - - if(fread(right, sizeof(right[0]), decodeSize, fd) != decodeSize) { - fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); - exit(1); - } - - (void)fclose(fd); -} - -Huffman_node *ht_insert(Huffman_node *root, int value, int code, int len) -{ - int bit; - Huffman_node **branch; - - if(!root) { - root = (Huffman_node *) malloc(sizeof(Huffman_node)); - root->value = 0; - root->zero = root->one = NULL; - } - - if(len == 0) { - root->value = value; - } - else { - bit = code & 0x1; - if(bit == 0) branch = &root->zero; - else branch = &root->one; - - if(*branch == 0) { - *branch = (Huffman_node *) malloc(sizeof(Huffman_node)); - (*branch)->value = 0; - (*branch)->zero = 0; - (*branch)->one = 0; - } - ht_insert(*branch, value, code >> 1, len - 1); - } - return root; -} - -int ht_lookup(Huffman_node *root, int code, int len) -{ - int bit; - - if(root->zero == 0 && root->one == 0) return root->value; - bit = code & 1; - if(bit == 0) return ht_lookup(root->zero, code >> 1, len - 1); - else return ht_lookup(root->one, code >> 1, len - 1); -} - -void ht_dump(Huffman_node *root, int code, int len) -{ - if(root->zero == 0 && root->one == 0) { - printf("%d %x(%d)\n", root->value, code, len); - } - else { - if(root->zero) { - ht_dump(root->zero, code, len + 1); - } - if(root->one) { - ht_dump(root->one, code | (1 << len), len + 1); - } - } -} - -#define ZERO (1<<0) -#define ONE (1<<1) - -/* - Convert a Huffman tree to TJL table form. Call initially - with index = 0. -*/ -int ht_tablefy(Huffman_node *root, unsigned char *flags, unsigned char *zero, unsigned char *one, unsigned char *index) -{ - int local_index = (int)(long)(index); - - if(root->zero) { - if(root->zero->zero == 0 && root->zero->one == 0) { - flags[(int)(long)index] &= ~ZERO; - zero[(int)(long)index] = root->zero->value; - } - else { - flags[local_index] |= ZERO; - index += 1; - zero[local_index] = (char)(long)index; - index = (unsigned char*)(long)ht_tablefy(root->zero, flags, zero, one, index); - } - } - if(root->one) { - if(root->one->zero == 0 && root->one->one == 0) { - flags[local_index] &= ~ONE; - one[local_index] = root->one->value; - } - else { - flags[local_index] |= ONE; - index += 1; - one[local_index] = (char)(long)index; - index = (unsigned char*)(long)ht_tablefy(root->one, flags, zero, one, index); - } - } - return (int)(long)index; -} - -Huffman_node *ht_tree_gen(int i) -{ - Huffman_node *tree = 0; - uint16 *code; - uint8 *len; - uint8 *requant; - - code = CodeBitsVec[i]; - len = CodeLenVec[i]; - requant = CodeRequantVec[i]; - - tree = ht_insert(tree, requant[0], code[0], len[0]); - - for(i = 1; i < 128; i++) { - if(requant[i] != requant[i-1]) - tree = ht_insert(tree, requant[i], code[i], len[i]); - } - - tree = ht_insert(tree, requant[255], code[255], len[255]); - - for(i = 254; i >= 128; i--) { - if(requant[i] != requant[i+1]) - tree = ht_insert(tree, requant[i], code[i], len[i]); - } - return tree; -} - -void ht_free(Huffman_node *root) -{ - if(root->zero) ht_free(root->zero); - if(root->one) ht_free(root->one); - free(root); -} - -void decodeInit(int n) { - Huffman_node *tree = 0; -// uint8 flags[256], zero[256], one[256]; - - tree = ht_tree_gen(n); - /* i is the # of slots actually used... */ - ht_tablefy(tree, code, left, right, 0); - ht_free(tree); -} diff --git a/isis/src/mgs/apps/mocuncompress/readmocisis.cpp b/isis/src/mgs/apps/mocuncompress/main.cpp similarity index 67% rename from isis/src/mgs/apps/mocuncompress/readmocisis.cpp rename to isis/src/mgs/apps/mocuncompress/main.cpp index 65d8503eae..3bbb0eef15 100644 --- a/isis/src/mgs/apps/mocuncompress/readmocisis.cpp +++ b/isis/src/mgs/apps/mocuncompress/main.cpp @@ -31,7 +31,7 @@ string. ================================================== 2018-OCT-19 Kaitlyn Lee - US Geological Survey -Removed the register keyword because it is deprecated in C++17. +Removed the register keyword because it is deprecated in C++17. ================================================== @@ -87,10 +87,30 @@ Copyright (C) 1999 Malin Space Science Systems. All Rights Reserved. #include #include #include +#include + #include "image_io.h" #include "array.h" #include "msdp.h" #include "fs.h" +#include "predCompCommon.h" +#include "bitsOut.h" + +#include "predictiveDecompressor.h" + +#define DEFINE_CODE_TABLES + +#include "predcode.h" + + +typedef struct ht_node { + int value; + struct ht_node *zero, *one; +} Huffman_node; + +/* in TJL terminology, left is 0 and right is 1. */ +extern uint8 code[], left[], right[]; + extern FILE *write_header(int width, int height, FILE *infile, char *outfname); @@ -128,6 +148,303 @@ enum MocCompressEnum { RAW = 0, PRED, XFORM } MocCompress = RAW; + + +extern void exit(); + +#define BUFFERSIZE 4096 + +/* Huffman tree (in table form) */ +uint8 code[256]; +uint8 left[256]; +uint8 right[256]; + +int pred_past_eof; + + + +void decodeLoad(char *decodefile) +{ + unsigned int decodeSize; + FILE *fd; + + if((fd = fopen(decodefile, "r")) == NULL) { + (void)fprintf(stderr, "Unable to open '%s' for reading\n", + decodefile); + exit(1); + } + + if(fread((char *)(&decodeSize), sizeof(decodeSize), 1, fd) != 1) { + fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); + exit(1); + } + + if(fread(code, sizeof(code[0]), decodeSize, fd) != decodeSize) { + fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); + exit(1); + } + + if(fread(left, sizeof(left[0]), decodeSize, fd) != decodeSize) { + fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); + exit(1); + } + + if(fread(right, sizeof(right[0]), decodeSize, fd) != decodeSize) { + fprintf(stderr, "Unable to read decode file, '%s'\n", decodefile); + exit(1); + } + + (void)fclose(fd); +} + +Huffman_node *ht_insert(Huffman_node *root, int value, int code, int len) +{ + int bit; + Huffman_node **branch; + + if(!root) { + root = (Huffman_node *) malloc(sizeof(Huffman_node)); + root->value = 0; + root->zero = root->one = NULL; + } + + if(len == 0) { + root->value = value; + } + else { + bit = code & 0x1; + if(bit == 0) branch = &root->zero; + else branch = &root->one; + + if(*branch == 0) { + *branch = (Huffman_node *) malloc(sizeof(Huffman_node)); + (*branch)->value = 0; + (*branch)->zero = 0; + (*branch)->one = 0; + } + ht_insert(*branch, value, code >> 1, len - 1); + } + return root; +} + +int ht_lookup(Huffman_node *root, int code, int len) +{ + int bit; + + if(root->zero == 0 && root->one == 0) return root->value; + bit = code & 1; + if(bit == 0) return ht_lookup(root->zero, code >> 1, len - 1); + else return ht_lookup(root->one, code >> 1, len - 1); +} + +void ht_dump(Huffman_node *root, int code, int len) +{ + if(root->zero == 0 && root->one == 0) { + printf("%d %x(%d)\n", root->value, code, len); + } + else { + if(root->zero) { + ht_dump(root->zero, code, len + 1); + } + if(root->one) { + ht_dump(root->one, code | (1 << len), len + 1); + } + } +} + +#define ZERO (1<<0) +#define ONE (1<<1) + +/* + Convert a Huffman tree to TJL table form. Call initially + with index = 0. +*/ +int ht_tablefy(Huffman_node *root, unsigned char *flags, unsigned char *zero, unsigned char *one, unsigned char *index) +{ + int local_index = (int)(long)(index); + + if(root->zero) { + if(root->zero->zero == 0 && root->zero->one == 0) { + flags[(int)(long)index] &= ~ZERO; + zero[(int)(long)index] = root->zero->value; + } + else { + flags[local_index] |= ZERO; + index += 1; + zero[local_index] = (char)(long)index; + index = (unsigned char*)(long)ht_tablefy(root->zero, flags, zero, one, index); + } + } + if(root->one) { + if(root->one->zero == 0 && root->one->one == 0) { + flags[local_index] &= ~ONE; + one[local_index] = root->one->value; + } + else { + flags[local_index] |= ONE; + index += 1; + one[local_index] = (char)(long)index; + index = (unsigned char*)(long)ht_tablefy(root->one, flags, zero, one, index); + } + } + return (int)(long)index; +} + +Huffman_node *ht_tree_gen(int i) +{ + Huffman_node *tree = 0; + uint16 *code; + uint8 *len; + uint8 *requant; + + code = CodeBitsVec[i]; + len = CodeLenVec[i]; + requant = CodeRequantVec[i]; + + tree = ht_insert(tree, requant[0], code[0], len[0]); + + for(i = 1; i < 128; i++) { + if(requant[i] != requant[i-1]) + tree = ht_insert(tree, requant[i], code[i], len[i]); + } + + tree = ht_insert(tree, requant[255], code[255], len[255]); + + for(i = 254; i >= 128; i--) { + if(requant[i] != requant[i+1]) + tree = ht_insert(tree, requant[i], code[i], len[i]); + } + return tree; +} + +void ht_free(Huffman_node *root) +{ + if(root->zero) ht_free(root->zero); + if(root->one) ht_free(root->one); + free(root); +} + +void decodeInit(int n) { + Huffman_node *tree = 0; +// uint8 flags[256], zero[256], one[256]; + + tree = ht_tree_gen(n); + /* i is the # of slots actually used... */ + ht_tablefy(tree, code, left, right, 0); + ht_free(tree); +} + + +/* + NOTE: the globals code, left, and right should be set up prior + to calling this routine. +*/ +uint8 *predictive_decomp_main(uint8 *data, int len, int height, int width, + uint8 doSync, uint16 sync, int xpred, int ypred, int *got_height) +{ + uint8 *curLine; /* Current line */ + uint8 *prevLine; /* Previous line */ + BITSTRUCT bitStuff; /* Output bit stream structure */ + uint8 compType = 0; /* Type of compression */ + //uint32 decodeSize; /* Size of huffman tables */ + uint32 y; /* Looping variable */ + //uint32 index; /* Indexing variable */ + uint8 *result; + uint8 *lastsync; + uint16 gotsync; + extern int errors; + extern uint8 *findsync(uint8 * p, int len, uint16 sync); + + + pred_past_eof = 0; + + /* Allocate space for decompression */ + if((prevLine = (uint8 *)malloc(width * sizeof(*prevLine))) == NULL) { + (void)fprintf(stderr, "Unable to get enough memory for line buffers\n"); + exit(1); + }; + + for(y = 0; y < (unsigned)width; y++) { + prevLine[y] = 0; + }; + + if((curLine = (uint8 *)malloc(width * sizeof(*curLine))) == NULL) { + (void)fprintf(stderr, "Unable to get enough memory for line buffers\n"); + exit(1); + }; + + if((result = (uint8 *) malloc(height * width)) == NULL) { + fprintf(stderr, "can't get memory for output image\n"); + exit(1); + } + + if(xpred) compType |= XPRED; + if(ypred) compType |= YPRED; + + bitStuff.output = data; + bitStuff.bitQueue = *(bitStuff.output); + bitStuff.bitCount = 0; + + lastsync = data; + + for(y = 0; y < (unsigned)height; y++) { + if((y % 128 == 0) && (doSync == 1)) { + if(bitStuff.bitCount != 0) { + bitStuff.bitCount = 0; + bitStuff.output++; + }; + if(((bitStuff.output - data) & 0x1) == 0x1) { + bitStuff.output++; + }; + bitStuff.bitQueue = *(bitStuff.output); + /* check sync pattern: + NOTE this is kind of a funny place to do this, + but it's simplest to do it here due to the + structure of the code. mc, 11/11/98 */ + gotsync = *(bitStuff.output) | (*(bitStuff.output + 1) << 8); + if(gotsync != sync) { + fprintf(stderr, "lost sync, line %d -- ", y); + errors += 1; +#define AUTOSYNC +#ifdef AUTOSYNC + if(!(lastsync = (uint8 *)findsync(lastsync, + len - (lastsync - data), sync))) { +#else + if(1) { +#endif + *got_height = y; + if(bitStuff.output - data > len) { + // we tried to read beyond the end of the data. + pred_past_eof = 1; + } + fprintf(stderr, "aborting\n"); + return result; + } + else { + bitStuff.output = lastsync; + } + } + else { + lastsync = bitStuff.output; + } + + predictiveDecompressor(curLine, prevLine, width, compType | SYNC, code, left, right, sync, &bitStuff); + } + else { + predictiveDecompressor(curLine, prevLine, width, compType, code, left, right, sync, &bitStuff); + }; + + memmove(result + y * width, curLine, width); + }; + + // Free the temporary storage + free((char *)prevLine); + free((char *)curLine); + + *got_height = height; + return result; +} + int main(int argc, char **argv) { int height = 0, width = 0; @@ -250,7 +567,7 @@ int main(int argc, char **argv) fprintf(stderr, "Encountered error while tring to read MSDP " "checksum\n"); } - + if(!CS8EACC2(chunk, datlen + sizeof(h) + 1)) { if(verbose) fprintf(stderr, "Error: bad MSDP checksum\n"); status |= STAT_BADCS; @@ -304,8 +621,7 @@ byte *decode(struct msdp_header h, byte *data, int datlen, int *len, int mbr) int height, width; unsigned int xcomp, pcomp, spacing = 0, levels = 0; uint8 *transform_decomp_main(uint8 *data, int len, int height, int width, uint32 transform, uint32 spacing, uint32 numLevels); - uint8 *predictive_decomp_main(uint8 *data, int len, int height, int width, - uint8 doSync, uint16 sync, int xpred, int ypred, int *got_height); + byte *image = 0; static Array *tbuf; static int init_decode; diff --git a/isis/src/mgs/apps/mocuncompress/pmain.cpp b/isis/src/mgs/apps/mocuncompress/pmain.cpp deleted file mode 100644 index 0baa1c7ad5..0000000000 --- a/isis/src/mgs/apps/mocuncompress/pmain.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* -NOTICE - -The software accompanying this notice (the "Software") is provided to you -free of charge to facilitate your use of the data collected by the Mars -Orbiter Camera (the "MOC Data"). Malin Space Science Systems ("MSSS") -grants to you (either as an individual or entity) a personal, -non-transferable, and non-exclusive right (i) to use and reproduce the -Software solely for the purpose of accessing the MOC Data; (ii) to modify -the source code of the Software as necessary to maintain or adapt the -Software to run on alternate computer platforms; and (iii) to compile, use -and reproduce the modified versions of the Software solely for the purpose -of accessing the MOC Data. In addition, you may distribute the Software, -including any modifications thereof, solely for use with the MOC Data, -provided that (i) you must include this notice with all copies of the -Software to be distributed; (ii) you may not remove or alter any -proprietary notices contained in the Software; (iii) you may not charge any -third party for the Software; and (iv) you will not export the Software -without the appropriate United States and foreign government licenses. - -You acknowledge that no title to the intellectual property in the Software -is transferred to you. You further acknowledge that title and full -ownership rights to the Software will remain the exclusive property of MSSS -or its suppliers, and you will not acquire any rights to the Software -except as expressly set forth above. The Software is provided to you AS -IS. MSSS MAKES NO WARRANTY, EXPRESS OR IMPLIED, WITH RESPECT TO THE -SOFTWARE, AND SPECIFICALLY DISCLAIMS THE IMPLIED WARRANTIES OF -NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR -LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO SUCH LIMITATIONS OR -EXCLUSIONS MAY NOT APPLY TO YOU. - -Your use or reproduction of the Software constitutes your agreement to the -terms of this Notice. If you do not agree with the terms of this notice, -promptly return or destroy all copies of the Software in your possession. - -Copyright (C) 1999 Malin Space Science Systems. All Rights Reserved. -*/ -//static char *sccsid = "@(#)pmain.c 1.2 03/30/00"; - -/* -* DESCRIPTION -* -* COMMENTARY -*/ - -#include -#include -#include -#include - -#include "fs.h" -#include "predCompCommon.h" -#include "bitsOut.h" - -#include "predictiveDecompressor.h" - -extern void exit(); - -#define BUFFERSIZE 4096 - -/* Huffman tree (in table form) */ -uint8 code[256]; -uint8 left[256]; -uint8 right[256]; - -int pred_past_eof; - -/* - NOTE: the globals code, left, and right should be set up prior - to calling this routine. -*/ -uint8 *predictive_decomp_main(uint8 *data, int len, int height, int width, - uint8 doSync, uint16 sync, int xpred, int ypred, int *got_height) -{ - uint8 *curLine; /* Current line */ - uint8 *prevLine; /* Previous line */ - BITSTRUCT bitStuff; /* Output bit stream structure */ - uint8 compType = 0; /* Type of compression */ - //uint32 decodeSize; /* Size of huffman tables */ - uint32 y; /* Looping variable */ - //uint32 index; /* Indexing variable */ - uint8 *result; - uint8 *lastsync; - uint16 gotsync; - extern int errors; - extern uint8 *findsync(uint8 * p, int len, uint16 sync); - - - pred_past_eof = 0; - - /* Allocate space for decompression */ - if((prevLine = (uint8 *)malloc(width * sizeof(*prevLine))) == NULL) { - (void)fprintf(stderr, "Unable to get enough memory for line buffers\n"); - exit(1); - }; - - for(y = 0; y < (unsigned)width; y++) { - prevLine[y] = 0; - }; - - if((curLine = (uint8 *)malloc(width * sizeof(*curLine))) == NULL) { - (void)fprintf(stderr, "Unable to get enough memory for line buffers\n"); - exit(1); - }; - - if((result = (uint8 *) malloc(height * width)) == NULL) { - fprintf(stderr, "can't get memory for output image\n"); - exit(1); - } - - if(xpred) compType |= XPRED; - if(ypred) compType |= YPRED; - - bitStuff.output = data; - bitStuff.bitQueue = *(bitStuff.output); - bitStuff.bitCount = 0; - - lastsync = data; - - for(y = 0; y < (unsigned)height; y++) { - if((y % 128 == 0) && (doSync == 1)) { - if(bitStuff.bitCount != 0) { - bitStuff.bitCount = 0; - bitStuff.output++; - }; - if(((bitStuff.output - data) & 0x1) == 0x1) { - bitStuff.output++; - }; - bitStuff.bitQueue = *(bitStuff.output); - /* check sync pattern: - NOTE this is kind of a funny place to do this, - but it's simplest to do it here due to the - structure of the code. mc, 11/11/98 */ - gotsync = *(bitStuff.output) | (*(bitStuff.output + 1) << 8); - if(gotsync != sync) { - fprintf(stderr, "lost sync, line %d -- ", y); - errors += 1; -#define AUTOSYNC -#ifdef AUTOSYNC - if(!(lastsync = (uint8 *)findsync(lastsync, - len - (lastsync - data), sync))) { -#else - if(1) { -#endif - *got_height = y; - if(bitStuff.output - data > len) { - // we tried to read beyond the end of the data. - pred_past_eof = 1; - } - fprintf(stderr, "aborting\n"); - return result; - } - else { - bitStuff.output = lastsync; - } - } - else { - lastsync = bitStuff.output; - } - - predictiveDecompressor(curLine, prevLine, width, compType | SYNC, code, left, right, sync, &bitStuff); - } - else { - predictiveDecompressor(curLine, prevLine, width, compType, code, left, right, sync, &bitStuff); - }; - - memmove(result + y * width, curLine, width); - }; - - // Free the temporary storage - free((char *)prevLine); - free((char *)curLine); - - *got_height = height; - return result; -} diff --git a/isis/src/mro/apps/crism2isis/crism2isis.cpp b/isis/src/mro/apps/crism2isis/main.cpp similarity index 100% rename from isis/src/mro/apps/crism2isis/crism2isis.cpp rename to isis/src/mro/apps/crism2isis/main.cpp diff --git a/isis/src/mro/apps/ctxcal/ctxcal.cpp b/isis/src/mro/apps/ctxcal/main.cpp similarity index 100% rename from isis/src/mro/apps/ctxcal/ctxcal.cpp rename to isis/src/mro/apps/ctxcal/main.cpp diff --git a/isis/src/mro/apps/ctxevenodd/ctxevenodd.cpp b/isis/src/mro/apps/ctxevenodd/main.cpp similarity index 100% rename from isis/src/mro/apps/ctxevenodd/ctxevenodd.cpp rename to isis/src/mro/apps/ctxevenodd/main.cpp diff --git a/isis/src/mro/apps/hi2isis/hiAncillary.cpp b/isis/src/mro/apps/hi2isis/hiAncillary.cpp index 7a32740111..e69de29bb2 100644 --- a/isis/src/mro/apps/hi2isis/hiAncillary.cpp +++ b/isis/src/mro/apps/hi2isis/hiAncillary.cpp @@ -1,90 +0,0 @@ -#include "ProcessImportPds.h" - -#include "TableRecord.h" -#include "Table.h" - -using namespace std; -using namespace Isis; - -extern int gapCount[6]; -extern int suspectGapCount[6]; -extern int invalidCount[6]; -extern int lisCount[6]; -extern int hisCount[6]; -extern int validCount[6]; -extern int section; - -// Construct a BLOb to contain the Hirise main line suffix and prefix data -void SaveHiriseAncillaryData(ProcessImportPds &process, Cube *ocube) { - - vector ConvertCalibrationPixels(int samples, - Isis::PixelType pixelType, - unsigned char * data); - - - // Setup a Table to hold the main image prefix/suffix data - TableField gap("GapFlag", TableField::Integer); - TableField line("LineNumber", TableField::Integer); - TableField buffer("BufferPixels", TableField::Integer, 12); - TableField dark("DarkPixels", TableField::Integer, 16); - - TableRecord rec; - rec += gap; - rec += line; - rec += buffer; - rec += dark; - - Table table("HiRISE Ancillary", rec); - table.SetAssociation(Table::Lines); - - // Loop through all the prefix and suffix data and construct the table records - // In the case of HiRISE there is only one band so the outside vector - // only contains one entry. The inside vector contains nl entries. - vector > pre = process.DataPrefix(); - vector > suf = process.DataSuffix(); - vector prefix = pre.at(0); - vector suffix = suf.at(0); - - Progress progress; - progress.SetText("Saving ancillary data"); - progress.SetMaximumSteps(prefix.size()); - progress.CheckStatus(); - - for(unsigned int l = 0; l < prefix.size(); l++) { - - unsigned char *linePrefix = (unsigned char *)(prefix[l]); - - // Pull out the gap byte (in byte 0) - rec[0] = (int)(linePrefix[0]); - - // Pull out the line number (bytes 3-5 3=MSB, 5=LSB) - int lineCounter = 0; - lineCounter += ((int)(linePrefix[3])) << 16; - lineCounter += ((int)(linePrefix[4])) << 8; - lineCounter += ((int)(linePrefix[5])); - rec[1] = lineCounter; - - // Pull the 12 buffer pixels (same type as image data) - // from the image prefix area - linePrefix += 6; - section = 3; - rec[2] = ConvertCalibrationPixels(12, process.PixelType(), linePrefix); - linePrefix += 12 * SizeOf(process.PixelType()); - - // Pull the 16 dark pixels (same type as image data) - // from the image suffix area - unsigned char *lineSuffix = (unsigned char *)(suffix[l]); - section = 5; - rec[3] = ConvertCalibrationPixels(16, process.PixelType(), lineSuffix); - lineSuffix += 16 * SizeOf(process.PixelType()); - - // Add this record to the table - table += rec; - - // Report the progress - progress.CheckStatus(); - } - - // Add the table to the output cube - ocube->write(table); -} diff --git a/isis/src/mro/apps/hi2isis/hiCalibration.cpp b/isis/src/mro/apps/hi2isis/hiCalibration.cpp index 35f6480cf8..e69de29bb2 100644 --- a/isis/src/mro/apps/hi2isis/hiCalibration.cpp +++ b/isis/src/mro/apps/hi2isis/hiCalibration.cpp @@ -1,159 +0,0 @@ -#include - -#include "ProcessImportPds.h" - -#include "Buffer.h" -#include "Table.h" - -using namespace std; -using namespace Isis; - -extern int gapCount[6]; -extern int suspectGapCount[6]; -extern int invalidCount[6]; -extern int lisCount[6]; -extern int hisCount[6]; -extern int validCount[6]; -extern int section; - - -// Construct two BLOBs one to hold the Hirise calibration line prefix/suffix data -// and the other to hold the calibration image line -void SaveHiriseCalibrationData(ProcessImportPds &process, Cube *ocube, - Pvl &pdsLabel) { - - vector ConvertCalibrationPixels(int samples, - Isis::PixelType pixelType, - unsigned char * data); - - // Create the Table to hold the prefix/suffix data - TableField gap("GapFlag", TableField::Integer); - TableField line("LineNumber", TableField::Integer); - TableField buffer("BufferPixels", TableField::Integer, 12); - TableField dark("DarkPixels", TableField::Integer, 16); - - TableRecord calAncillaryRecord; - calAncillaryRecord += gap; - calAncillaryRecord += line; - calAncillaryRecord += buffer; - calAncillaryRecord += dark; - - Table calAncillaryTable("HiRISE Calibration Ancillary", calAncillaryRecord); - - // Create the Table to hold the calibration lines - TableField image("Calibration", TableField::Integer, ocube->sampleCount()); - - TableRecord calImageRecord; - calImageRecord += image; - - Table calImageTable("HiRISE Calibration Image", calImageRecord); - - - // Find the beginning of the calibration data - unsigned char *header = (unsigned char *)process.FileHeader(); - header += (int)pdsLabel["^CALIBRATION_LINE_PREFIX_TABLE"] - 1; - - // Get the number of lines in the calibration area. This includes the - // calibration, mask and ramp lines - int calsize = (int)(pdsLabel.findObject("CALIBRATION_IMAGE")["LINES"]); - - // Loop through the calibration lines and extract the info needed for the - // tables. - for(unsigned int l = 0; l < (unsigned int)calsize; l++) { - - // Pull out the gap byte (in byte 0) - calAncillaryRecord[0] = (int)(*header++); - - // Skip the sync patterns and channel number (bytes 1 and 2) - header++; - header++; - - // Pull out the line number (bytes 3-5 3=MSB, 5=LSB) - int lineCounter = 0; - lineCounter += (int)(*header++) << 16; - lineCounter += (int)(*header++) << 8; - lineCounter += (int)(*header++); - calAncillaryRecord[1] = lineCounter; - - // Pull the 12 buffer pixels (same type as image data) - section = 0; - calAncillaryRecord[2] = ConvertCalibrationPixels(12, process.PixelType(), - header); - header += 12 * SizeOf(process.PixelType()); - - // Don't add this record to the table yet. It still needs the dark pixels. - - // Pull the calibration pixels out (same type as image data) - section = 1; - calImageRecord[0] = ConvertCalibrationPixels(ocube->sampleCount(), - process.PixelType(), header); - header += ocube->sampleCount() * SizeOf(process.PixelType()); - calImageTable += calImageRecord; - - - // Pull the 16 dark pixels (same type as image data) - section = 2; - calAncillaryRecord[3] = ConvertCalibrationPixels(16, process.PixelType(), - header); - header += 16 * SizeOf(process.PixelType()); - - // Add this record to the table - calAncillaryTable += calAncillaryRecord; - } - - // Add the tables to the output cube - ocube->write(calAncillaryTable); - ocube->write(calImageTable); -} - - - -vector ConvertCalibrationPixels(int samples, - Isis::PixelType pixelType, - unsigned char *data) { - void FixDns8(Buffer & buf); - void FixDns16(Buffer & buf); - - - // Pull the calibration pixels out (same type as image data) - // The buffer is always 16-bit because FixDn8/16 both expect a 16-bit - // buffer, but are looking for original data ranges and specific values - Isis::Buffer pixelBuf(samples, 1, 1, Isis::SignedWord); - - for(int b = 0; b < samples; b++) { - short int pixel = 0; - int shift = 8 * (SizeOf(pixelType) - 1); - for(int byte = 0; byte < SizeOf(pixelType); byte++) { - pixel += ((unsigned int)(*data++)) << shift; - shift -= 8; - } - - ((short int *)pixelBuf.RawBuffer())[b] = pixel; - - pixelBuf[b] = pixel; - } - - // Convert gaps, HiRISE special pixels... to 16 bit - if(pixelType == Isis::UnsignedByte) { - FixDns8(pixelBuf); - } - else { - FixDns16(pixelBuf); - } - - // Move the calibration pixels from the buffer to a vector - vector calibrationPixels; - double pixel; - for(int b = 0; b < samples; b++) { - pixel = pixelBuf[b]; - if(pixel == NULL8) calibrationPixels.push_back(NULL2); - else if(pixel == LOW_REPR_SAT8) calibrationPixels.push_back(LOW_REPR_SAT2); - else if(pixel == LOW_INSTR_SAT8) calibrationPixels.push_back(LOW_INSTR_SAT2); - else if(pixel == HIGH_INSTR_SAT8) calibrationPixels.push_back(HIGH_INSTR_SAT2); - else if(pixel == HIGH_REPR_SAT8) calibrationPixels.push_back(HIGH_REPR_SAT2); - else calibrationPixels.push_back((int)(pixel + 0.5)); - } - - return calibrationPixels; -} - diff --git a/isis/src/mro/apps/hi2isis/hi2isis.cpp b/isis/src/mro/apps/hi2isis/main.cpp similarity index 63% rename from isis/src/mro/apps/hi2isis/hi2isis.cpp rename to isis/src/mro/apps/hi2isis/main.cpp index 6f4ada565c..36ae453fc9 100644 --- a/isis/src/mro/apps/hi2isis/hi2isis.cpp +++ b/isis/src/mro/apps/hi2isis/main.cpp @@ -2,10 +2,14 @@ #include #include +#include #include "ProcessImportPds.h" #include "ProcessByLine.h" +#include "TableRecord.h" +#include "Buffer.h" +#include "Table.h" #include "UserInterface.h" #include "FileName.h" #include "IException.h" @@ -20,9 +24,6 @@ using namespace std; using namespace Isis; -// Global variables for processing functions -Stretch stretch; - // The input raw EDR contains 6 sections. The following counts keep track // of the types of pixels found in each section. The order of sections // is the order they arae encountered within the raw EDR. (i.e., calibration @@ -36,6 +37,228 @@ int hisCount[6]; int validCount[6]; int section; + +// Construct a BLOb to contain the Hirise main line suffix and prefix data +void SaveHiriseAncillaryData(ProcessImportPds &process, Cube *ocube) { + + vector ConvertCalibrationPixels(int samples, + Isis::PixelType pixelType, + unsigned char * data); + + + // Setup a Table to hold the main image prefix/suffix data + TableField gap("GapFlag", TableField::Integer); + TableField line("LineNumber", TableField::Integer); + TableField buffer("BufferPixels", TableField::Integer, 12); + TableField dark("DarkPixels", TableField::Integer, 16); + + TableRecord rec; + rec += gap; + rec += line; + rec += buffer; + rec += dark; + + Table table("HiRISE Ancillary", rec); + table.SetAssociation(Table::Lines); + + // Loop through all the prefix and suffix data and construct the table records + // In the case of HiRISE there is only one band so the outside vector + // only contains one entry. The inside vector contains nl entries. + vector > pre = process.DataPrefix(); + vector > suf = process.DataSuffix(); + vector prefix = pre.at(0); + vector suffix = suf.at(0); + + Progress progress; + progress.SetText("Saving ancillary data"); + progress.SetMaximumSteps(prefix.size()); + progress.CheckStatus(); + + for(unsigned int l = 0; l < prefix.size(); l++) { + + unsigned char *linePrefix = (unsigned char *)(prefix[l]); + + // Pull out the gap byte (in byte 0) + rec[0] = (int)(linePrefix[0]); + + // Pull out the line number (bytes 3-5 3=MSB, 5=LSB) + int lineCounter = 0; + lineCounter += ((int)(linePrefix[3])) << 16; + lineCounter += ((int)(linePrefix[4])) << 8; + lineCounter += ((int)(linePrefix[5])); + rec[1] = lineCounter; + + // Pull the 12 buffer pixels (same type as image data) + // from the image prefix area + linePrefix += 6; + section = 3; + rec[2] = ConvertCalibrationPixels(12, process.PixelType(), linePrefix); + linePrefix += 12 * SizeOf(process.PixelType()); + + // Pull the 16 dark pixels (same type as image data) + // from the image suffix area + unsigned char *lineSuffix = (unsigned char *)(suffix[l]); + section = 5; + rec[3] = ConvertCalibrationPixels(16, process.PixelType(), lineSuffix); + lineSuffix += 16 * SizeOf(process.PixelType()); + + // Add this record to the table + table += rec; + + // Report the progress + progress.CheckStatus(); + } + + // Add the table to the output cube + ocube->write(table); +} + + +// Construct two BLOBs one to hold the Hirise calibration line prefix/suffix data +// and the other to hold the calibration image line +void SaveHiriseCalibrationData(ProcessImportPds &process, Cube *ocube, + Pvl &pdsLabel) { + + vector ConvertCalibrationPixels(int samples, + Isis::PixelType pixelType, + unsigned char * data); + + // Create the Table to hold the prefix/suffix data + TableField gap("GapFlag", TableField::Integer); + TableField line("LineNumber", TableField::Integer); + TableField buffer("BufferPixels", TableField::Integer, 12); + TableField dark("DarkPixels", TableField::Integer, 16); + + TableRecord calAncillaryRecord; + calAncillaryRecord += gap; + calAncillaryRecord += line; + calAncillaryRecord += buffer; + calAncillaryRecord += dark; + + Table calAncillaryTable("HiRISE Calibration Ancillary", calAncillaryRecord); + + // Create the Table to hold the calibration lines + TableField image("Calibration", TableField::Integer, ocube->sampleCount()); + + TableRecord calImageRecord; + calImageRecord += image; + + Table calImageTable("HiRISE Calibration Image", calImageRecord); + + + // Find the beginning of the calibration data + unsigned char *header = (unsigned char *)process.FileHeader(); + header += (int)pdsLabel["^CALIBRATION_LINE_PREFIX_TABLE"] - 1; + + // Get the number of lines in the calibration area. This includes the + // calibration, mask and ramp lines + int calsize = (int)(pdsLabel.findObject("CALIBRATION_IMAGE")["LINES"]); + + // Loop through the calibration lines and extract the info needed for the + // tables. + for(unsigned int l = 0; l < (unsigned int)calsize; l++) { + + // Pull out the gap byte (in byte 0) + calAncillaryRecord[0] = (int)(*header++); + + // Skip the sync patterns and channel number (bytes 1 and 2) + header++; + header++; + + // Pull out the line number (bytes 3-5 3=MSB, 5=LSB) + int lineCounter = 0; + lineCounter += (int)(*header++) << 16; + lineCounter += (int)(*header++) << 8; + lineCounter += (int)(*header++); + calAncillaryRecord[1] = lineCounter; + + // Pull the 12 buffer pixels (same type as image data) + section = 0; + calAncillaryRecord[2] = ConvertCalibrationPixels(12, process.PixelType(), + header); + header += 12 * SizeOf(process.PixelType()); + + // Don't add this record to the table yet. It still needs the dark pixels. + + // Pull the calibration pixels out (same type as image data) + section = 1; + calImageRecord[0] = ConvertCalibrationPixels(ocube->sampleCount(), + process.PixelType(), header); + header += ocube->sampleCount() * SizeOf(process.PixelType()); + calImageTable += calImageRecord; + + + // Pull the 16 dark pixels (same type as image data) + section = 2; + calAncillaryRecord[3] = ConvertCalibrationPixels(16, process.PixelType(), + header); + header += 16 * SizeOf(process.PixelType()); + + // Add this record to the table + calAncillaryTable += calAncillaryRecord; + } + + // Add the tables to the output cube + ocube->write(calAncillaryTable); + ocube->write(calImageTable); +} + + + +vector ConvertCalibrationPixels(int samples, + Isis::PixelType pixelType, + unsigned char *data) { + void FixDns8(Buffer & buf); + void FixDns16(Buffer & buf); + + + // Pull the calibration pixels out (same type as image data) + // The buffer is always 16-bit because FixDn8/16 both expect a 16-bit + // buffer, but are looking for original data ranges and specific values + Isis::Buffer pixelBuf(samples, 1, 1, Isis::SignedWord); + + for(int b = 0; b < samples; b++) { + short int pixel = 0; + int shift = 8 * (SizeOf(pixelType) - 1); + for(int byte = 0; byte < SizeOf(pixelType); byte++) { + pixel += ((unsigned int)(*data++)) << shift; + shift -= 8; + } + + ((short int *)pixelBuf.RawBuffer())[b] = pixel; + + pixelBuf[b] = pixel; + } + + // Convert gaps, HiRISE special pixels... to 16 bit + if(pixelType == Isis::UnsignedByte) { + FixDns8(pixelBuf); + } + else { + FixDns16(pixelBuf); + } + + // Move the calibration pixels from the buffer to a vector + vector calibrationPixels; + double pixel; + for(int b = 0; b < samples; b++) { + pixel = pixelBuf[b]; + if(pixel == NULL8) calibrationPixels.push_back(NULL2); + else if(pixel == LOW_REPR_SAT8) calibrationPixels.push_back(LOW_REPR_SAT2); + else if(pixel == LOW_INSTR_SAT8) calibrationPixels.push_back(LOW_INSTR_SAT2); + else if(pixel == HIGH_INSTR_SAT8) calibrationPixels.push_back(HIGH_INSTR_SAT2); + else if(pixel == HIGH_REPR_SAT8) calibrationPixels.push_back(HIGH_REPR_SAT2); + else calibrationPixels.push_back((int)(pixel + 0.5)); + } + + return calibrationPixels; +} + + + +// Global variables for processing functions +Stretch stretch; + bool lsbGap; @@ -52,8 +275,6 @@ void IsisMain() { } void TranslateHiriseEdrLabels(FileName & labelFile, Cube *); - void SaveHiriseCalibrationData(ProcessImportPds & process, Cube *, - Pvl & pdsLabel); void SaveHiriseAncillaryData(ProcessImportPds & process, Cube *); void FixDns8(Buffer & buf); void FixDns16(Buffer & buf); diff --git a/isis/src/mro/apps/hical/GainChannelNormalize.h b/isis/src/mro/apps/hical/GainChannelNormalize.h deleted file mode 100644 index 1e08c32bac..0000000000 --- a/isis/src/mro/apps/hical/GainChannelNormalize.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef GainChannelNormalize_h -#define GainChannelNormalize_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: GainChannelNormalize.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" - -#include "IException.h" - -namespace Isis { - - /** - * @brief Computes a gain correction for each sample GainChannelNormalize - * - * This class computes the HiRISE gain component correction for each sample. - * - * @ingroup Utility - * - * @author 2010-04-19 Kris Becker - * @internal - */ - class GainChannelNormalize : public Module { - - public: - // Constructors and Destructor - GainChannelNormalize() : Module("GainChannelNormalize"), - _normalizer(0.0) { } - GainChannelNormalize(const HiCalConf &conf) : - Module("GainChannelNormalize"), _normalizer(0.0) { - init(conf); - } - - /** Destructor */ - virtual ~GainChannelNormalize() { } - - private: - double _normalizer; - - void init(const HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - - double bin = ToDouble(prof("Summing")); - double tdi = ToDouble(prof("Tdi")); - _normalizer = 128.0 / tdi / (bin*bin); - _history.add("ModeNormalizer["+ToString(_normalizer)+"]"); - - HiVector z = loadCsv("Gains", conf, prof, 0); - int nsamps = ToInteger(prof("Samples")); - _data = HiVector(nsamps); - // Support a single value being read or equal to the number of samples - if ( z.dim() == 1 ) { - _data = z[0]; - } - else if ( z.dim() == nsamps) { - _data = z; - } - else { - std::ostringstream mess; - mess << "Expected 1 or " << nsamps << " values from CSV file " - << getcsvFile() << " but got " << z.dim() << " instead!"; - throw IException(IException::User, mess.str(), _FILEINFO_); - } - - // Apply the factor to the data - for ( int i = 0 ; i < _data.dim() ; i++ ) { _data[i] *= _normalizer; } - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/GainFlatField.h b/isis/src/mro/apps/hical/GainFlatField.h deleted file mode 100644 index b85b753a9b..0000000000 --- a/isis/src/mro/apps/hical/GainFlatField.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef GainFlatField_h -#define GainFlatField_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: GainFlatField.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" -#include "Statistics.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief GainFlatField Module - Computes flat field correction for sample - * - * This class computes the HiRISE flat field correction component using the A - * matrix. - * - * @ingroup Utility - * - * @author 2008-03-04 Kris Becker - * - * @internal - * @history 2009-09-14 Kris Becker Removed temperature components and placed - * them in the GainTemperature module. - * @history 2010-04-16 Kris Becker Modified to used the standardized CSV - * reader for the A matrix. - */ - class GainFlatField : public Module { - - public: - // Constructors and Destructor - GainFlatField() : Module("GainFlatField") { } - GainFlatField(const HiCalConf &conf) : Module("GainFlatField") { - init(conf); - } - - /** Destructor */ - virtual ~GainFlatField() { } - - /** - * @brief Return statistics A matrix corection - * - * @return const Statistics& Statistics class with all stats - */ - const Statistics &Stats() const { return (_stats); } - - private: - QString _amatrix; - Statistics _stats; // Stats Results - - void init(const HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - int nsamps = ToInteger(prof("Samples")); - - // Get parameters from A-Matrix coefficients file - _data = loadCsv("Flats", conf, prof, nsamps); - _stats.Reset(); - for ( int i = 0 ; i < _data.dim() ; i++ ) { - _stats.AddData(_data[i]); - } - - _history.add("Statistics(Average["+ToString(_stats.Average())+ - "],StdDev["+ToString(_stats.StandardDeviation())+"])"); - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/GainLineDrift.h b/isis/src/mro/apps/hical/GainLineDrift.h deleted file mode 100644 index efe34efcf4..0000000000 --- a/isis/src/mro/apps/hical/GainLineDrift.h +++ /dev/null @@ -1,107 +0,0 @@ -#ifndef GainLineDrift_h -#define GainLineDrift_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: GainLineDrift.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" - -#include "IException.h" - -namespace Isis { - - /** - * @brief Computes a gain correction for each line (Zg Module) - * - * This class computes the HiRISE gain component correction for each line. - * Time dependant line drift correction also governed by parameters in config - * file and LineGainDrift coefficients matrix file. - * - * @ingroup Utility - * - * @author 2008-01-10 Kris Becker - * @internal - * @history 2010-04-16 Kris Becker Modifed to use standardized CSV file - * format. - */ - class GainLineDrift : public Module { - - public: - // Constructors and Destructor - GainLineDrift() : Module("GainLineDrift") { } - GainLineDrift(const HiCalConf &conf) : Module("GainLineDrift") { - init(conf); - } - - /** Destructor */ - virtual ~GainLineDrift() { } - - private: - QString _gdfile; - int _ccd; - int _channel; - HiVector _coefs; - - void init(const HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - _ccd = CpmmToCcd(ToInteger(prof("CpmmNumber"))); - _channel = ToInteger(prof("ChannelNumber")); - - // Get parameters from gainVline coefficients file - _coefs = loadCsv("LineGainDrift", conf, prof, 4); - _history.add("Coefs["+ToString(_coefs[0])+ ","+ - ToString(_coefs[1])+ ","+ - ToString(_coefs[2])+ ","+ - ToString(_coefs[3])+ "]"); - - int bin = ToInteger(prof("Summing")); - double linetime = ToDouble(prof("ScanExposureDuration")); - HiLineTimeEqn timet(bin, linetime); - int nlines = ToInteger(prof("Lines")); - - HiVector gainV(nlines); - for ( int i = 0 ; i < nlines ; i++ ) { - double lt = timet(i); - gainV[i] = _coefs[0] + (_coefs[1] * lt) + - _coefs[2] * exp(_coefs[3] * lt); - } - - _data = gainV; - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/GainNonLinearity.h b/isis/src/mro/apps/hical/GainNonLinearity.h deleted file mode 100644 index a8f9c9af19..0000000000 --- a/isis/src/mro/apps/hical/GainNonLinearity.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef GainNonLinearity_h -#define GainNonLinearity_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: GainNonLinearity.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" -#include "Statistics.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief GainNonLinearity Module - Applies non-linear, line-dependant gain - * - * This class computes the line-based non-linearity dependant gain correction. - * It has a comma separated value (CSV) file in the config file parameter - * "NonLinearityGain". This file is assumed to contain one column of data: the - * factor applied to the line average to correct non linear gain contribution. - * - * @ingroup Utility - * - * @author 2010-05-20 Kris Becker - * @internal - */ - class GainNonLinearity : public Module { - - public: - // Constructors and Destructor - GainNonLinearity() : Module("GainNonLinearity") { } - GainNonLinearity(const HiCalConf &conf) : Module("GainNonLinearity") { - init(conf); - } - - /** Destructor */ - virtual ~GainNonLinearity() { } - - private: - QString _gainFile; - double _gainFactor; // Temperature factor - - void init(const HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - - // Get temperature factor - HiVector factor = loadCsv("NonLinearityGain", conf, prof, 1); - _gainFactor = factor[0]; - _data = HiVector(1, _gainFactor); - - // History - _history.add("NonLinearityGainFactor[" + ToString(_gainFactor) + "]"); - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/GainTemperature.h b/isis/src/mro/apps/hical/GainTemperature.h deleted file mode 100644 index ab34917df2..0000000000 --- a/isis/src/mro/apps/hical/GainTemperature.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef GainTemperature_h -#define GainTemperature_h -/** - * @file - * $Revision: 7131 $ - * $Date: 2016-09-26 18:18:07 -0700 (Mon, 26 Sep 2016) $ - * $Id: GainTemperature.h 7131 2016-09-27 01:18:07Z jwbacker@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" -#include "Statistics.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief GaingTemperature Module - Applies temperature-dependant gain - * correction (column) - * - * This class computes the temperature dependant gain correction. It has a - * comma separated value (CSV) file in the config file parameter - * "FpaTemperatureFactorFile". This file is assumed to contain three columns - * of data: column 0: CCD identifier (Ex: RED0), column 1: FPA factor for - * channel 0, and column 2: FPA factor for channel 1. It should have 14 rows, - * 1 for each HiRISE CCD. - * - * @ingroup Utility - * - * @author 2009-09-14 Kris Becker - * @internal - * @history 2010-04-16 Kris Becker Utilize standardized CSV reader to get - * FpaFactor - * @history 2010-05-26 Kris Becker Corrected sign for CSV factor - * (_fpaFactor) - * @history 2016-08-28 Kelvin Rodriguez - Removed usused private member variables to - * eliminate unused member variables warnings in clang. Part of porting to OS X 10.11. - */ - class GainTemperature : public Module { - - public: - // Constructors and Destructor - GainTemperature() : Module("GainTemperature") { } - GainTemperature(const HiCalConf &conf) : Module("GainTemperature") { - init(conf); - } - - /** Destructor */ - virtual ~GainTemperature() { } - - private: - QString _fpaFile; - double _refTemp; // Reference temperature - double _fpaFactor; // Temperature factor - - void init(const HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - - // Get temperature factor - HiVector factor = loadCsv("FpaGain", conf, prof, 1); - _fpaFactor = factor[0]; - - // Get temperature parameters - _refTemp = toDouble(ConfKey(prof, "FpaReferenceTemperature", toString(21.0))); - - double fpa_py_temp = ToDouble(prof("FpaPositiveYTemperature")); - double fpa_my_temp = ToDouble(prof("FpaNegativeYTemperature")); - - - double FPA_temp = (fpa_py_temp+fpa_my_temp) / 2.0; - double _baseT = 1.0 - (_fpaFactor * (FPA_temp - _refTemp)); - - // Create data - int nsamps = ToInteger(prof("Samples")); - _data = HiVector(nsamps, _baseT); - - // History - _history.add("FpaTemperatureFactor[" + ToString(_fpaFactor) + "]"); - _history.add("FpaAverageTemperature[" + ToString(FPA_temp) + "]"); - _history.add("FpaReferenceTemperature[" + ToString(_refTemp) + "]"); - _history.add("Correction[" + ToString(_baseT) + "]"); - return; - } - - }; - -} // namespace Isis -#endif diff --git a/isis/src/mro/apps/hical/GainUnitConversion.h b/isis/src/mro/apps/hical/GainUnitConversion.h deleted file mode 100644 index 82e747d146..0000000000 --- a/isis/src/mro/apps/hical/GainUnitConversion.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef GainUnitConversion_h -#define GainUnitConversion_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: GainUnitConversion.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" - -#include "IException.h" - -namespace Isis { - - /** - * @brief Computes units parameters for HiRISE data calibration (Ziof Module) - * - * This class computes the HiRISE parameters necessary to derive the user - * selected calibration units of the image data. - * - * @ingroup Utility - * - * @author 2010-04-19 Kris Becker - * @internal - * @history 2010-10-28 Kris Becker Renamed parameters replacing "Ziof" with - * "GainUnitConversion". - */ - class GainUnitConversion : public Module { - - public: - // Constructors and Destructor - GainUnitConversion() : Module("GainUnitConversion"), _units("DN") { } - GainUnitConversion(HiCalConf &conf, const QString &units) : - Module("GainUnitConversion"), _units(units) { - init(conf); - } - - /** Destructor */ - virtual ~GainUnitConversion() { } - - private: - QString _units; - - void init(HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - - double sed = ToDouble(prof("ScanExposureDuration")); // units = us - if ( IsEqual(_units, "IOF") ) { - // Add solar I/F correction parameters - double au = conf.sunDistanceAU(); - _history.add("SunDist[" + ToString(au) + " (AU)]"); - double suncorr = 1.5 / au; - suncorr *= suncorr; - - double zbin = ToDouble(prof("GainUnitConversionBinFactor")); - _history.add("GainUnitConversionBinFactor[" + ToString(zbin) + "]"); - - double ztemp = getTempDepGain(conf, prof); - _history.add("ScanExposureDuration[" + ToString(sed) + "]"); - double ziof = (zbin * ztemp) * (sed * 1.0e-6) * suncorr; - _data = HiVector(1, ziof); - - _history.add("I/F_Factor[" + ToString(ziof) + "]"); - _history.add("Units[I/F]"); - } - else if ( IsEqual(_units, "DN/US") ) { - // Ziof is a divisor in calibration equation - double ziof = sed; - _data = HiVector(1, ziof); - _history.add("ScanExposureDuration[" + ToString(sed) + "]"); - _history.add("DN/uS_Factor[" + ToString(ziof) + "]"); - _history.add("Units[DNs/microsecond]"); - } - else { - // Units are already in DN - double ziof = 1.0; - _data = HiVector(1, ziof); - _history.add("DN_Factor[" + ToString(ziof) + "]"); - _history.add("Units[DN]"); - } - - return; - } - - /** - * @brief Compute CalFact, CCD QE, Temperature I/F dependancy - * - * @author Kris Becker - 4/28/2010 - * - * @param prof Profile providing parameters - * - * @return double Dependancy factor - */ - double getTempDepGain(const HiCalConf &conf, const DbProfile &prof) { - double zgain = ToDouble(prof("FilterGainCorrection")); - _history.add("FilterGainCorrection[" + ToString(zgain) + "]"); - - double fpa_py_temp = ToDouble(prof("FpaPositiveYTemperature")); - double fpa_my_temp = ToDouble(prof("FpaNegativeYTemperature")); - double T = (fpa_py_temp+fpa_my_temp) / 2.0; - _history.add("T(AveFpa_YTemp)[" + ToString(T) + "]"); - - double baseT = ToDouble(prof("IoverFbasetemperature")); - _history.add("IoverFbasetemperature[" + ToString(baseT) + "]"); - - double QEpcntC = ToDouble(prof("QEpercentincreaseperC")); - _history.add("QEpercentincreaseperC[" + ToString(QEpcntC) + "]"); - - double absGainTdi = ToDouble(prof("AbsGain_TDI128")); - _history.add("AbsGain_TDI128[" + ToString(absGainTdi) + "]"); - - double QETD = zgain * ( 1.0 + (T - baseT) * QEpcntC * absGainTdi); - _history.add("CalFactQETempDep[" + ToString(QETD) + "]"); - return (QETD); - } - - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/HISTORY b/isis/src/mro/apps/hical/HISTORY deleted file mode 100644 index b4dd46cb9f..0000000000 --- a/isis/src/mro/apps/hical/HISTORY +++ /dev/null @@ -1,9 +0,0 @@ - hical Snapshot History - September 15, 2009 - -The contents of this file record hical snapshot hicalbeta update events. They -are listed in chronologic order. - -2009-09-15 -Original version of hical created from current version of hicalbeta. -hical.0015.conf is the current version of the config file. diff --git a/isis/src/mro/apps/hical/HiBlob.h b/isis/src/mro/apps/hical/HiBlob.h deleted file mode 100644 index 1231e8db09..0000000000 --- a/isis/src/mro/apps/hical/HiBlob.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef HiBlob_h -#define HiBlob_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include "Blobber.h" -#include "HiCalTypes.h" - -namespace Isis { - - /** - * @brief BLOB extraction class - * - * This class provides access and processing of HiRISE data as - * stored in an ISIS BLOB (Table). - * - * Note that the file provided must be a HiRISE ISIS cube file - * that is freshly converted from a PDS compatable EDR - * (hi2isis). It must contain an ISIS Table named "HiRISE - * Calibration Image". From that table, data is extracted from - * the "Calibration" field. - * - * @ingroup MarsReconnaissanceOrbiter - * - * @author 2007-10-09 Kris Becker - * @see Blobber - * - * @internal - * @history 2008-05-12 Steven Lambright - Removed references to CubeInfo - */ - class HiBlob : public Blobber { - public: - /** - * @brief Default, mostly useless constructor - */ - HiBlob(): Blobber() { } - - /** - * @brief Constructor providing interface to an ISIS Cube object - */ - HiBlob(Cube &cube, const QString &tblname, - const QString &field, - const QString &name = "HiBlob") : - Blobber(cube, tblname, field, name) { } - - /** Destructor */ - virtual ~HiBlob() { } - - /** Return a reference to the data */ - const HiMatrix &buffer() const { - return (ref()); - } - - }; -}; - -#endif diff --git a/isis/src/mro/apps/hical/HiCalConf.cpp b/isis/src/mro/apps/hical/HiCalConf.cpp deleted file mode 100644 index aeff43a601..0000000000 --- a/isis/src/mro/apps/hical/HiCalConf.cpp +++ /dev/null @@ -1,606 +0,0 @@ -/** - * @file - * $Revision: 6715 $ - * $Date: 2016-04-28 10:58:43 -0700 (Thu, 28 Apr 2016) $ - * $Id: HiCalConf.cpp 6715 2016-04-28 17:58:43Z tsucharski@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include - -#include - -#include "Brick.h" -#include "Cube.h" -#include "FileName.h" -#include "HiCalConf.h" -#include "HiCalUtil.h" -#include "IString.h" -#include "IException.h" -#include "Pvl.h" -#include "SpecialPixel.h" -#include "NaifStatus.h" - -using namespace std; - -namespace Isis { - -bool HiCalConf::_naifLoaded = false; - -/** - * @brief Default constructor for HiCalConf - */ - HiCalConf::HiCalConf() : DbAccess() { - _profName.clear(); - init(); - } - - - /** - * @brief Construct from a HiRISE label - * @param label Label from HiRISE cube file - */ - HiCalConf::HiCalConf(Pvl &label) : DbAccess() { - _profName.clear(); - init(label); - } - - /** - * @brief Construct from HiRISE label and configuration file - * - * @param label Label from HiRISE cube file - * @param conf Name of configuration file to use - */ - HiCalConf::HiCalConf(Pvl &label, const QString &conf) : - DbAccess(Pvl(filepath(conf)).findObject("Hical", PvlObject::Traverse)) { - _profName.clear(); - init(label); - } - - /** - * @brief Define label to initialize parameters from - * - * @param label Label from HiRISE cube file - */ - void HiCalConf::setLabel(Pvl &label) { - init(label); - return; - } - - /** - * @brief Resolve a file path validating existance - * - * This method determines if a filepath is versioned (as indicated with one or - * more '?') and returns the expanded file name \b only. It does not expand - * the path portion of the filespec. This is so to make use of the results of - * this method in reporting files in labels...to make it tidy. - * - * @param fname File specification with or without versioning patterns - * - * @return QString Expanded filename but not the filepath - */ - QString HiCalConf::filepath(const QString &fname) const { - FileName efile(fname); - if (efile.isVersioned()) { - QString path(efile.originalPath()); - if (!path.isEmpty()) path += "/"; - - efile = efile.highestVersion(); - - return (path + efile.name()); - } - return (fname); - } - - - /** - * @brief Establish the configuration file used for calibration parameters - * - * This file can be established at any point in the processing as parameters - * are resolved as needed (lazy instantiation). One must be established - * before any calibration can take place. - * - * @param conf Name of configuration file to use - */ - void HiCalConf::setConf(const QString &conf) { - load(Pvl(filepath(conf)).findObject("Hical", PvlObject::Traverse)); - } - - /** - * @brief Selects a profile other than the default - * - * Use of this method is to explicitly select a named profile in the - * configuration file. If this is used, additional profile options are not - * loaded. - * - * @param profile Name of existing profile in the configuration file - */ - void HiCalConf::selectProfile(const QString &profile) { - _profName = profile; - return; - } - - /** - * @brief Returns the selected profile name - * - * This method returns the selected profile name. - * - * @return QString Selected profile name - */ - QString HiCalConf::getProfileName() const { - return (_profName); - } - - /** - * @brief Returns the named expanded matrix file reference - * - * This method returns the name of a matrix file reference variable from the - * \b Matrices keyword as determined from the fully option profile. It then - * expands the filename portion (not the filepath!) and returns the result as - * a QString for subsequent use. See also getMatrixList and getMatrix. - * - * @param name Name of Matrix to resolve. It must be one in the \b Matrices - * keyword from the configuration file - * - * @return QString The expanded file name reference for the matrix - */ - QString HiCalConf::getMatrixSource(const QString &name) const { - return (getMatrixSource(name, getMatrixProfile())); - } - - /** - * @brief Returns the named expanded matrix file reference - * - * This method returns the name of a matrix file reference variable from the - * \b Matrices keyword as determined from the specified profile. It then - * expands the filename portion (not the filepath!) and returns the result as - * a QString for subsequent use. See also getMatrixList and getMatrix. - * - * @param name Name of Matrix to resolve. It must be one in the \b Matrices - * keyword from the configuration file - * @param matconf Profile to extract the named matrix source from - * - * @return QString The expanded file name reference for the matrix - */ - QString HiCalConf::getMatrixSource(const QString &name, - const DbProfile &matconf) const { - - QString mfile = parser(matconf.value(name), - getList(matconf,"OptionKeywords"), - matconf); - -// Translate and return - return (filepath(mfile)); - } - - HiVector HiCalConf::getMatrix(const QString &name, - int expected_size) const { - return (getMatrix(name,getMatrixProfile(), expected_size)); - } - - - QString HiCalConf::resolve(const QString &composite, - const DbProfile &matconf) const { - return (parser(composite,getList(matconf,"OptionKeywords"), matconf)); - } - - - - /** - * @brief Returns the named matrix from the specified file reference - * - * The matrix specified in the name parameter must exist in the \b Matrices - * keyword in the \b Hical object of the configuration file. A fully option - * profile is created within this method and the keyword of the named variable - * is retreived from it. The fully qualified filepath is generated to - * finally resolve to a multi-band, single line, Isis cube file. A specific - * band is extracted from the cube file as determined by the CCD channel - * (provide by the getMatrixBand method) and returned in a HiVector data - * array. - * - * Note that the caller can specify the number of samples expected from the - * matrix cube in the expected_size parameter if it is non-zero. Once the - * matrix cube is opened, the number of samples is checked against this - * parameter and if they do not match, an exception is thrown. - * - * @param name Name of matrix to retreive - * @param profile Specfied profile providing all parameters - * @param expected_size Expected number of samples in the matrix cube - * - * @return HiCalConf::HiVector Returns the extracted band from the cube - */ - HiVector HiCalConf::getMatrix(const QString &name, - const DbProfile &profile, - int expected_size) const { - - QString mfile = getMatrixSource(name, profile); - -// Crack the file and read the appropriate band - Cube cube; - cube.open(mfile); - -// Check for proper size if specifeid - if (expected_size != 0) { - if (cube.sampleCount() != expected_size) { - ostringstream mess; - mess << "Specifed matrix (" << name - << ") from file \"" << mfile - << "\" does not have expected samples (" << expected_size - << ") but has " << cube.sampleCount(); - cube.close(); - throw IException(IException::User, mess.str(), _FILEINFO_); - } - } - -// Read the specifed region - Brick bandio(cube.sampleCount(), 1, 1, Real); - bandio.SetBasePosition(1,1,getMatrixBand(profile)); - cube.read(bandio); - -// Now create the output buffer with some TNT funny business - HiVector temp(cube.sampleCount(), bandio.DoubleBuffer()); - HiVector out(cube.sampleCount()); - out.inject(temp); - cube.close(); - return (out); - } - - /** - * @brief Returns a named scalar constant - * - * This method returns a named scalar constant parameter retrieved from the - * configuration file through a fully optioned profile. This keyword does not - * necessarily have to exist in the \b Scalars keyword in the \b Hical object, - * but is required to be a floating point value (or values). The result is - * returned as a HiVector data array. - * - * @param name Name of scalar constant to return - * @param expected_size Expected size of constant if non-zero - * - * @return HiCalConf::HiVector Values of scalar constants - */ - HiVector HiCalConf::getScalar(const QString &name, - const DbProfile &profile, - int expected_size) const { - int nvals = profile.count(name); - - // Check for proper size if specifeid - if (expected_size != 0) { - if (nvals != expected_size) { - ostringstream mess; - mess << "Specifed scalar (" << name - << ") does not have expected size (" << expected_size - << ") but has " << nvals; - throw IException(IException::User, mess.str(), _FILEINFO_); - } - } -// All is OK - HiVector mtx(nvals, Null); - for (int i = 0 ; i < nvals ; i++) { - mtx[i] = ToDouble(profile(name, i)); - } - return (mtx); - } - - /** - * @brief Computes the distance from the Sun to the observed body - * - * This method requires the appropriate NAIK kernels to be loaded that - * provides instrument time support, leap seconds and planet body ephemeris. - * - * @return double Distance in AU between Sun and observed body - */ - double HiCalConf::sunDistanceAU() { - NaifStatus::CheckErrors(); - loadNaifTiming(); - - QString scStartTime = getKey("SpacecraftClockStartCount", "Instrument"); - double obsStartTime; - scs2e_c (-74999,scStartTime.toLatin1().data(),&obsStartTime); - - QString targetName = getKey("TargetName", "Instrument"); - if ( targetName.toLower() == "sky" || - targetName.toLower() == "cal" || - targetName.toLower() == "phobos" || - targetName.toLower() == "deimos" ) { - targetName = "Mars"; - } - double sunv[3]; - double lt; - (void) spkpos_c(targetName.toLatin1().data(), obsStartTime, "J2000", "LT+S", "sun", - sunv, <); - double sunkm = vnorm_c(sunv); - NaifStatus::CheckErrors(); - // Return in AU units - return (sunkm/1.49597870691E8); - } - - - /** - * @brief Returns the band number of a Matrix file given CCD, Channel number - * - * The ordering of HiRISE Isis matrix cubes are required to be ordered by CCD - * and channel number. The band number is computed as: - * @code - * band = 1 + ccd * 2 + channel - * @endcode - * - * Note that this method extracts the values from a stored cube label. It - * must be initialized with a label or an error will occur. - * - * @return int Band number of matrix cube - */ - int HiCalConf::getMatrixBand() const { - Pvl label = _label; - DbProfile parms = makeParameters(label); - return (getMatrixBand(parms)); - } - - /** - * @brief Returns the band number of a Matrix file from a profile - * - * The ordering of HiRISE Isis matrix cubes are required to be ordered by CCD - * and CHANNEL number. The band number is computed as: - * @code - * band = 1 + ccd * 2 + channel - * @endcode - * - * @param DbProfile Profile to get CCD and CHANNEL values from - * @return int Band number of matrix cube - */ - - int HiCalConf::getMatrixBand(const DbProfile &p) const { - return (getChannelIndex(ToInteger(p("CCD")), ToInteger(p("CHANNEL")))); - } - - /** - * @brief Generic profile keyword value extractor - * - * This method retrieves a profile keyword from the given profile and returns - * all its values a a list of QStrings. An exception will be thrown - * incidentally if the keyword does not exist. - * - * @param profile Profile containing the keyword to extract - * @param key Name of keyword to retrieve - * - * @return std::vector List of values from profile keyword - */ - HiCalConf::ValueList HiCalConf::getList(const DbProfile &profile, - const QString &key) const { - ValueList slist; - -// Get keyword parameters - if ( profile.exists(key) ) { - int nvals = profile.count(key); - for (int i = 0 ; i < nvals ; i++) { - slist.push_back(profile.value(key, i)); - } - } - return (slist); - } - -/** - * @brief Load required NAIF kernels required for timing needs - * - * This method maintains the loading of kernels for HiRISE timing and planetary - * body ephemerides to support time and relative positions of planet bodies. - */ -void HiCalConf::loadNaifTiming( ) { - NaifStatus::CheckErrors(); - if (!_naifLoaded) { -// Load the NAIF kernels to determine timing data - Isis::FileName leapseconds("$base/kernels/lsk/naif????.tls"); - leapseconds = leapseconds.highestVersion(); - - Isis::FileName sclk("$mro/kernels/sclk/MRO_SCLKSCET.?????.65536.tsc"); - sclk = sclk.highestVersion(); - - Isis::FileName pck("$base/kernels/spk/de???.bsp"); - pck = pck.highestVersion(); - -// Load the kernels - QString lsk = leapseconds.expanded(); - QString sClock = sclk.expanded(); - QString pConstants = pck.expanded(); - furnsh_c(lsk.toLatin1().data()); - furnsh_c(sClock.toLatin1().data()); - furnsh_c(pConstants.toLatin1().data()); - NaifStatus::CheckErrors(); - -// Ensure it is loaded only once - _naifLoaded = true; - } - return; -} - -/** - * @brief Intialization of object variables - */ -void HiCalConf::init() { - _label.clear(); - return; -} - -/** - * @brief Initialization of object using HiRISE label - * - * This method initializes the object from a HiRISE label. Note that a copy of - * the label is created so that subsequent operations can be supported and it is - * not dependant upon callers behaviour. - * - * @param label Pvl label of HiRISE cube - */ -void HiCalConf::init(Pvl &label) { - init(); - _label = label; - return; -} - -/** - * @brief Get a label keyword - * - * Retreives a keyword from a HiRISE label and returns a reference to it. If it - * does not exist, an exception is thrown incidentally. - * - * @param key Name of keyword in label to retrieve - * @param group Optional group name to use if non-empty. - * - * @return PvlKeyword& Reference to retrieved label keyword - */ -PvlKeyword &HiCalConf::getKey(const QString &key, - const QString &group) { - if (!group.isEmpty()) { - PvlGroup &grp = _label.findGroup(group, Pvl::Traverse); - return (grp[key]); - } - else { - return (_label.findKeyword(key)); - } -} - -/** - * @brief Returns the Matrix profile - * - * This method constructs a fully optioned matrix profile from the - * configuration file. If the caller has designated a specific named profile, - * the options profiles are not loaded. - * - * Options profiles are read from the \b ProfileOptions configuration keyword - * and resolved through pattern replacement of FILTER, TDI, BIN, CCD and CHANNEL - * values are determined from the HiRISE label. If named profiles exist after - * the textual substitutions of these values they are added to the base default - * profile. This process will replace existing default keywords of the same - * name in subseqent optional keywords. - * - * @param profile Optional name of the profile to retrieve. It will use the - * default profile if this parameter is not provided (empty). - * @return DbProfile Returns a fully optioned profile - */ -DbProfile HiCalConf::getMatrixProfile(const QString &profile) const { - QString myprof = (!profile.isEmpty()) ? profile : _profName; - DbProfile matconf = getProfile(myprof); - if (!matconf.isValid()) { - ostringstream mess; - mess << "Specifed matrix profile (" << matconf.Name() - << ") does not exist or is invalid!"; - throw IException(IException::User, mess.str(), _FILEINFO_); - } - - // Profile the label and merge them. Order is important. - matconf = DbProfile(getLabelProfile(matconf), matconf, matconf.Name()); - - // Add special parameters. Again, order is important. - matconf = DbProfile(matconf, makeParameters(matconf), matconf.Name()); - -// Load any optional ones - ValueList profkeys = getList(matconf,"OptionKeywords"); - ValueList proforder = getList(matconf,"ProfileOptions"); - QString pName(matconf.Name()); - for (unsigned int i = 0 ; i < proforder.size() ; i++) { - QString profile = parser(proforder[i], profkeys, matconf); - if (profileExists(profile)) { - pName += "+[" + profile + "]"; - matconf = DbProfile(matconf,getProfile(profile), pName); - } - } - return (matconf); -} - - -DbProfile HiCalConf::getLabelProfile(const DbProfile &profile) const { - DbProfile lblprof("Label"); - if ( profile.exists("LabelGroups") ) { - int ngroups = profile.count("LabelGroups"); - Pvl label = _label; - for ( int g = 0 ; g < ngroups ; g++ ) { - QString group = profile("LabelGroups", g); - PvlGroup grp = label.findGroup(group, Pvl::Traverse); - lblprof = DbProfile(lblprof,DbProfile(grp)); - } - } - return (lblprof); -} - -int HiCalConf::getChannelIndex(const int &ccd, const int &channel) const { - return(1 + (ccd*2) + channel); -} - -DbProfile HiCalConf::makeParameters(Pvl &label) const { - PvlGroup inst = label.findGroup("Instrument", Pvl::Traverse); - DbProfile parms("Parameters"); - - int ccd = CpmmToCcd((int) inst["CpmmNumber"]); - int channel = inst["ChannelNumber"]; - parms.add("CCD",ToString(ccd)); - parms.add("CHANNEL", ToString(channel)); - parms.add("TDI", inst["Tdi"]); - parms.add("BIN", inst["Summing"]); - parms.add("FILTER", CcdToFilter(ccd)); - parms.add("CCDCHANNELINDEX", ToString(getChannelIndex(ccd, channel))); - return (parms); -} - -DbProfile HiCalConf::makeParameters(const DbProfile &profile) const { - DbProfile parms("Parameters"); - int ccd = CpmmToCcd(ToInteger(profile("CpmmNumber"))); - int channel = ToInteger(profile("ChannelNumber")); - parms.add("CCD",ToString(ccd)); - parms.add("CHANNEL", ToString(channel)); - parms.add("TDI", profile("Tdi")); - parms.add("BIN", profile("Summing")); - parms.add("FILTER", CcdToFilter(ccd)); - parms.add("CCDCHANNELINDEX", ToString(getChannelIndex(ccd, channel))); - return (parms); -} - -QString HiCalConf::makePattern(const QString &str) const { - return (QString("{" + str + "}")); -} - -/** - * @brief Performs a search and replace operation for the given QString - * - * This method will search the input QString s for predefined keywords (FILTER, - * TDI, BIN, CCD and CHANNEL) delimited by {} and replace these occurances with - * the textual equivalent. - * - * @param s String to conduct search/replace of values - * - * @return QString Results of search/replace - */ -QString HiCalConf::parser(const QString &s, const ValueList &vlist, - const DbProfile &prof) const { - QString sout(s); - - ValueList::const_iterator ciVlist; - for ( ciVlist = vlist.begin() ; ciVlist != vlist.end() ; ++ciVlist ) { - QString str(*ciVlist); - if ( prof.exists(str) ) { - sout = sout.replace(makePattern(str), prof(str)); - } - } - - return (sout); -} - -} // namespace Isis - diff --git a/isis/src/mro/apps/hical/HiCalConf.h b/isis/src/mro/apps/hical/HiCalConf.h deleted file mode 100644 index ae548cd5ec..0000000000 --- a/isis/src/mro/apps/hical/HiCalConf.h +++ /dev/null @@ -1,157 +0,0 @@ -#ifndef HiCalConf_h -#define HiCalConf_h -/** - * @file - * $Revision: 7131 $ - * $Date: 2016-09-26 18:18:07 -0700 (Mon, 26 Sep 2016) $ - * $Id: HiCalConf.h 7131 2016-09-27 01:18:07Z jwbacker@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include -#include -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "Pvl.h" -#include "DbAccess.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief HiCalConf manages HiRISE calibration matrices - * that alter some or all of the - * parameters contained in the Object section of the file. - * This object accepts a configuration file that contains a generic format of - * HiRISE Calibration matrices and loads the appropriate set based upon TDI, - * BIN, and channel number minimally. - * - * Below is the basic unprofiled version of the configuration (database) - * file: - * - * @code - * Object = Database - * A = "$mro/calibration/matrices/A_TDI{TDI}_BIN{BIN}_????.cub" - * B = "$mro/calibration/matrices/B_TDI{TDI}_BIN{BIN}_????.cub" - * G = "$mro/calibration/matrices/G_TDI{TDI}_BIN{BIN}_????.cub" - * EndObject - * - * @endcode - * - * The \b {TDI} and \b {BIN} will be replaced with the textual translation of - * the TDI (128, 64, 32, 16, 8) and BIN (1, 2, 3, 4, 8, 16) numbers. This - * makes for easy defaulting to set up specific profiling of combinations. - * - * Additionally, you can add profiles for a TDI/BIN mode combination should - * the need arise. Simply add one or more \a Profile groups that specify - * different files for the observation conditions. - * @endcode - * - * This object will retain B, G and IF references from the main Database - * object but replace A with the one specified in the "TDI128/BIN2" Profile - * called "MyNew_A_Matrix.cub" for all HiRISE images that were acquired with - * TDI128 and BIN2 imaging parameters. - * @code - * Object = Database - * Matrices = ("A", "B", "G") - * - * A = "$mro/calibration/matrices/A_TDI{TDI}_BIN{BIN}_????.cub" - * B ="$mro/calibration/matrices/B_TDI{TDI}_BIN{BIN}_????.cub" - * G = "$mro/calibration/matrices/G_TDI{TDI}_BIN{BIN}_????.cub" - * - * Group = Profile - * Name = "TDI128/BIN2" - * A = "MyNew_A_Matrix.cub" - * EndGroup - * EndObject - * @ingroup Utility - * @author 2007-06-27 Kris Becker - * @history 2008-04-01 Kris Becker Added Phobos and Deimos to I/F modified - * target list as Mars in sundistanceAU() method so it returns - * acceptable distances - * @history 2010-04-16 Kris Becker Added abstracted method, getChannelIndex(), - * to compute the new CcdChannelIndex keyword. - * @history 2015-07-31 Kristin Berry - Added NaifStatus::CheckErrors() to see if any NAIF errors - * were signaled. References #2248. - * @history 2016-08-28 Kelvin Rodriguez - Removed usused private member variables to - * eliminate unused member variables warnings in clang. Part of porting to OS X 10.11. - */ - class HiCalConf : public DbAccess { - public: - typedef enum { Matrix, Scalar, Keyword } CalType; - typedef std::vector ValueList; - - public: - // Constructors and Destructor - HiCalConf(); - HiCalConf(Pvl &label); - HiCalConf(Pvl &label, const QString &conf); - - /** Destructor ensures everything is cleaned up properly */ - virtual ~HiCalConf () { } - - void setLabel(Pvl &label); - PvlKeyword &getKey(const QString &key, const QString &group = ""); - - QString filepath(const QString &fname) const; - void setConf(const QString &conf); - void selectProfile(const QString &profile = ""); - - QString getProfileName() const; - QString getMatrixSource(const QString &name) const; - QString getMatrixSource(const QString &name, - const DbProfile &matconf) const; - HiVector getMatrix(const QString &name, int expected_size = 0) const; - HiVector getMatrix(const QString &name, const DbProfile &profile, - int expected_size = 0) const; - HiVector getScalar(const QString &name, const DbProfile &profile, - int expected_size) const; - int getMatrixBand() const; - int getMatrixBand(const DbProfile &p) const; - - double sunDistanceAU(); - - DbProfile getMatrixProfile(const QString &profile = "") const; - ValueList getList(const DbProfile &profile, const QString &key) const; - QString resolve(const QString &composite, - const DbProfile &matconf) const; - - private: - static bool _naifLoaded; //!< Ensures one instance of NAIF kernels - QString _profName; //!< Specified name of profile - Pvl _label; //!< Hold label for future references - - QString _filter; //!< Filter set name (RED, IR, BG) - - - void init(); - void init(Pvl &label); - void loadNaifTiming(); - DbProfile getLabelProfile(const DbProfile &profile) const; - int getChannelIndex(const int &ccd, const int &channel) const; - DbProfile makeParameters(Pvl &label) const; - DbProfile makeParameters(const DbProfile &profile) const; - QString makePattern(const QString &str) const; - QString parser(const QString &s, const ValueList &options, - const DbProfile &prof ) const; - }; - -} // namespace Isis -#endif diff --git a/isis/src/mro/apps/hical/HiCalData.h b/isis/src/mro/apps/hical/HiCalData.h deleted file mode 100644 index 4bddae4145..0000000000 --- a/isis/src/mro/apps/hical/HiCalData.h +++ /dev/null @@ -1,173 +0,0 @@ -#ifndef HiCalData_h -#define HiCalData_h -/** - * @file - * $Revision: 4941 $ - * $Date: 2013-01-03 13:02:20 -0700 (Thu, 03 Jan 2013) $ - * $Id: HiCalData.h 4941 2013-01-03 20:02:20Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiBlob.h" -#include "Cube.h" - -#include "IException.h" - -namespace Isis { - - /** - * @brief Container for HiRISE calibration data - * - * @ingroup Utility - * - * @author 2007-10-09 Kris Becker - * - * @internal - * @history 2008-05-12 Steven Lambright - Removed references to CubeInfo - */ - class HiCalData { - - public: - // Constructors and Destructor - HiCalData() : _calimage(), _calbuffer(), _caldark(), _buffer(), - _dark(), _binning(0), _tdi(0), _cpmm(0), _channelNo(0), - _firstReverseLine(0), _lastReverseLine(0), - _firstMaskLine(0), _lastMaskLine(0), - _firstRampLine(0), _lastRampLine(0) { } - HiCalData(Cube &cube) { - load(cube); - } - - /** Destructor */ - virtual ~HiCalData() { } - - void load(Cube &cube) { - Progress progress; - progress.SetText("HiCalData"); - - _calimage = HiBlob(cube, "HiRISE Calibration Image", "Calibration").buffer(); - _calbuffer = HiBlob(cube, "HiRISE Calibration Ancillary", "BufferPixels").buffer(); - _caldark = HiBlob(cube, "HiRISE Calibration Ancillary", "DarkPixels").buffer(); - _buffer = HiBlob(cube, "HiRISE Ancillary", "BufferPixels").buffer(); - _dark = HiBlob(cube, "HiRISE Ancillary", "DarkPixels").buffer(); - - PvlGroup &instrument = cube.group("Instrument"); - -// Extract what is needed - _binning = instrument["Summing"]; - _tdi = instrument["Tdi"]; - _cpmm = instrument["CpmmNumber"]; - _channelNo = instrument["ChannelNumber"]; - -// Determine start/end lines - _firstReverseLine = 0; - _lastReverseLine = 19; - -// Set the mask depending on the binning mode - _firstMaskLine = 20; - _lastMaskLine = _firstMaskLine + 20 / _binning - 1; - _firstRampLine = _lastMaskLine + 1; - _lastRampLine = _calimage.dim1() - 1; - } - - - HiMatrix getReverseClock() { - return (cropLines(_calimage, _firstReverseLine, _lastReverseLine)); - } - HiMatrix getMask() { - return (cropLines(_calimage, _firstMaskLine, _lastMaskLine)); - } - HiMatrix getRamp() { - return (cropLines(_calimage, _firstRampLine, _lastRampLine)); - } - - HiMatrix getDark() { - return (_dark.copy()); - } - HiMatrix getBuffer() { - return (_buffer.copy()); - } - - HiMatrix getReverseClockExtended() { - return ( - appendSamples( - appendSamples( - cropLines(_calbuffer, _firstReverseLine, _lastReverseLine), - cropLines(_calimage, _firstReverseLine, _lastReverseLine)), - cropLines(_caldark, _firstReverseLine, _lastReverseLine) - ) - ); - } - HiMatrix getMaskExtended() { - return ( - appendSamples( - appendSamples(cropLines(_calbuffer, _firstMaskLine, _lastMaskLine), - cropLines(_calimage, _firstMaskLine, _lastMaskLine)), - cropLines(_caldark, _firstMaskLine, _lastMaskLine) - ) - ); - } - HiMatrix getRampExtended() { - return ( - appendSamples( - appendSamples(cropLines(_calbuffer, _firstRampLine, _lastRampLine), - cropLines(_calimage, _firstRampLine, _lastRampLine)), - cropLines(_caldark, _firstRampLine, _lastRampLine) - ) - ); - - } - HiMatrix getDarkExtended() { - return (appendLines(_caldark, _dark)); - } - HiMatrix getBufferExtended() { - return (appendLines(_calbuffer, _buffer)); - } - - private: - - HiMatrix _calimage; - HiMatrix _calbuffer; - HiMatrix _caldark; - HiMatrix _buffer; - HiMatrix _dark; - - int _binning; - int _tdi; - int _cpmm; - int _channelNo; - - int _firstReverseLine; - int _lastReverseLine; - int _firstMaskLine; - int _lastMaskLine; - int _firstRampLine; - int _lastRampLine; - }; - -} // namespace Isis -#endif - - diff --git a/isis/src/mro/apps/hical/HiCalTypes.h b/isis/src/mro/apps/hical/HiCalTypes.h deleted file mode 100644 index 5104da0193..0000000000 --- a/isis/src/mro/apps/hical/HiCalTypes.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef HiCalTypes_h -#define HiCalTypes_h -/** - * @file - * $Revision: 5059 $ - * $Date: 2013-03-11 09:37:00 -0700 (Mon, 11 Mar 2013) $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include - -#include "tnt_array1d.h" -#include "tnt_array1d_utils.h" -#include "tnt_array2d.h" -#include "tnt_array2d_utils.h" -#include "PvlKeyword.h" - -namespace Isis { - -typedef TNT::Array1D HiVector; //!< 1-D Buffer -typedef TNT::Array2D HiMatrix; //!< 2-D buffer - -/** - * @author ????-??-?? Unknown - * - * @internal - */ -class HiHistory { - public: - /** - * @brief Output operator for history events - * @param o Output stream - * @param h History class to write contents of - * - * @return std::ostream& Returns new state of stream - */ - friend std::ostream &operator<<(std::ostream &o, const HiHistory &h) { - std::vector::const_iterator it = h._events.begin(); - - while (it != h._events.end()) { - o << *it << "; "; - it++; - } - return (o); - } - - public: - HiHistory() { } - HiHistory(const HiHistory &h) : _events(h._events) { } - virtual ~HiHistory() { } - - inline int size() const { return (_events.size()); } - void add(const QString &event) { _events.push_back(event); } - QString get(unsigned int index = 0) const { - if (index < _events.size()) { - return (_events[index]); - } - else { - return (QString("")); - } - } - - void clear() { _events.clear(); } - - PvlKeyword makekey(const QString &name = "History") const { - PvlKeyword key(name); - for (unsigned int i = 0 ; i < _events.size() ; i++) { - key.addValue(_events[i]); - } - return (key); - } - - private: - std::vector _events; -}; - -}; -#endif diff --git a/isis/src/mro/apps/hical/HiCalUtil.h b/isis/src/mro/apps/hical/HiCalUtil.h deleted file mode 100644 index 35b311ffb4..0000000000 --- a/isis/src/mro/apps/hical/HiCalUtil.h +++ /dev/null @@ -1,511 +0,0 @@ -#ifndef HiCalUtil_h -#define HiCalUtil_h -/** - * @file - * $Revision: 5059 $ - * $Date: 2013-03-11 09:37:00 -0700 (Mon, 11 Mar 2013) $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include -#include -#include -#include - -#include "HiCalTypes.h" -#include "DbProfile.h" -#include "IString.h" -#include "Statistics.h" -#include "PvlKeyword.h" -#include "NumericalApproximation.h" -#include "FileName.h" -#include "Pvl.h" -#include "IException.h" - -namespace Isis { - - template inline T MIN(const T &A, const T &B) { - if ( A < B ) { return (A); } - else { return (B); } - } - - template inline T MAX(const T &A, const T &B) { - if ( A > B ) { return (A); } - else { return (B); } - } - -/** - * @brief Counts number of valid pixels in vector - * @param v Vector to inspect - * @return int Number valid pixels in vector - */ -inline int ValidCount(const HiVector &v) { - int n = 0; - for (int i = 0 ; i < v.dim() ; i++) { - if (!IsSpecial(v[i])) n++; - } - return (n); -} - -/** - * @brief Counts number of invalid pixels in vector - * @param v Vector to inspect - * @return int Number invalid (special) pixels in vector - */ -inline int InValidCount(const HiVector &v) { - int n = 0; - for (int i = 0 ; i < v.dim() ; i++) { - if (IsSpecial(v[i])) n++; - } - return (n); -} - -/** - * @brief Convert HiRISE Cpmm number to Ccd number - * - * @param cpmm Cpmm number - */ -inline int CpmmToCcd(int cpmm) { - const int cpmm2ccd[] = {0,1,2,3,12,4,10,11,5,13,6,7,8,9}; - if ( (cpmm < 0) || (cpmm >= (int)(sizeof(cpmm2ccd)/sizeof(int))) ) { - QString mess = "CpmmToCdd: Bad CpmmNumber (" + toString(cpmm) + ")"; - throw IException(IException::User, mess, _FILEINFO_); - } - return (cpmm2ccd[cpmm]); -} - - -/** - * @brief Convert HiRISE Ccd number to string filter name - * - * @param ccd Ccd number of device - */ -inline QString CcdToFilter(int ccd) { - if ( (ccd < 0) || (ccd > 13) ) { - QString mess = "CcdToFilter: Bad Ccd Number (" + QString(ccd) + ")"; - throw IException(IException::User, mess, _FILEINFO_); - } - - QString filter; - if ( ccd <= 9 ) { filter = "RED"; } - else if (ccd <= 11) { filter = "IR"; } - else { filter = "BG"; } - return (filter); -} - -/** - * @brief Crop specified lines from a buffer - * - * This function extracts lines from a buffer and returns a new buffer with the - * extracted lines. - * - * @param m Buffer to extract lines from - * @param sline Starting line number (first line is 0) - * @param eline Last line to extract - * - * @return HiMatrix Buffer containing cropped lines - */ -inline HiMatrix cropLines(const HiMatrix &m, int sline, int eline) { - int nlines(eline-sline+1); - HiMatrix mcrop(nlines, m.dim2()); - for (int l = 0 ; l < nlines ; l++) { - for (int s = 0 ; s < m.dim2() ; s++) { - mcrop[l][s] = m[l+sline][s]; - } - } - return (mcrop); -} - -/** - * @brief Crop specified samples from a buffer - * - * This function extracts samples from a buffer and returns a new buffer with - * the extracted samples. - * - * @param m Buffer to extract samples from - * @param ssamp Startling sample (first sample 0) - * @param esamp Ending sample to extract - * - * @return HiMatrix Buffer with cropped samples - */ -inline HiMatrix cropSamples(const HiMatrix &m, int ssamp, int esamp) { - int nsamps(esamp-ssamp+1); - HiMatrix mcrop(m.dim1(), nsamps); - for (int l = 0 ; l < m.dim1() ; l++) { - for (int s = 0 ; s < nsamps ; s++) { - mcrop[l][s] = m[l][s+ssamp]; - } - } - return (mcrop); -} - -/** - * @brief Reduces by averaging specified lines from a buffer - * - * This function produces a vector from a 2-D buffer of averaged lines at each - * vertical sample location - * - * @param m Buffer to reduce - * @param sline Starting line number (first line is 0) - * @param eline Last line to average (-1 means use all lines) - * - * @return HiVector Buffer containing averaged lines - */ -inline HiVector averageLines(const HiMatrix &m, int sline = 0, int eline = -1) { - eline = (eline == -1) ? m.dim1() - 1 : eline; - HiVector v(m.dim2()); - for (int s = 0 ; s < m.dim2() ; s++) { - Statistics stats; - for (int l = sline ; l <= eline ; l++) { - stats.AddData(&m[l][s], 1); - } - v[s] = stats.Average(); - } - return (v); -} - -/** - * @brief Reduces by averaging specified samples from a buffer - * - * This function produces a vector from a 2-D buffer of averaged samples at each - * horizontal line location - * - * @param m Buffer to reduce - * @param ssamp Starting sample number (first sample is 0) - * @param esamp Last sample to average (-1 means use all samples) - * - * @return HiVector Buffer containing averaged samples - */ -inline HiVector averageSamples(const HiMatrix &m, int ssamp = 0, - int esamp = -1) { - esamp = (esamp == -1) ? m.dim2() - 1 : esamp; - HiVector v(m.dim1()); - for (int l = 0 ; l < m.dim1() ; l++) { - Statistics stats; - for (int s = ssamp ; s <= esamp ; s++) { - stats.AddData(&m[l][s], 1); - } - v[l] = stats.Average(); - } - return (v); -} - -/** - * @brief Find a keyword in a profile using default for non-existant keywords - * - * This template function will extract keyword values from a profile and provide - * the values at the indicated index. If the keyword does not exist or the - * indicated value at index, the provided default will be used instead. - * - */ -template - T ConfKey(const DbProfile &conf, const QString &keyname, const T &defval, - int index = 0) { - if (!conf.exists(keyname)) { return (defval); } - if (conf.count(keyname) < index) { return (defval); } - QString iValue(conf.value(keyname, index)); - T value = iValue; // This makes it work with a string? - return (value); -} - -/** - * @brief Helper function to convert values to Integers - * - * @param T Type of value to convert - * @param value Value to convert - * - * @return int Converted value - */ -template int ToInteger(const T &value) { - return (QString(value).trimmed().toInt()); -} - -/** - * @brief Helper function to convert values to doubles - * - * @param T Type of value to convert - * @param value Value to convert - * - * @return double Converted value - */ -template double ToDouble(const T &value) { - return (QString(value).trimmed().toDouble()); -} - -/** - * @brief Helper function to convert values to strings - * - * @param T Type of value to convert - * @param value Value to convert - * - * @return string Converted value - */ -template QString ToString(const T &value) { - return (toString(value).trimmed()); -} - -/** - * @brief Shortened string equality test - * - * @param v1 First value - * @param v2 Second value - * - * @return bool True if they are equal w/o regard to case - */ -inline bool IsEqual(const QString &v1, const QString &v2 = "TRUE") { - return (v1.toUpper() == v2.toUpper()); -} - -/** - * @brief Determines if the keyword value is the expected value - * - * This function checks the existance of a keyword in a profile, extracts the - * first value and tests it for equivelance to the expected value. Note this - * test is case insensitive. - * - * @param prof Profile to find the expected keyword in - * @param key Name of keyword in profile to test - * @param value Value to test for in keyword - * - * @return bool Returns true only if the keyword exists in the profile and it is - * the value expected. - */ -inline bool IsTrueValue(const DbProfile &prof, const QString &key, - const QString &value = "TRUE") { - if ( prof.exists(key) ) { - return (IsEqual(prof(key), value)); - } - return (false); -} - -/** - * @brief Checks profile flag to skip the current Module - * - * This function looks for the keyword \b Debug::SkipModule and checks its - * value. True is returned if the value is TRUE (case insensentive). - * - * @param prof Module profile from config file - * - * @return bool True if the value of the Debug::SkipModule keyword is TRUE, - * otherwise it returns false for all other values. - */ -inline bool SkipModule(const DbProfile &prof) { - return (IsTrueValue(prof, "Debug::SkipModule", "TRUE")); -} - - -inline HiMatrix appendLines(const HiMatrix &top, const HiMatrix &bottom) { - // Ensure same number samples - if (top.dim2() != bottom.dim2()) { - std::ostringstream mess; - mess << "Top buffer samples (" << top.dim2() - << ") do not match bottom buffer samples (" << bottom.dim2() - << ")"; - throw IException(IException::User, mess.str(), _FILEINFO_); - } - - int nlines(top.dim1()+bottom.dim1()); - HiMatrix mat(nlines, top.dim2()); - for (int lt = 0 ; lt < top.dim1() ; lt++) { - for (int s = 0 ; s < top.dim2() ; s++) { - mat[lt][s] = top[lt][s]; - } - } - - int topl = top.dim1(); - for (int lb = 0 ; lb < bottom.dim1() ; lb++) { - for (int s = 0 ; s < top.dim2() ; s++) { - mat[topl+lb][s] = bottom[lb][s]; - } - } - return (mat); -} - -inline HiMatrix appendSamples(const HiMatrix &left, const HiMatrix &right) { - // Ensure same number samples - if (right.dim1() != right.dim1()) { - std::ostringstream mess; - mess << "Left buffer lines (" << left.dim1() - << ") do not match right buffer lines (" << right.dim1() - << ")"; - throw IException(IException::User, mess.str(), _FILEINFO_); - } - - int nsamps(left.dim2()+right.dim2()); - HiMatrix mat(left.dim1(), nsamps); - for (int ll = 0 ; ll < left.dim1() ; ll++) { - for (int s = 0 ; s < left.dim2() ; s++) { - mat[ll][s] = left[ll][s]; - } - } - - int lefts = left.dim2(); - for (int lr = 0 ; lr < right.dim1() ; lr++) { - for (int s = 0 ; s < right.dim2() ; s++) { - mat[lr][lefts+s] = right[lr][s]; - } - } - return (mat); -} - -/** - * @brief Compute HiRISE line times - * - * This class will compute the time (in seconds) for a HiRISE observation line - * based upon the binning mode and line number. It is assumed that the first - * line will be time 0, but that is up to the caller to keep that straight. - * - * @author ????-??-?? Unknown - * - * @internal - */ -class HiLineTimeEqn { - public: - HiLineTimeEqn() : _bin(1), _ltime(1.0) { } - HiLineTimeEqn(int bin, double ltime) : _bin(bin), _ltime(ltime) { } - virtual ~HiLineTimeEqn() { } - - void setLineTime(double ltime) { _ltime = ltime; } - void setBin(int bin) { _bin = bin; } - double Time(const double line) const { - return (line * (_bin * _ltime * 1.0E-6)); - } - double operator()(const double line) const { return (Time(line)); } - - private: - double _bin; - double _ltime; -}; - -/** - * @brief Implements (classic) HiRISE temperature equation - * - * This function computes the dark current temperature and returns the results - * in electrons/sec/pixel. - * - * @param temperature Temperature (typically of the FPGA) - * @param napcm2 Dark current for silicone diodes (nano-ampres/cm^2) - * @param px Pixel size in microns - * - * @return double Dark current temperature (electrons/sec/pixel) - */ -inline double HiTempEqn(const double temperature, const double napcm2 = 2.0, - const double px = 12.0) { - double temp = temperature + 273.0; - double eg = 1.1557 - (7.021E-4 * temp * temp) / (1108.0 + temp); - const double K = 1.38E-23; - const double Q = 1.6E-19; - return (napcm2*(px*px)*2.55E7*std::pow(temp,1.5)*std::exp(-eg*Q/2.0/K/temp)); -} - -/** - * @brief Rebins a vector to a different size - * - * This function can rebin to both larger and smaller sizes. It fits the data - * to a cubic spline and then computes the value at the rebin pixel index. One - * advantage to this approach is that on input, special pixels are ignored - on - * output there will never be special pixels unless there are not enough points - * to conpute the cubic spline on which case this function throws an exception. - * - * @param v Input vector to rebin - * @param n Size of the new output vector - * - * @return HiVector - * @history 2008-11-05 Jeannie Walldren Replaced references to - * DataInterp class with NumericalApproximation. - */ -inline HiVector rebin(const HiVector &v, int n) { - if ( n == v.dim() ) { return (v); } - NumericalApproximation nterp(NumericalApproximation::CubicNatural); - double mag((double) v.dim()/ (double) n); - - for ( int i = 0 ; i < v.dim() ; i++ ) { - double x((double) i); - if ( !IsSpecial(v[i]) ) { - nterp.AddData(x,v[i]); - } - } - - // Compute the spline and fill the output vector - HiVector vout(n); - for ( int j = 0 ; j < n ; j++ ) { - double x = (double) j * mag; - vout[j] = nterp.Evaluate(x, NumericalApproximation::NearestEndpoint); - } - return (vout); -} - -/** - * @brief Deletes HiRISE specific BLOBS from cube file - * - * Ths function removes only the HiRISE specific - * - * @param label Input label associated with file from which to remove the HiRISE - * blobs - */ -inline void RemoveHiBlobs(Pvl &label) { - for ( int blob = 0 ; blob < label.objects() ; blob++ ) { - if ( label.object(blob).isNamed("Table") ) { - QString name = label.object(blob)["Name"][0]; - if ( name.toLower() == "hirise calibration ancillary" || - name.toLower() == "hirise calibration image" || - name.toLower() == "hirise ancillary" ) { - label.deleteObject(blob); - blob--; - } - } - } - return; -} - -/** - * @brief Return the statistics for a vector of data - * - * The default statistic returned is the median of the dataset but can be - * changed with a compile time change. The vector passed in will be sorted so - * that the median can be determined. If the vector has an even number of - * elements in it, the average of the two center values will be returned. The - * array is assumed to be clean data, no ISIS special pixels. - * - * @param data Vector containing data compute the statistic. It will be - * altered (sorted) upon return to the caller. - * - * @return double The median (default) of the data - */ -inline double GainLineStat(std::vector &data) { - - // Check for special conditions - if (data.size() == 0) return (Null); - if (data.size() == 1) return (data[0]); - -#if defined(USE_AVERAGE) - Statistics stats; - stats.AddData(&data[0], data.size()); - return (stat.Average()); -#else - std::sort(data.begin(), data.end()); - int meanIndex = data.size()/2; - if ((data.size() % 2) == 1) return data[meanIndex]; - return ((data[meanIndex-1]+data[meanIndex])/2.0); -#endif -} - -}; // namespace Isis -#endif diff --git a/isis/src/mro/apps/hical/LoadCSV.cpp b/isis/src/mro/apps/hical/LoadCSV.cpp deleted file mode 100644 index efa6243a9f..0000000000 --- a/isis/src/mro/apps/hical/LoadCSV.cpp +++ /dev/null @@ -1,310 +0,0 @@ -/** - * @file - * $Revision: 6715 $ - * $Date: 2016-04-28 10:58:43 -0700 (Thu, 28 Apr 2016) $ - * $Id: LoadCSV.cpp 6715 2016-04-28 17:58:43Z tsucharski@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include - -#include "LoadCSV.h" -#include "FileName.h" -#include "IException.h" - -using namespace std; - -namespace Isis { - - - LoadCSV::LoadCSV() : _base(), _csvSpecs("LoadCSV"), _data(0,0), _history() { } - - LoadCSV::LoadCSV(const QString &base, const HiCalConf &conf, - const DbProfile &profile) : _base(), _csvSpecs("LoadCSV"), - _data(0,0), _history() { - load(base, conf, profile); - } - - void LoadCSV::load(const QString &base, const HiCalConf &conf, - const DbProfile &profile) { - - // Initialize the object with necessary info - init(base, conf, profile); - - // Set up access to the CSV table. Note that HiCalConf.getMatrixSource() - // method is typically used, but the parsing has been broken up here for - // implementation purposes. - QString csvfile(conf.filepath(getValue())); - addHistory("File", csvfile); - CSVReader csv; - - // Retrieve information regarding the format within the CSV - bool colHeader(IsEqual(ConfKey(_csvSpecs,makeKey("Header"), QString("FALSE")), "TRUE")); - bool rowHeader(colHeader); // Both default to state of the {BASE}Header - if (IsEqual(getValue("ColumnHeader"), "TRUE")) colHeader = true; - if (IsEqual(getValue("RowHeader"), "TRUE")) rowHeader = true; - if (_csvSpecs.exists(makeKey("ColumnName"))) colHeader = true; - if (_csvSpecs.exists(makeKey("RowName") )) rowHeader = true; - - // Skip lines, comment headers and separator - int skip = toInt(ConfKey(_csvSpecs, makeKey("SkipLines"), toString(0))); - addHistory("SkipLines", ToString(skip)); - bool comments = IsEqual(ConfKey(_csvSpecs, makeKey("IgnoreComments"), QString("TRUE"))); - QString separator = ConfKey(_csvSpecs, makeKey("Separator"), QString(",")); - if (separator.isEmpty()) separator = ","; // Guarantees content - - // Apply conditions - csv.setComment(comments); - csv.setSkip(skip); - csv.setHeader(colHeader); - csv.setDelimiter(separator[0].toLatin1()); - if (separator[0] == ' ') csv.setSkipEmptyParts(); - - // Now read the file - FileName csvF(csvfile); - csvfile = csvF.expanded(); - try { - csv.read(csvfile); - } catch (IException &ie) { - QString mess = "Could not read CSV file \'" + csvfile + "\'"; - throw IException(IException::User, mess, _FILEINFO_); - } - - // Now get the data from the CSV table - int ncols = csv.columns(); - int nrows = csv.rows(); - - // Initial conditions selects all rows and columns - int startColumn((rowHeader) ? 1 : 0), endColumn(ncols-1); - int startRow(0), endRow(nrows-1); - - // Update columns - QString colName(getValue("ColumnName")); - if (!colName.isEmpty()) { - addHistory("ColumnName", colName); - CSVReader::CSVAxis chead = csv.getHeader(); - startColumn = getAxisIndex(colName, chead); - if (startColumn < 0) { - QString mess = "Column name " + colName + - " not found in CSV file " + csvfile; - throw IException(IException::User, mess, _FILEINFO_); - } - endColumn = startColumn; - addHistory("ColumnIndex", ToString(startColumn)); - } - else if (!(getValue("ColumnIndex").isEmpty())) { - startColumn = ToInteger(getValue("ColumnIndex")) + - ((rowHeader) ? 1 : 0); - endColumn = startColumn; - addHistory("ColumnStart", ToString(startColumn)); - addHistory("ColumnEnd", ToString(endColumn)); - } - - // Update row indicies - QString rowName(getValue("RowName")); - if (!rowName.isEmpty()) { - addHistory("RowName", rowName); - if (!rowHeader) { - string mess = "Row name given but config does not specify presence of row header!"; - throw IException(IException::User, mess, _FILEINFO_); - } - CSVReader::CSVAxis rhead = csv.getColumn(0); - startRow = getAxisIndex(rowName, rhead); - if (startRow < 0) { - QString mess = "Row name " + rowName + " not found in CSV file " + csvfile; - throw IException(IException::User, mess, _FILEINFO_); - } - endRow = startRow; - addHistory("RowIndex", ToString(startRow)); - } - else if (!(getValue("RowIndex").isEmpty())) { - startRow = ToInteger(getValue("RowIndex")); - if (rowHeader) startRow++; - endRow = startRow; - addHistory("RowStart", ToString(startRow)); - addHistory("RowEnd", ToString(endRow)); - } - - // Now ready to read all row/columns and convert to matrix - int drows(endRow-startRow+1); - int dcols(endColumn-startColumn+1); - HiMatrix d(drows, dcols); - vector errors; - for (int r = startRow, hr = 0 ; r <= endRow ; r++, hr++) { - CSVReader::CSVAxis row = csv.getRow(r); - for (int c = startColumn, hc = 0 ; c <= endColumn ; c++, hc++) { - try { - d[hr][hc] = ToDouble(row[c]); - } - catch (...) { - std::ostringstream mess; - mess << "Invalid real value (" << row[c] << ") in row index " << r; - if (!rowName.isEmpty()) mess << " (Name:" << rowName << ")"; - mess << ", column index " << c; - if (!colName.isEmpty()) mess << " (Name:" << colName << ")"; - errors.push_back(mess.str().c_str()); - d[hr][hc] = Null; - } - } - } - - // Save data anyway - _data = d; - - // Check for errors - if (errors.size() > 0) { - //iException::Clear(); Not sure how this could ever do anything - std::ostringstream mess; - mess << "Conversion errors in CSV file " + csvfile + ": Errors: "; - - std::vector::const_iterator it = errors.begin(); - - while (it != errors.end()) { - mess << *it << "; "; - it++; - } - throw IException(IException::User, mess.str(), _FILEINFO_); - } - return; - } - - - QString LoadCSV::filename() const { - return (getValue()); - } - - int LoadCSV::size() const { - return (_data.dim1() * _data.dim2()); - } - - bool LoadCSV::validateSize(const int &expected, const bool &throw_on_error) - const { - if (expected != size()) { - if (!throw_on_error) return (false); - ostringstream mess; - mess << "Invalid count (Expected: " << expected << ", Received: " - << size() << ") in CSV file " << getValue(); - throw IException(IException::User, mess.str(), _FILEINFO_); - } - return (true); - } - - HiVector LoadCSV::getVector() const { - HiVector v(size(), const_cast (_data[0])); - return (v.copy()); - } - - HiMatrix LoadCSV::getMatrix() const { - return (_data.copy()); - } - - - void LoadCSV::History(HiHistory &history) const { - std::ostringstream mess; - mess << "LoadCSV("; - string comma(""); - for (unsigned int i = 0 ; i < _history.size() ; i++) { - mess << comma << _history[i]; - comma = ","; - } - mess << ")"; - history.add(mess.str().c_str()); - return; - } - - void LoadCSV::init(const QString &base, const HiCalConf &conf, - const DbProfile &profile) { - _base = base; - _csvSpecs = ResolveKeys(base, conf, profile); - _history.clear(); - return; - } - - void LoadCSV::addHistory(const QString &element, - const QString &desc) { - std::ostringstream mess; - mess << element << "[" << desc << "]"; - _history.push_back(mess.str().c_str()); - } - - void LoadCSV::getKeyList(const QString &base, - std::vector &keys) const { - keys.clear(); - keys.push_back(base); - keys.push_back(base+"IgnoreComments"); - keys.push_back(base+"ColumnHeader"); - keys.push_back(base+"ColumnName"); - keys.push_back(base+"ColumnIndex"); - keys.push_back(base+"RowHeader"); - keys.push_back(base+"RowName"); - keys.push_back(base+"RowIndex"); - keys.push_back(base+"SkipLines"); - keys.push_back(base+"Header"); - keys.push_back(base+"Separator"); - return; - } - - DbProfile LoadCSV::ResolveKeys(const QString &base, const HiCalConf &conf, - const DbProfile &prof) const { - vector keys; - getKeyList(base, keys); - DbProfile keyprof("LoadCSV"); - for (unsigned int i = 0 ; i < keys.size() ; i++) { - QString kvalue = ParsedKey(keys[i], conf, prof); - if (!kvalue.isEmpty()) keyprof.add(keys[i], kvalue); - } - return (keyprof); - } - - QString LoadCSV::ParsedKey(const QString &key, const HiCalConf &conf, - const DbProfile &prof) const { - QString value(""); - if (prof.exists(key)) { - value = conf.resolve(prof(key), prof); - } - return (value); - } - - QString LoadCSV::makeKey(const QString &suffix) const { - QString key = _base + suffix; - return (key); - } - - QString LoadCSV::getValue(const QString &suffix) const { - QString key = makeKey(suffix); - QString value(""); - if (_csvSpecs.exists(key)) value = _csvSpecs(key); - return (value); - } - - int LoadCSV::getAxisIndex(const QString &name, - const CSVReader::CSVAxis &header) const { - QString head = QString(name).trimmed(); - for (int i = 0 ; i < header.dim() ; i++) { - if (head.toLower() == QString(header[i]).toLower().trimmed()) { - return (i); - } - } - return (-1); - } - -} // namespace ISIS diff --git a/isis/src/mro/apps/hical/LoadCSV.h b/isis/src/mro/apps/hical/LoadCSV.h deleted file mode 100644 index 58e3e06049..0000000000 --- a/isis/src/mro/apps/hical/LoadCSV.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef LoadCSV_h -#define LoadCSV_h -/** - * @file - * $Revision - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: LoadCSV.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "CSVReader.h" - -namespace Isis { - - class iException; - - /** - * @brief Provides generalized access to HiRISE calibration CSV files - * - * This class will load a CSV file and extract rows and/or columns based upon - * a HiRISE calibration profile properly configured to define the format of - * the CSV file. - * - * It will utilize the HiCalConf object to extract keywords/parameters from a - * base name of a keyword set. For eaxample, if the a profile contains a CSV - * file profile with a keyword called "AMatrix" that specifies the pattern - * used to determine the appropriate file, then additional keywords can be - * specfied that information about the format of the CSV file. Other keywords - * are: AMatrixColumnHeader, AMatrixRowHeader, AMatrixColumnName, - * AMatrixRowName, AMatrixColumnIndex and AMatrixRowIndex. - * - * Note that all HiRISE CSV files must conform to this format. All blank - * lines of lines that start with a '#' (comment) are ignored when the CSV - * files is read in. - * - * Note this object is reentrant. You can load successive CSV files one after - * the other using the same object. - * - * @ingroup Utility - * - * @author 2010-04-06 Kris Becker - * - * @internal - */ - class LoadCSV { - - public: - // Constructors and Destructor - LoadCSV(); - LoadCSV(const QString &base, const HiCalConf &conf, - const DbProfile &profile); - - /** Destructor */ - virtual ~LoadCSV() { } - - void load(const QString &base, const HiCalConf &conf, - const DbProfile &profile); - - QString filename() const; - int size() const; - - bool validateSize(const int &expected, - const bool &throw_on_error = false) - const; - - HiVector getVector() const; - HiMatrix getMatrix() const; - - void History(HiHistory &history) const; - - private: - QString _base; - DbProfile _csvSpecs; - HiMatrix _data; - std::vector _history; - - void init(const QString &base, const HiCalConf &conf, - const DbProfile &profile); - void addHistory(const QString &element, const QString &desc); - void getKeyList(const QString &base, std::vector &keys) - const; - DbProfile ResolveKeys(const QString &base, const HiCalConf &conf, - const DbProfile &prof) const; - QString ParsedKey(const QString &key, const HiCalConf &conf, - const DbProfile &prof) const; - QString makeKey(const QString &ksuffix = "") const; - QString getValue(const QString &ksuffix = "") const; - HiMatrix extract (const CSVReader &csv); - int getAxisIndex(const QString &name, - const CSVReader::CSVAxis &header) const; - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/LowPassFilter.h b/isis/src/mro/apps/hical/LowPassFilter.h deleted file mode 100644 index 1526633c55..0000000000 --- a/isis/src/mro/apps/hical/LowPassFilter.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef LowPassFilter_h -#define LowPassFilter_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: LowPassFilter.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include - -#include "IString.h" -#include "HiCalUtil.h" -#include "Module.h" -#include "QuickFilter.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief Compute a low pass filter from a Module class content - * - * @ingroup Utility - * - * @author 2007-10-09 Kris Becker - * - * @internal - */ - class LowPassFilter : public Module { - - public: - // Constructors and Destructor - LowPassFilter() : Module("LowPassFilter"), _width(3), - _iterations(1) { } - LowPassFilter(int width, int iterations = 1) : - Module("LowPassFilter"), _width(width), _iterations(iterations) { } - - LowPassFilter(const Module &c, int width = 3, int iterations = 1) : - Module("LowPassFilter", c), _width(width), - _iterations(iterations) { - _data = filterIterator(c.ref(), _width, _iterations); - _history.add(formHistory()); - } - - LowPassFilter(const HiVector &v, const HiHistory &h, - int width = 3, int iterations = 1) : - Module("LowPassFilter", h), _width(width), - _iterations(iterations) { - _data = filterIterator(v, _width, _iterations); - _history.add(formHistory()); - } - - /** Destructor */ - virtual ~LowPassFilter() { } - - void Process(const HiVector &v) { - _data = filterIterator(v, _width, _iterations); - _history.clear(); - _history.add(formHistory()); - } - - inline int Width() const { return (_width); } - - private: - int _width; //!< Filter width - int _iterations; // Number iterations to apply filter - - QString formHistory() { - return (QString("LowPassFilter(Width[" + ToString(_width) + - "],Iters["+ToString(_iterations)+"])")); - } - - HiVector filterIterator(const HiVector &v, int width, int iterations) { - HiVector vout(v.copy()); - for (int i = 0 ; i < iterations; i++) { - vout = filter(vout,width); - } - return (vout); - } - - HiVector filter(const HiVector &v, int width) { - QuickFilter lowpass(v.dim(), width, 1); - lowpass.AddLine(&v[0]); - HiVector vout(v.dim()); - for (int i = 0 ; i < v.dim() ; i ++) { - vout[i] = lowpass.Average(i); - } - return (vout); - } - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/Module.h b/isis/src/mro/apps/hical/Module.h deleted file mode 100644 index 63ec37255c..0000000000 --- a/isis/src/mro/apps/hical/Module.h +++ /dev/null @@ -1,210 +0,0 @@ -#ifndef Module_h -#define Module_h -/** - * @file - * $Revision: 6715 $ - * $Date: 2016-04-28 10:58:43 -0700 (Thu, 28 Apr 2016) $ - * $Id: Module.h 6715 2016-04-28 17:58:43Z tsucharski@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include -#include -#include -#include - -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "LoadCSV.h" -#include "PvlKeyword.h" -#include "PvlGroup.h" -#include "IException.h" - -namespace Isis { - - class PvlGroup; - - /** - * @brief Module manages HiRISE calibration vectors from various sources - * - * @ingroup Utility - * @author 2007-10-05 Kris Becker - * @internal - * @history 2010-04-16 Kris Becker Added load method for standardized - * access to CSV files; renamed to Module from Component - */ - class Module { - public: - friend std::ostream &operator<<(std::ostream &o, const Module &c) { - c.printOn(o); - return (o); - } - - public: - // Constructors and Destructor - Module() : _name("Module"), _csvFile(""), _data(), _history(), - _fmtWidth(DefaultWidth), _fmtPrecision(DefaultPrecision) { } - Module(const QString &name) : _name(name), _csvFile(""), _data(), - _history(),_fmtWidth(DefaultWidth), - _fmtPrecision(DefaultPrecision) { } - Module(const QString &name, const HiHistory &history) : - _name(name), _csvFile(""), _data(), _history(history), - _fmtWidth(DefaultWidth), _fmtPrecision(DefaultPrecision) { } - Module(const QString &name, const Module &c) : _name(name), - _csvFile(c._csvFile), _data(c._data), _history(c._history), - _fmtWidth(c._fmtWidth),_fmtPrecision(c._fmtPrecision) { } - Module(const Module &c) : _name(c._name), _csvFile(c._csvFile), - _data(c._data), _history(c._history), - _fmtWidth(c._fmtWidth), - _fmtPrecision(c._fmtPrecision) { } - - - /** Destructor */ - virtual ~Module() { } - - /** Returns name of component */ - inline QString name() const { return (_name); } - /** Returns expanded name of last CSV file loaded by loadCsv */ - inline QString getcsvFile() const { return (_csvFile); } - /** Returns the size (number of elements) of data array */ - inline int size() const { return (_data.dim()); } - - /** Invokes the process method on the Module vector */ - virtual void Process(const Module &c) { - Process(c.ref()); - } - - /** Default processing behavior makes a reference copy of data array */ - virtual void Process(const HiVector &v) { - _data = v; - return; - } - - /** - * @brief Provide generic loading of CSV file for all modules - * - * This method provides generalized access to CSV files through the - * standardized format. - * - * @author Kris Becker - 4/16/2010 - * - * @param cvsBase Name of base keyword for CSV file - * @param conf Configuration parameters - * @param prof Module profile parameters - * @param samples Number of expect elements to be read from CSV file - * - * @return HiVector - */ - HiVector loadCsv(const QString &csvBase, const HiCalConf &conf, - const DbProfile &prof, const int &elements = 0) { - LoadCSV csv(csvBase, conf, prof); - _csvFile = csv.filename(); - if (elements != 0) csv.validateSize(elements, true); - csv.History(_history); - return (csv.getVector()); - } - - /** Return data via a const reference */ - const HiVector &ref() const { return (_data); } - /** Return individual element of the data vector */ - inline double operator()(int index) const { return (_data[index]);} - - /** Return recorded history of events */ - const HiHistory &History() const { return (_history); } - - /** Record history in Pvl group object */ - virtual void record(PvlGroup &pvl, - const QString keyname = "ModuleHistory") - const { - pvl += _history.makekey(keyname); - return; - } - - /** - * @brief Dumps the component to a specified file - * - * @param fname Name of file to dump contents to - */ - void Dump(const QString &fname) const { - FileName dumpc(fname); - QString dumpcFile = dumpc.expanded(); - std::ofstream ofile(dumpcFile.toLatin1().data(), std::ios::out); - if (!ofile) { - QString mess = "Unable to open/create module dump file " + - dumpc.expanded(); - throw IException(IException::User, mess, _FILEINFO_); - } - ofile << *this; - ofile.close(); - return; - } - - - protected: - enum { DefaultWidth = 10, DefaultPrecision = 6}; - - QString _name; //!< Name of component - QString _csvFile; //!< Fully expanded name of CSV file if present - HiVector _data; //!< Data vector - HiHistory _history; //!< Hierarchial component history - int _fmtWidth; //!< Default field with of double - int _fmtPrecision; //!< Default field with of double - - - /** - * @brief Properly format values that could be special pixels - * - * This method applies ISIS special pixel value conventions to properly - * print pixel values. - * - * @param[in] (double) value Input value to test for specialness and print - * as requested by caller - * @param[in] (int) width Width of field in which to print the value - * @param[in] (int) prec Precision used to format the value - * @return (string) Formatted double value - */ - inline QString formatDbl(const double &value) const { - std::ostringstream ostr; - if (IsSpecial(value)) { - ostr << std::setw(_fmtWidth) << PixelToString(value); - return (QString(ostr.str().c_str())); - } - else { - // Its not special so format to callers specs - ostr << std::setw(_fmtWidth) << std::setprecision(_fmtPrecision) << value; - return (QString(ostr.str().c_str())); - } - } - - /** Default printing of data in module */ - virtual void printOn(std::ostream &o) const { - o << "# History = " << _history << std::endl; - o << "# Count = " << _data.dim() << std::endl; - for (int i = 0 ; i < _data.dim() ; i++) { - o << formatDbl(_data[i]) << std::endl; - } - return; - } - - }; - -} // namespace Isis -#endif diff --git a/isis/src/mro/apps/hical/NonLinearLSQ.cpp b/isis/src/mro/apps/hical/NonLinearLSQ.cpp deleted file mode 100644 index a116a07996..0000000000 --- a/isis/src/mro/apps/hical/NonLinearLSQ.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @file - * $Revision: 7140 $ - * $Date: 2016-09-27 15:40:47 -0700 (Tue, 27 Sep 2016) $ - * $Id: NonLinearLSQ.cpp 7140 2016-09-27 22:40:47Z jwbacker@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -// std lib -#include -#include -#include -#include -#include - -// gsl lib -#include -#include -#include - -// Isis lib -#include "IException.h" -#include "IString.h" -#include "NonLinearLSQ.h" - -using namespace std; - -namespace Isis { - - -int NonLinearLSQ::curvefit() { - - size_t n(nSize()); - size_t p(nParms()); - - // Initialize the solver function information - _nlsqPointer d = { this }; - gsl_multifit_function_fdf mf; - mf.f = &f; - mf.df = &df; - mf.fdf = &fdf; - mf.n = n; - mf.p = p; - mf.params = &d; - - const gsl_multifit_fdfsolver_type *T = gsl_multifit_fdfsolver_lmsder; - gsl_multifit_fdfsolver *s = gsl_multifit_fdfsolver_alloc(T, n, p); - - _fitParms = guess(); - gsl_vector *x = NlsqTogsl(_fitParms); - gsl_matrix *covar = gsl_matrix_alloc(p, p); - gsl_multifit_fdfsolver_set(s, &mf, x); - - _nIters = 0; - checkIteration(_nIters, gslToNlsq(s->x), NLVector(p,999.0), - gsl_blas_dnrm2(s->f), GSL_CONTINUE); - - - gsl_matrix *J = gsl_matrix_alloc(n, p); - do { - _nIters++; - - _status = gsl_multifit_fdfsolver_iterate(s); - _fitParms = gslToNlsq(s->x); - - gsl_multifit_fdfsolver_jac(s, J); - gsl_multifit_covar(J, 0.0, covar); - _uncert = getUncertainty(covar); - - _status = checkIteration(_nIters, _fitParms, _uncert, gsl_blas_dnrm2(s->f), - _status); - if ( _status ) { break; } - if(!doContinue()) { break; } - - _status = gsl_multifit_test_delta(s->dx, s->x, absErr(), relErr()); - } while ((_status == GSL_CONTINUE) && (_nIters < _maxIters)); - - // Clean up - gsl_multifit_fdfsolver_free(s); - gsl_matrix_free(covar); - gsl_matrix_free(J); - - return (_status); -} - - -void NonLinearLSQ::Terminate(const QString &message) { - _userMessage = message; - _userTerminated = true; - _status = GSL_SUCCESS; - return; -} - -void NonLinearLSQ::Abort(const QString &reason) { - _userMessage = reason; - _userTerminated = true; - _status = GSL_FAILURE; - return; -} - - -int NonLinearLSQ::f(const gsl_vector *x, void *params, gsl_vector *fx) { - NonLinearLSQ *nlsq = (static_cast<_nlsqPointer *> (params))->nlsq; - int n = nlsq->nSize(); - NLVector fxv = nlsq->f_x(nlsq->gslToNlsq(x)); - for (int i = 0 ; i < n ; i++ ) { - gsl_vector_set(fx, i, fxv[i]); - } - return (GSL_SUCCESS); -} - -int NonLinearLSQ::df(const gsl_vector *x, void *params, gsl_matrix *J) { - NonLinearLSQ *nlsq = (static_cast<_nlsqPointer *> (params))->nlsq; - int n = nlsq->nSize(); - int p = nlsq->nParms(); - - NLMatrix m = nlsq->df_x(nlsq->gslToNlsq(x)); - - for (int i = 0 ; i < n ; i++ ) { - for (int j = 0 ; j < p ; j++ ) { - gsl_matrix_set(J, i, j, m[i][j]); - } - } - return (GSL_SUCCESS); -} - -int NonLinearLSQ::fdf(const gsl_vector *x, void *params, gsl_vector *fx, - gsl_matrix *J) { - f(x,params,fx); - df(x,params,J); - return (GSL_SUCCESS); -} - - -NonLinearLSQ::NLVector NonLinearLSQ::getUncertainty(const gsl_matrix *covar) - const { - NLVector unc(covar->size1); - for (size_t i = 0 ; i < covar->size1 ; i++ ) { - unc[i] = sqrt(gsl_matrix_get(covar, i, i)); - } - return (unc); -} - -NonLinearLSQ::NLVector NonLinearLSQ::gslToNlsq(const gsl_vector *v) const { - size_t n = v->size; - NLVector Nv(n); - for (size_t i = 0 ; i < n ; i++) { - Nv[i] = gsl_vector_get(v, i); - } - return (Nv); -} - -NonLinearLSQ::NLMatrix NonLinearLSQ::gslToNlsq(const gsl_matrix *m) const { - size_t nrows = m->size1; - size_t ncols = m->size2; - NLMatrix Nm(nrows, ncols); - for (size_t i = 0 ; i < nrows ; i++) { - for (size_t j = 0 ; j < ncols ; j++) { - Nm[i][j] = gsl_matrix_get(m,i,j); - } - } - return (Nm); -} - -gsl_vector *NonLinearLSQ::NlsqTogsl(const NonLinearLSQ::NLVector &v, - gsl_vector *gv) const { - if (gv == 0) { - gv = gsl_vector_alloc(v.dim()); - } - else if (gv->size != (size_t) v.dim()) { - ostringstream mess; - mess << "Size of NL vector (" << v.dim() << ") not same as GSL vector (" - << gv->size << ")"; - throw IException(IException::Programmer, mess.str(), _FILEINFO_); - } - - for (int i = 0 ; i < v.dim() ; i++) { - gsl_vector_set(gv, i, v[i]); - } - return (gv); -} - -gsl_matrix *NonLinearLSQ::NlsqTogsl(const NonLinearLSQ::NLMatrix &m, - gsl_matrix *gm) const { - if (gm == 0) { - gm = gsl_matrix_alloc(m.dim1(), m.dim2()); - } - else if ((gm->size1 != (size_t) m.dim1()) && - (gm->size2 != (size_t) m.dim2()) ) { - ostringstream mess; - mess << "Size of NL matrix (" << m.dim1() << "," << m.dim2() - << ") not same as GSL matrix (" << gm->size1 << "," << gm->size2 - << ")"; - throw IException(IException::Programmer, mess.str(), _FILEINFO_); - } - - for (int i = 0 ; i < m.dim1() ; i++) { - for (int j = 0 ; j < m.dim2() ; j++) { - gsl_matrix_set(gm, i, j, m[i][j]); - } - } - return (gm); -} - -} // namespace ISIS diff --git a/isis/src/mro/apps/hical/NonLinearLSQ.h b/isis/src/mro/apps/hical/NonLinearLSQ.h deleted file mode 100644 index 35356bd256..0000000000 --- a/isis/src/mro/apps/hical/NonLinearLSQ.h +++ /dev/null @@ -1,161 +0,0 @@ -#ifndef NonLinearLSQ_h -#define NonLinearLSQ_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: NonLinearLSQ.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "IException.h" - -namespace Isis { - - /** - * @brief NonLinearLSQ Computes a fit using a Levenberg-Marquardt algorithm - * - * This virtual base class uses the GSL toolkit to apply the - * Levenberg-Marquardt algorithm to fit data to a non-linear equation using - * least squares. - * - * @ingroup Utility - * @author 2007-11-15 Kris Becker - * - * @internal - */ - class NonLinearLSQ { - public: - typedef TNT::Array1D NLVector; - typedef TNT::Array2D NLMatrix; - - // Constructors and Destructor - NonLinearLSQ() : _fitParms(), _uncert(), _nIters(0), _maxIters(50), - _status(0), _userTerminated(false), _userMessage() {} - - /** Destructor */ - virtual ~NonLinearLSQ() { } - - virtual int nSize() const = 0; - virtual int nParms() const = 0; - - /** - * @brief Sets the maximum number of iterations - * - * @param m User provides the maximum number iterations - */ - void setMaxIters(int m) { _maxIters = m; } - - /** - * @brief Maximum number iterations for valid solution - * - * - * @return int Maximum resolutions - */ - int maxIters() const { return (_maxIters); } - - virtual NLVector guess() = 0; - virtual NLVector f_x(const NLVector &x) = 0; - virtual NLMatrix df_x(const NLVector &x) = 0; - - virtual double absErr() const { return (1.0E-4); } - virtual double relErr() const { return (1.0E-4); } - - int curvefit(); - /** Return status of last fit processing */ - inline int status() const { return (_status); } - /** Determine success from last fit processing */ - inline bool success() const { return (_status == GSL_SUCCESS); } - /** Check status for success of the given condition */ - inline bool success(int status) const { return (status == GSL_SUCCESS); } - /** Return error message pertaining to last fit procesing */ - inline QString statusstr() const { - return (QString(gsl_strerror(_status))); - } - /** Return error message given status condition */ - inline QString statusstr(int status) const { - return (QString(gsl_strerror(status))); - } - - /** Default interation test simply returns input status */ - virtual int checkIteration(const int Iter, const NLVector &fitcoefs, - const NLVector &uncerts, double cplxconj, - int Istatus) { - return (Istatus); - } - - /** Return coefficients from last fit processing */ - inline NLVector coefs() const { return (_fitParms); } - /** Return uncertainties from last fit processing */ - inline NLVector uncert() const { return (_uncert); } - /** Return number of iterations from last fit processing */ - inline int nIterations() const { return (_nIters); } - - protected: - void Terminate(const QString &message = ""); - void Abort(const QString &reason = ""); - - bool doContinue() const { return (!_userTerminated); } - - - private: - NLVector _fitParms; - NLVector _uncert; - int _nIters; - int _maxIters; - int _status; - bool _userTerminated; - QString _userMessage; - - struct _nlsqPointer { - NonLinearLSQ *nlsq; - }; - static int f(const gsl_vector *x, void *params, gsl_vector *fx); - static int df(const gsl_vector *x, void *params, gsl_matrix *J); - static int fdf(const gsl_vector *x, void *params, gsl_vector *fx, - gsl_matrix *J); - - NLVector gslToNlsq(const gsl_vector *v) const; - NLMatrix gslToNlsq(const gsl_matrix *m) const; - gsl_vector *NlsqTogsl(const NLVector &v, gsl_vector *gv = 0) const; - gsl_matrix *NlsqTogsl(const NLMatrix &m, gsl_matrix *gm = 0) const; - NLVector getUncertainty(const gsl_matrix *m) const; - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/SplineFill.h b/isis/src/mro/apps/hical/SplineFill.h deleted file mode 100644 index 219d93dec6..0000000000 --- a/isis/src/mro/apps/hical/SplineFill.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef SplineFill_h -#define SplineFill_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: SplineFill.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include -#include - -#include "IString.h" -#include "Module.h" -#include "NumericalApproximation.h" -#include "SpecialPixel.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief Compute a low pass filter from a Module class content - * - * @ingroup Utility - * - * @author 2007-10-09 Kris Becker - * - * @internal - * @history 2008-11-05 Jeannie Walldren Replaced references to - * DataInterp class with NumericalApproximation. - */ - class SplineFill : public Module { - - public: - // Constructors and Destructor - SplineFill() : Module("SplineFill"), _filled(0) { } - - SplineFill(const Module &c) : - Module("SplineFill", c), _filled(0) { - fill(c.ref()); - _history.add(formHistory()); - } - - SplineFill(const HiVector &v) : - Module("SplineFill"), _filled(0) { - fill(v); - _history.add(formHistory()); - } - SplineFill(const HiVector &v, const HiHistory &h) : - Module("SplineFill", h), _filled(0) { - fill(v); - _history.add(formHistory()); - } - - /** Destructor */ - virtual ~SplineFill() { } - - void Process(const HiVector &v) { - fill(v); - _history.clear(); - _history.add(formHistory()); - } - - inline int Filled() const { return (_filled); } - - private: - int _filled; //!< Number values replaced - - QString formHistory() { - QString cfilled(toString(_filled)); - return (QString("SplineFill(Cubic,Filled[" + cfilled + "])")); - } - - void fill(const HiVector &v) { - NumericalApproximation spline(NumericalApproximation::CubicNatural); - for (int i = 0 ; i < v.dim() ; i++) { - if (!IsSpecial(v[i])) { - spline.AddData(i, v[i]); - } - } - - // Compute the spline and fill missing data - HiVector vout(v.dim()); - _filled = 0; - for (int j = 0 ; j < v.dim() ; j++) { - if (IsSpecial(v[j])) { - vout[j] = spline.Evaluate(j,NumericalApproximation::NearestEndpoint); - _filled++; - } - else { - vout[j] = v[j]; - } - } - - _data = vout; - return; - } - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/ZeroBufferFit.cpp b/isis/src/mro/apps/hical/ZeroBufferFit.cpp deleted file mode 100644 index 617faa6602..0000000000 --- a/isis/src/mro/apps/hical/ZeroBufferFit.cpp +++ /dev/null @@ -1,354 +0,0 @@ -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: ZeroBufferFit.cpp 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include -#include - -#include "ZeroBufferFit.h" -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "LeastSquares.h" -#include "LowPassFilter.h" -#include "MultivariateStatistics.h" -#include "IException.h" - -using namespace std; - -namespace Isis { - - /** - * @brief Compute second level drift correction (Zf module) - * - * This class provides the second level drift correction that is - * - * - * @param conf - */ - ZeroBufferFit::ZeroBufferFit(const HiCalConf &conf) : - NonLinearLSQ(), Module("ZeroBufferFit") { - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - _timet.setBin(ToInteger(prof("Summing"))); - _timet.setLineTime(ToDouble(prof("ScanExposureDuration"))); - - _skipFit = IsEqual(ConfKey(prof, "ZeroBufferFitSkipFit", QString("TRUE")), "TRUE"); - _useLinFit = IsTrueValue(prof, "ZeroBufferFitOnFailUseLinear"); - - - _absErr = toDouble(ConfKey(prof, "AbsoluteError", toString(1.0E-4))); - _relErr = toDouble(ConfKey(prof, "RelativeError", toString(1.0E-4))); - - _sWidth = toInt(ConfKey(prof, "GuessFilterWidth", toString(17))); - _sIters = toInt(ConfKey(prof, "GuessFilterIterations", toString(1))); - - if ( prof.exists("MaximumIterations") ) { - setMaxIters(ToInteger(prof("MaximumIterations"))); - } - - _maxLog = toDouble(ConfKey(prof, "MaximumLog", toString(709.0))); - _badLines = ToInteger(prof("TrimLines"))/ToInteger(prof("Summing")); - _minLines = toInt(ConfKey(prof,"ZeroBufferFitMinimumLines", toString(100))); - - - QString histstr = "ZeroBufferFit(AbsErr[" + ToString(_absErr) + - "],RelErr[" + ToString(_relErr) + - "],MaxIter[" + ToString(maxIters()) + "])"; - _history.add(histstr); - - } - - /** - * @brief Compute non-linear fit to (typically) ZeroBufferSmooth module - * - * This method computes a non-linear fit to the result of the - * ZeroBufferSmooth module. There are several things that can go wrong and - * some config conditions that dictate behavior of this process. - * - * Should the image be a short exposure (i.e., not many lines) the fit will - * not succeed so it simply skips this entire module providing the input - * result (d) as the solution. This wil also occur when the user has selected - * the skip option for the module. - * - * A fit is attempted on the ZeroBufferSmooth data. The non-linear solution - * must converge within the specifed number of iterations (MaximumIterations) - * or a polynomial fit will be used in leui of a valid solution. - * - * @param d ZeroBufferSmooth data solution as input to this method - * - * @return HiVector Returns result of the processing - */ - HiVector ZeroBufferFit::Solve(const HiVector &d) { - ostringstream hist; - _data = d; - if ( _skipFit || (!gotGoodLines(d))) { - _b2 = _data; - _coefs = HiVector(4, 0.0); - _uncert = _coefs; - _cc = HiVector(2, 0.0); - _chisq = 0.0; - if ( !gotGoodLines(d) ) { - hist << "NotEnoughLines(GoodLines[" << goodLines(d) - << "],MinimumLines[" << _minLines << "]);"; - } - - hist << "SkipFit(TRUE: Not using LMFit)"; - _history.add(hist.str().c_str()); - } - else { - hist << "Fit("; - _b2 = HiVector(goodLines(_data)); - if ( success(curvefit()) ) { - _coefs = coefs(); - _uncert = uncert(); - hist << "Solved,#Iters[" << nIterations() << "],ChiSq[" << Chisq() - << "],DoF[" << DoF() << "])"; - _history.add(hist.str().c_str()); - _history.add("a0("+ToString(_coefs[0])+"+-"+ToString(_uncert[0])+")"); - _history.add("a1("+ToString(_coefs[1])+"+-"+ToString(_uncert[1])+")"); - _history.add("a2("+ToString(_coefs[2])+"+-"+ToString(_uncert[2])+")"); - _history.add("a3("+ToString(_coefs[3])+"+-"+ToString(_uncert[3])+")"); - } - else { - // Punt, fit a straight line to the data - _cc = poly_fit(d); - HiVector a(4); - a[0] = _cc[0]; - a[1] = _cc[1]; - a[2] = 0.0; - a[3] = 0.0; - _coefs = a; - - hist << "Failed::Reason("<< statusstr() << "),#Iters[" - << nIterations() << "])"; - _history.add(hist.str().c_str()); - _history.add("a0("+ToString(_coefs[0])+")"); - _history.add("a1("+ToString(_coefs[1])+")"); - _history.add("a2("+ToString(_coefs[2])+")"); - _history.add("a3("+ToString(_coefs[3])+")"); - if ( _useLinFit ) { - _history.add("OnFailureUse(LinearFit(Zf))"); - } - else { - _skipFit = true; - _history.add("OnFailureUse(ZfBuffer)"); - } - } - } - return (Yfit()); - } - - /** - * @brief Compute the initial guess of the fit - * - * This method provides the non-linear fit with an initial guess of the - * solution. It involves a linear fit to the latter half of the data to - * provide the first two coefficents, the difference of the averages of the - * residuals at both ends of the data set and 5 times the last line time as - * the final (fourth) element...a bit involved really. - * - * @return NLVector 4-element vector of the initial guess coefficients - */ - NonLinearLSQ::NLVector ZeroBufferFit::guess() { - int n = _data.dim(); - int nb = n - _badLines; - - HiVector b1 = _data.subarray(0, nb-1); - LowPassFilter gfilter(b1, _history, _sWidth, _sIters); - - int nb2 = nb/2; - _b2 = gfilter.ref(); - HiVector cc = poly_fit(_b2.subarray(nb2,_b2.dim()-1), nb2-1); - - // Compute the 3rd term guess by getting the average of the residual - // at both ends of the data set. - Statistics s; - - // Get the head of the data set - int n0 = MIN(nb, 20); - for ( int k = 0 ; k < n0 ; k++ ) { - double d = _b2[k] - (cc[0] + cc[1] * _timet(k)); - s.AddData(&d, 1); - } - double head = s.Average(); - - // Get the tail of the data set - s.Reset(); - n0 = (int) (0.9 * nb); - for ( int l = n0 ; l < nb ; l++ ) { - double d = _b2[l] - (cc[0] + cc[1] * _timet(l)); - s.AddData(&d, 1); - } - double tail = s.Average(); - - // Populate the guess with the results - NLVector g(4, 0.0); - g[0] = cc[0]; - g[1] = cc[1]; - g[2] = head-tail; - g[3] = -5.0/_timet(nb-1); - _guess = g; - _history.add("Guess["+ToString(_guess[0])+ ","+ - ToString(_guess[1])+ ","+ - ToString(_guess[2])+ ","+ - ToString(_guess[3])+ "]"); - return (g); - } - - /** - * @brief Computes the interation check for convergence - * - * @param Iter Current iteration - * @param fitcoefs Vector of current fit coefficients - * @param uncerts Uncertainties - * @param cplxconj Complex conjugate of the current iteration - * @param Istatus State of current iteration - * - * @return int Simply passes on the Istatus value - */ - int ZeroBufferFit::checkIteration(const int Iter, const NLVector &fitcoefs, - const NLVector &uncerts, double cplxconj, - int Istatus) { - _chisq = pow(cplxconj, 2.0); - return (Istatus); - } - - /** Computes the function value at the current iteration */ - NonLinearLSQ::NLVector ZeroBufferFit::f_x(const NLVector &a) { - double a0 = a[0]; - double a1 = a[1]; - double a2 = a[2]; - double a3 = a[3]; - - int n = _b2.dim(); - NLVector f(n); - for (int i = 0 ; i < n ; i++) { - double lt = _timet(i); - double et = a3 * lt; - double Yi = a0 + (a1 * lt) + a2 * exp(MIN(et,_maxLog)); - f[i] = (Yi - _b2[i]); - } - return (f); - } - - /** Computes the first derivative of the function at the current iteration */ - NonLinearLSQ::NLMatrix ZeroBufferFit::df_x(const NLVector &a) { - // double a0 = a[0]; - // double a1 = a[1]; - double a2 = a[2]; - double a3 = a[3]; - - int n = _b2.dim(); - NLMatrix J(n, 4); - for (int i = 0; i < n; i++) { - double lt = _timet(i); - double et = a3 * lt; - double p0 = exp (MIN(et,_maxLog)); - J[i][0] = 1.0; - J[i][1] = lt; - J[i][2] = p0; - J[i][3] = a2 * lt * p0; - } - return (J); - } - - /** Computes the solution vector using current coefficents */ - HiVector ZeroBufferFit::Yfit() const { - if ( _skipFit || (!gotGoodLines(_data))) { - return (_data.copy()); - } - else { - HiVector dcorr(_data.dim()); - HiVector a = _coefs; - for ( int i = 0 ; i < dcorr.dim() ; i++ ) { - double lt = _timet(i); - dcorr[i] = a[0] + (a[1] * lt) + a[2] * exp(a[3] * lt); - } - return (dcorr); - } - } - - /** Compute normalized solution vector from result */ - HiVector ZeroBufferFit::Normalize(const HiVector &v) { - - HiVector vNorm(v.dim()); - double v0 = v[0]; - for ( int i = 0 ; i < v.dim() ; i++ ) { - vNorm[i] = v[i] - v0; - } - _history.add("Normalize[" + ToString(v0) + "]"); - return (vNorm); - } - - /** - * @brief Compute a polyonomial fit using multivariate statistics - * - * Used as a fallback solution, this method computes a linear statistical - * solution from the linear regression analysis of the multivariate statistics - * of the data. - * - * @param d Data vector to fit - * @param line0 Current line number in the image - * - * @return HiVector Returns the fitted data - */ - HiVector ZeroBufferFit::poly_fit(const HiVector &d, const double line0) const { - // Needs a linear fit to latter half of data - MultivariateStatistics fit; - int n = d.dim(); - for ( int i = 0 ; i < n ; i++ ) { - double t = _timet(line0+i); - fit.AddData(&t, &d[i], 1); - } - NLVector cc(2); - fit.LinearRegression(cc[0], cc[1]); - return (cc); - } - - /** Provides virtualized dump of data from this module */ - void ZeroBufferFit::printOn(std::ostream &o) const { - o << "# History = " << _history << endl; - // Write out the header - o << setw(_fmtWidth) << "Line" - << setw(_fmtWidth+1) << "Time" - << setw(_fmtWidth+1) << "Data" - << setw(_fmtWidth+1) << "Fit\n"; - - HiVector fit = Yfit(); - for (int i = 0 ; i < _data.dim() ; i++) { - o << formatDbl(i) << " " - << formatDbl(_timet(i)) << " " - << formatDbl(_data[i]) << " " - << formatDbl(fit[i]) << endl; - } - return; - } - -} // namespace Isis - - diff --git a/isis/src/mro/apps/hical/ZeroBufferFit.h b/isis/src/mro/apps/hical/ZeroBufferFit.h deleted file mode 100644 index 6ced32a613..0000000000 --- a/isis/src/mro/apps/hical/ZeroBufferFit.h +++ /dev/null @@ -1,168 +0,0 @@ -#ifndef ZeroBufferFit_h -#define ZeroBufferFit_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: ZeroBufferFit.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include - -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "NonLinearLSQ.h" -#include "Module.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief Computes non-linear lsq fit of HiRISE Drift (Zd module) - * - * This class is best used with individual HiRISE images as the number of - * lines is critical to proper use. It is best applied by getting the buffer - * as a reference and applying it during systematic processing. - * - * This class models the drift correction using the Levenberg-Marquardt - * algorithm. - * - * @ingroup Utility - * - * @author 2007-11-07 Kris Becker - * @internal - * @history 2008-05-23 Kris Becker Added the ZdOnFailUseLinear option. - * @history 2010-10-28 Kris Becker Updated parameter names removing "Zd" and - * replacing with "ZeroBufferFit". - */ - class ZeroBufferFit : public NonLinearLSQ, public Module { - - public: - ZeroBufferFit(const HiCalConf &conf); - /** Destructor */ - virtual ~ZeroBufferFit() { } - - /** - * @brief Set binning/summing mode - * - * @param bin Summing mode of observatio - */ - void setBin(int bin) { _timet.setBin(bin); } - - /** - * @brief Set scan line time - * - * @param ltime Scan line time - */ - void setLineTime(double ltime) { _timet.setLineTime(ltime); } - - /** - * @brief Returns the size of the data buffer - * - * This is the size of the original data buffer. - * - * @see nSize() - * @return int Size of the input buffer - */ - inline int size() const { return (_data.dim()); } - - /** - * @brief Returns the size of the fitted buffer - * - * \b Important: This returns the size of the buffer being - * fitted and not the size of original data buffer. This is - * a requirement of the NonLinearLSQ class. USE WITH - * CAUTION! - * - * - * @return int Size of buffer being fitted - */ - int nSize() const { return (_b2.dim()); } - - /** - * @brief Number of parameter to be fitted - * - * This is the number of parameters that ZeroBufferFit needs to - * fit. This method is a requirement of the NonLinearLSQ class. - * - * @return int Number of parameter to fit - */ - int nParms() const { return (4); } - - /** Sets the absolute error parameter */ - void setabsErr(double absError) { _absErr = absError; } - /** Sets the relative error parameter */ - void setrelErr(double relError) { _relErr = relError; } - /** Returns the current value of the absolute error */ - double absErr() const { return (_absErr); } - /** Returns the current value of the relative error */ - double relErr() const { return (_relErr); } - - HiVector Solve(const HiVector &d); - NLVector guess(); - int checkIteration(const int Iter, const NLVector &fitcoefs, - const NLVector &uncerts, double cplxconj, - int Istatus); - - NLVector f_x(const NLVector &a); - NLMatrix df_x(const NLVector &a); - - /** Returns the Chi-Square value of the fit solution */ - double Chisq() const { return (_chisq); } - /** Returns the Degrees of Freedom */ - int DoF() const { return (nSize() - nParms()); } - - HiVector Yfit() const; - HiVector Normalize(const HiVector &v); - - private: - HiLineTimeEqn _timet; // This is the X data set - HiVector _data; // Typically will be the HiRISE buffer data - HiVector _b2; // Data buffer used in fitting - double _absErr; // Absolute error convergence test - double _relErr; // Relative error convergence test - double _maxLog; // Maximum log value to constrain - int _badLines; // Exclude lines at end of buffer - int _sWidth; // Width of guestimate filter - int _sIters; // Filter interations - bool _skipFit; // Skip fitting and pass input through - bool _useLinFit; // Use linear fit on failure of LM, else Zf - int _minLines; // Minimum number of lines to fit (Default: 100) - HiVector _cc; // Parameter of 2-D fit - HiVector _guess; // Initial guestimate of solutions - HiVector _coefs; // Coefficients of solution - HiVector _uncert; // Uncertanties - double _chisq; // ChiSq of NonLinear equation - - HiVector poly_fit(const HiVector &d, const double line0 = 0.0) const; - virtual void printOn(std::ostream &o) const; - /** Returns the number of good lines in the image */ - int goodLines(const HiVector &d) const { return (d.dim() - _badLines); } - /** Determines if the vector contains any valid lines */ - bool gotGoodLines(const HiVector &d) const { - return (goodLines(d) >= _minLines); - } - }; - -} // namespace Isis -#endif - - diff --git a/isis/src/mro/apps/hical/ZeroBufferSmooth.h b/isis/src/mro/apps/hical/ZeroBufferSmooth.h deleted file mode 100644 index 6b80e4e27d..0000000000 --- a/isis/src/mro/apps/hical/ZeroBufferSmooth.h +++ /dev/null @@ -1,167 +0,0 @@ -#ifndef ZeroBufferSmooth_h -#define ZeroBufferSmooth_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: ZeroBufferSmooth.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include - - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "SplineFill.h" -#include "LowPassFilter.h" -#include "Statistics.h" -#include "SpecialPixel.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief Processes Buffer calibration data (ZeroBufferSmooth Module) - * - * This class loads and processes the Buffer data from a HiRISE image for - * drift correction purposes. The config file contains parameter - * (ZfFirstSample, ZfLastSample) that indicate which regions of the - * calibration buffer to extract/use. This region is averaged across the line - * axis for each line resulting in a single value for each line. The - * resulting vector is then filtered with a lowpass filter. The filter width - * (ZfFilterWidth) and number of interations (ZfFilterIterations) are - * contained within the config file. A spline fit is applied if any missing - * data remain after filtering. - * - * @ingroup Utility - * - * @author 2008-06-10 Kris Becker - * @internal - * @history 2010-04-16 Kris Becker Completed documentation - * @history 2010-10-28 Kris Becker Renamed parameters removing the "Zf" - * prefix and replacing with "ZeroBufferSmooth". - */ - class ZeroBufferSmooth : public Module { - - public: - // Constructors and Destructor - ZeroBufferSmooth() : Module("ZeroBufferSmooth") { } - /** - * @brief Construct with data parameters - * - * This constructor completely computes drift from data collected in a - * HiRISE image - * - * @param cal Calibration data collection - * @param conf All necessary parameters for computations - */ - ZeroBufferSmooth(HiCalData &cal, const HiCalConf &conf) : - Module("ZeroBufferSmooth") { - init(cal, conf); - } - - /** Destructor */ - virtual ~ZeroBufferSmooth() { } - - /** - * @brief Return statistics for filtered - raw Buffer - * - * @return const Statistics& Statistics class with all stats - */ - const Statistics &Stats() const { return (_stats); } - - private: - HiVector _buffer; - Statistics _stats; - - /** - * @brief Workhorse of the zero buffer computation - * - * The default module, assumed to be the Zf module, is retrieved to - * provide parameter necessary to compute the drift correction for a - * HiRISE image. - * - * - * @param cal Calibration data container/provider - * @param conf Configuration parameter provider - */ - void init(HiCalData &cal, const HiCalConf &conf) { - DbProfile prof = conf.getMatrixProfile(); - _history.clear(); - _history.add("Profile["+ prof.Name()+"]"); - - int samp0 = toInt(ConfKey(prof, "ZeroBufferSmoothFirstSample", toString(0))); - int sampN = toInt(ConfKey(prof, "ZeroBufferSmoothLastSample", toString(11))); - _buffer = averageSamples(cal.getBuffer(), samp0, sampN); - _history.add("AveCols(Buffer["+ToString(samp0)+","+ToString(sampN)+"])"); - - // Smooth/filter the averages - LowPassFilter bufter(_buffer, _history, - toInt(ConfKey(prof, "ZeroBufferSmoothFilterWidth", toString(201))), - toInt(ConfKey(prof, "ZeroBufferSmoothFilterIterations", toString(2)))); - // If need be, fill the data with a cubic spline - SplineFill spline(bufter); - _data = spline.ref(); - _history = spline.History(); - - // Compute statistics and record to history - _stats.Reset(); - for ( int i = 0 ; i < _data.dim() ; i++ ) { - // Spline guarantees _data is non-null! - if ( !IsSpecial(_buffer[i]) ) { - _stats.AddData(_data[i] - _buffer[i]); - } - } - _history.add("Statistics(Average["+ToString(_stats.Average())+ - "],StdDev["+ToString(_stats.StandardDeviation())+"])"); - return; - } - - /** - * @brief Virtualized parameter reporting method - * - * This method is invoked when dumping the drift correction parameters. - * - * @param o Output stream to write results to - */ - virtual void printOn(std::ostream &o) const { - o << "# History = " << _history << std::endl; - // Write out the header - o << std::setw(_fmtWidth) << "RawBuffer" - << std::setw(_fmtWidth+1) << "Filtered\n"; - - for (int i = 0 ; i < _data.dim() ; i++) { - o << formatDbl(_buffer[i]) << " " - << formatDbl(_data[i]) << std::endl; - } - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/ZeroDark.h b/isis/src/mro/apps/hical/ZeroDark.h deleted file mode 100644 index 74b57b5a9d..0000000000 --- a/isis/src/mro/apps/hical/ZeroDark.h +++ /dev/null @@ -1,182 +0,0 @@ -#ifndef ZeroDark_h -#define ZeroDark_h -/** - * @file - * $Revision: 4928 $ - * $Date: 2012-12-21 10:44:12 -0700 (Fri, 21 Dec 2012) $ - * $Id: ZeroDark.h 4928 2012-12-21 17:44:12Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "FileName.h" -#include "LoadCSV.h" -#include "LowPassFilter.h" -#include "Statistics.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief Computes a complex dark subtraction component (ZeroDark module) - * - * This class computes the HiRISE dark correction component using a - * combination of the B matrix, slope/intercept components and temperature - * profiles. - * - * @ingroup Utility - * - * @author 2008-01-10 Kris Becker - * @internal - * @history 2008-06-13 Kris Becker - Added PrintOn method to produce more - * detailed data dump; Added computation of statistics - * @history 2010-04-16 Kris Becker - Implemented standardized access to CSV - * files. - * @history 2010-10-28 Kris Becker Renamed parameters replacing "Zb" with - * "ZeroDark" - * - */ - class ZeroDark : public Module { - - public: - // Constructors and Destructor - ZeroDark() : Module("ZeroDark") { } - ZeroDark(const HiCalConf &conf) : Module("ZeroDark") { - init(conf); - } - - /** Destructor */ - virtual ~ZeroDark() { } - - /** - * @brief Return statistics for filtered - raw Buffer - * - * @return const Statistics& Statistics class with all stats - */ - const Statistics &Stats() const { return (_stats); } - - private: - int _tdi; - int _bin; - - HiVector _BM; - HiVector _slope; - HiVector _intercept; - HiVector _tempProf; - - double _refTemp; - - Statistics _stats; - - void init(const HiCalConf &conf) { - _history.clear(); - DbProfile prof = conf.getMatrixProfile(); - _history.add("Profile["+ prof.Name()+"]"); - _tdi = ToInteger(prof("Tdi")); - _bin = ToInteger(prof("Summing")); - int samples = ToInteger(prof("Samples")); - - // Get dark current (B) matrix, slope and intercept CSV files - _BM = loadCsv("DarkCurrent", conf, prof, samples); - _slope = loadCsv("DarkSlope", conf, prof, 256); - _intercept = loadCsv("DarkIntercept", conf, prof, 256); - - // Get temperation normalization factor - _refTemp = toDouble(ConfKey(prof, "FpaReferenceTemperature", toString(21.0))); - - // Smooth/filter if requested - int width = toInt(ConfKey(prof, "ZeroDarkFilterWidth", toString(3))); - int iters = toInt(ConfKey(prof, "ZerDarkFilterIterations", toString(0))); - LowPassFilter smooth(width, iters); - _history.add("Smooth(Width["+ToString(width)+"],Iters["+ToString(iters)+"])"); - - // Set average tempuratures - double fpa_py_temp = ToDouble(prof("FpaPositiveYTemperature")); - double fpa_my_temp = ToDouble(prof("FpaNegativeYTemperature")); - double temp = (fpa_py_temp+fpa_my_temp) / 2.0; - _history.add("BaseTemperature[" + ToString(temp) + "]"); - - // Filter the slope/intercept - smooth.Process(_slope); - _slope = smooth.ref(); - - smooth.Process(_intercept); - _intercept = smooth.ref(); - - HiVector t_prof(_slope.dim()); - for (int i = 0 ; i < _slope.dim() ; i++) { - t_prof[i] = _intercept[i] + _slope[i] * temp; - } - - _tempProf = rebin(t_prof, samples); - _history.add("Rebin(T_Profile," + ToString(t_prof.dim()) + "," + - ToString(samples) +")"); - - HiVector dc(samples); - double linetime = ToDouble(prof("ScanExposureDuration")); - double scale = linetime * 1.0E-6 * (_bin*_bin) * - (20.0*103.0/89.0 + _tdi); - double baseT = HiTempEqn(_refTemp); - for (int j = 0 ; j < samples ; j++) { - dc[j] = _BM[j] * scale * HiTempEqn(_tempProf[j]) / baseT; - } - - // Filter it yet again - smooth.Process(dc); - _data = smooth.ref(); - - // Compute statistics and record to history - _stats.Reset(); - for ( int i = 0 ; i < _data.dim() ; i++ ) { - _stats.AddData(_data[i]); - } - _history.add("Statistics(Average["+ToString(_stats.Average())+ - "],StdDev["+ToString(_stats.StandardDeviation())+"])"); - return; - } - - - /** Virtualized data dump method */ - virtual void printOn(std::ostream &o) const { - o << "# History = " << _history << std::endl; - // Write out the header - o << std::setw(_fmtWidth) << "DarkMatrix" - << std::setw(_fmtWidth+1) << "TempNorm" - << std::setw(_fmtWidth+1) << "ZeroDark\n"; - - for (int i = 0 ; i < _data.dim() ; i++) { - o << formatDbl(_BM[i]) << " " - << formatDbl(_tempProf[i]) << " " - << formatDbl(_data[i]) << std::endl; - } - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/ZeroReverse.h b/isis/src/mro/apps/hical/ZeroReverse.h deleted file mode 100644 index 0de92da974..0000000000 --- a/isis/src/mro/apps/hical/ZeroReverse.h +++ /dev/null @@ -1,191 +0,0 @@ -#ifndef ZeroReverse_h -#define ZeroReverse_h -/** - * @file - * $Revision: 5059 $ - * $Date: 2013-03-11 09:37:00 -0700 (Mon, 11 Mar 2013) $ - * $Id: ZeroReverse.h 5059 2013-03-11 16:37:00Z slambright@GS.DOI.NET $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include - - -#include "IString.h" -#include "HiCalTypes.h" -#include "HiCalUtil.h" -#include "HiCalConf.h" -#include "Module.h" -#include "SplineFill.h" -#include "Statistics.h" -#include "SpecialPixel.h" -#include "IException.h" - -namespace Isis { - - /** - * @brief Processes Reverse Clock calibration data (ZeroReverse Module) - * - * This class loads and processes the Reverse Clock data from a HiRISE image - * for offset correction purposes. Additional processing may occur in - * subsequent modules. - * - * @ingroup Utility - * - * @author 2008-06-13 Kris Becker - * @internal - * @history 2010-04-16 Kris Becker Renamed from Zf to ZeroReverse - * @history 2010-10-28 Kris Becker Renamed parameters replacing "Zz" with - * "ZeroReverse". - */ - class ZeroReverse : public Module { - - public: - // Constructors and Destructor - ZeroReverse() : Module("ZeroReverse") { } - ZeroReverse(HiCalData &cal, const HiCalConf &conf) : - Module("ZeroReverse") { - init(cal, conf); - } - - /** Destructor */ - virtual ~ZeroReverse() { } - - /** - * @brief Return statistics for raw Reverse Clock buffer - * - * @return const Statistics& Statistics class with all stats - */ - const Statistics &Stats() const { return (_stats); } - - /** - * @brief Specifies if the input trigger conditions were met - * - * If trigger conditions where met, the reverse clock correction becomes a - * constant as opposed to processed reverse clock pixels. - * - * @return bool True if triggered, false otherwise - */ - bool wasTriggered() const { return (_triggered); } - - private: - HiVector _revClock; - Statistics _stats; - bool _triggered; - - - /** - * @brief Initialize and compute data solution - * - * - * @author Kris Becker - 4/16/2010 - * - * @param cal HiRISE calibration data provided - * @param conf Configuration data provider - */ - void init(HiCalData &cal, const HiCalConf &conf) { - DbProfile prof = conf.getMatrixProfile(); - _history.clear(); - _history.add("Profile["+ prof.Name()+"]"); - - int line0 = toInt(ConfKey(prof, "ZeroReverseFirstLine", toString(0))); - int lineN = toInt(ConfKey(prof, "ZeroReverseLastLine", toString(19))); - QString tfile= conf.getMatrixSource("ReverseClockStatistics",prof); - - HiMatrix revclk = cropLines(cal.getReverseClock(), line0, lineN); - _stats.Reset(); - _stats.AddData(revclk[0], revclk.dim1()*revclk.dim2()); - - _revClock = averageLines(revclk); - _history.add("RevClock(CropLines["+ToString(line0)+","+ToString(lineN) + - "],Mean["+ToString(_stats.Average()) + - "],StdDev["+ToString(_stats.StandardDeviation()) + - "],LisPixels["+ToString(_stats.LisPixels())+ - "],HisPixels["+ToString(_stats.HisPixels()) + - "],NulPixels["+ToString(_stats.NullPixels())+ "])"); - - DbAccess triggers(Pvl(tfile).findObject("ReverseClockStatistics")); - QString tprofName = conf.resolve("{FILTER}{CCD}_{CHANNEL}_{BIN}",prof); - _history.add("ReverseClockStatistics(File["+tfile+ - "],Profile["+tprofName+"])"); - - _triggered= false; - if (triggers.profileExists(tprofName)) { - DbProfile tprof(prof, triggers.getProfile(tprofName), tprofName); - double revmean = toDouble(ConfKey(tprof,"RevMeanTrigger", toString(_stats.Average()))); - double revstddev = toDouble(ConfKey(tprof,"RevStdDevTrigger", toString(DBL_MAX))); - int lisTol = toInt(ConfKey(tprof, "RevLisTolerance", toString(1))); - int hisTol = toInt(ConfKey(tprof, "RevHisTolerance", toString(1))); - int nulTol = toInt(ConfKey(tprof, "RevNulTolerance", toString(1))); - - _history.add("TriggerLimits(RevMeanTrigger["+ToString(revmean) + - "],RevStdDevTrigger["+ToString(revstddev)+ - "],RevLisTolerance["+ToString(lisTol)+ - "],RevHisTolerance["+ToString(hisTol)+ - "],RevNulTolerance["+ToString(nulTol)+ "])"); - - if ((_stats.LisPixels() > lisTol) || (_stats.HisPixels() > hisTol) || - (_stats.NullPixels() > nulTol) || - (_stats.StandardDeviation() > revstddev)) { - _triggered = true; - _data = HiVector(_revClock.dim1(), revmean); - _history.add("Trigger(True - Reverse Clock set to constant," - "ReverseClock["+ToString(revmean)+"])"); - } - else { - _history.add("Trigger(False - Reverse Clock processing invoked)"); - _triggered = false; - } - } - else { - _history.add("Trigger(Profile["+tprofName+"],NotFound!)"); - _triggered = false; - } - - if (!_triggered) { - SplineFill spline(_revClock, _history); - _data = spline.ref(); - _history = spline.History(); - } - - return; - } - - /** Virtual dump of data processing vectors */ - virtual void printOn(std::ostream &o) const { - o << "# History = " << _history << std::endl; - // Write out the header - o << std::setw(_fmtWidth) << "RevClock" - << std::setw(_fmtWidth+1) << "Applied\n"; - - for (int i = 0 ; i < _data.dim() ; i++) { - o << formatDbl(_revClock[i]) << " " - << formatDbl(_data[i]) << std::endl; - } - return; - } - - }; - -} // namespace Isis -#endif - diff --git a/isis/src/mro/apps/hical/hical.xml b/isis/src/mro/apps/hical/hicalbeta.xml similarity index 97% rename from isis/src/mro/apps/hical/hical.xml rename to isis/src/mro/apps/hical/hicalbeta.xml index ad9c6f3b08..461d219721 100644 --- a/isis/src/mro/apps/hical/hical.xml +++ b/isis/src/mro/apps/hical/hicalbeta.xml @@ -1,7 +1,7 @@ - + - + Performs radiometric calibration of HiRISE channel images @@ -9,7 +9,7 @@

    - hical appiles radiometric calibration correction to HiRISE + hicalbeta appiles radiometric calibration correction to HiRISE images. This particular version is deemed experimental, thus the beta designation. The radiometric calibration correction is performed on each individual HiRISE channel file (EDR) correcting for drift, @@ -56,7 +56,7 @@ equal the total number of image lines.
    - Note that these data BLOBs are removed by hical in the output + Note that these data BLOBs are removed by hicalbeta in the output file so that repeated runs of this application are prevented.

    @@ -144,7 +144,7 @@

    The real power of the configuration file is its use of named Profiles. Profiles are groups of keywords that can be associated to a - unique definition. The hical PVL configuration file + unique definition. The hicalbeta PVL configuration file consists of a single Hical object with numerous named Profile groups. Each of the Profile groups must contain a Name keyword that uniquely identifies it within the @@ -215,16 +215,16 @@

     
     #  HiRISE Calibration Matricies configuration file
    -#  See documentation for the hical application on the content and form of
    +#  See documentation for the hicalbeta application on the content and form of
     #  this file.
     Object = Hical
     
    -  Program = "hical"
    +  Program = "hicalbeta"
     
       Name           = "HiMatrices"
       DefaultProfile = "HiMatrices"
     
    -/* If you want to rerun hical, you must set PropagateTables to True.  Use */
    +/* If you want to rerun hicalbeta, you must set PropagateTables to True.  Use */
     /* this in conjuction with Debug::SkipModule = True option for each module. */
       PropagateTables = False
     
    @@ -338,21 +338,21 @@ Object = Hical
         Module = ZeroDark
     
     /* Define the B matrix file reference */
    -    B = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hical_????.cub"
    +    B = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
         SkipLines        = 1
    -    Slope            = "$mro/calibration/matrices/beta/t_slope_CH{CHANNEL}_hical_????.csv"
    -    Intercept        = "$mro/calibration/matrices/beta/t_intercept_CH{CHANNEL}_hical_????.csv"
    +    Slope            = "$mro/calibration/matrices/beta/t_slope_CH{CHANNEL}_hicalbeta_????.csv"
    +    Intercept        = "$mro/calibration/matrices/beta/t_intercept_CH{CHANNEL}_hicalbeta_????.csv"
     
     /* As of version 0020, 9 March 2010, we will be using the following names and formats */
     /* We are calling this the DarkCurrent now.  The filename will stay the same (with a .csv extension) */
    -    DarkCurrent = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hical_????.csv"
    +    DarkCurrent = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hicalbeta_????.csv"
         DarkCurrentColumnName = "{CCD}/{CHANNEL}"
     
     /* The slope and intercepts to the temperature-dependent correction to the dark current are given below. */
    -    DarkSlope = "$mro/calibration/matrices/beta/B_Temperature_Slope_hical_????.csv"
    +    DarkSlope = "$mro/calibration/matrices/beta/B_Temperature_Slope_hicalbeta_????.csv"
         DarkSlopeColumnName = "CH{CHANNEL}_TDI{TDI}"
     
    -    DarkIntercept = "$mro/calibration/matrices/beta/B_Temperature_Intercept_hical_????.csv"
    +    DarkIntercept = "$mro/calibration/matrices/beta/B_Temperature_Intercept_hicalbeta_????.csv"
         DarkInterceptColumnName = "CH{CHANNEL}_TDI{TDI}"
     
         /* Do filtering? */
    @@ -366,7 +366,7 @@ Object = Hical
         Module = GainNonLinearity
       
     /* Define the nonlinearity correction coefficients */
    -    NonLinearityGain = "$mro/calibration/matrices/beta/Gain_NonLinearity_BIN{BIN}_hical_????.csv"
    +    NonLinearityGain = "$mro/calibration/matrices/beta/Gain_NonLinearity_BIN{BIN}_hicalbeta_????.csv"
         NonLinearityGainRowName  = "{CCD}_{CHANNEL}"
       End_Group
     
    @@ -380,12 +380,12 @@ Object = Hical
         Module = GainLineDrift
     
         SkipLines            = 1
    -/* Added "_hical" to filename as of 2008-04-02.  This is consistant with */
    +/* Added "_hicalbeta" to filename as of 2008-04-02.  This is consistant with */
     /* naming convention used for the beta version of hical. */
    -    GainLineCoefficients = "$mro/calibration/matrices/beta/line_correct_{BIN}_hical_????.csv"
    +    GainLineCoefficients = "$mro/calibration/matrices/beta/line_correct_{BIN}_hicalbeta_????.csv"
     
     /* As of version 0020, 9 March 2010, these are more correctly, called the LineGainDrift correction*/
    -    LineGainDrift = "$mro/calibration/matrices/beta/Line_Gain_Drift_BIN{BIN}_hical_????.csv"
    +    LineGainDrift = "$mro/calibration/matrices/beta/Line_Gain_Drift_BIN{BIN}_hicalbeta_????.csv"
         LineGainDriftColumnHeader = True
         LineGainDriftRowName = "{CCD}/{CHANNEL}"
       End_Group
    @@ -397,10 +397,10 @@ Object = Hical
         Module = GainChannelNormalize
     
     /* Define the G matrix file reference */
    -    G = "$mro/calibration/matrices/beta/G_TDI{TDI}_BIN{BIN}_hical_????.cub"
    +    G = "$mro/calibration/matrices/beta/G_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
     
     /* As of version 0020, 9 March 2010, these coefficients have been renamed to Gains. */
    -    Gains = "$mro/calibration/matrices/beta/Gains_hical_????.csv"
    +    Gains = "$mro/calibration/matrices/beta/Gains_hicalbeta_????.csv"
         GainsRowName = "{BIN}"
         GainsColumnName = "{CCD}/{CHANNEL}"
       End_Group
    @@ -412,11 +412,11 @@ Object = Hical
         Module = GainFlatField
     
     /* Define the A matrix file reference */
    -     A = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hical_????.cub"
    +     A = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
     
     /* As of version 0020, 9 March 2010, These have the same filename with a .csv extension.*/
     /* As of version 0020, 9 March 2010, These coefficients are now called Flats. */
    -    Flats = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hical_????.csv"
    +    Flats = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hicalbeta_????.csv"
         FlatsColumnName = "{CCD}/{CHANNEL}"
       End_Group
     
    @@ -522,7 +522,7 @@ End_Object
                     

    Application Control Parameters


    @@ -682,7 +682,7 @@ End_Object
    - Description of main hical configuration + Description of main hicalbeta configuration parameters. These parameters govern profile loading, filename pattern replacement and debugging operations. Note that keywords in this section are present in all @@ -566,12 +566,12 @@ End_Object FROM file to the TO file when the file is completed. This has some interesting implications. When False, all Table objects in the FROM file are removed in the - TO file, which in effect prevents hical from being + TO file, which in effect prevents hicalbeta from being able to run again. However, because of debugging capabilities, one may want to select which calibration modules are run. Setting this to True will propagate all Table objects (BLOBs) in the FROM file to the TO - file so that hical can be run again to apply other + file so that hicalbeta can be run again to apply other modules. @@ -635,7 +635,7 @@ End_Object the calibration process. This is very useful for debugging and seeing how each module contributes. Be sure to set ProgagateTables to True if you - intend to perform subsequent runs of hical. + intend to perform subsequent runs of hicalbeta.

    - The following tables describe hical module processing + The following tables describe hicalbeta module processing overview. A general description of the module processing steps and configuration file parameters for the modules are provided. Note that each module contains a Name and Module parameter that @@ -696,7 +696,7 @@ End_Object profiles are modules. Multiple profiles can be loaded to fully define a set of module parameters. The order of potential profiles that are loaded in addition to the one requested directly in - hical application is specified by the + hicalbeta application is specified by the ProfileOptions keyword as described above.


    ZeroBufferSmooth Module Parameters


    @@ -886,7 +886,7 @@ End_Object component is determined. The default file name is "ReverseClockStatistics.XXXX.conf" where "XXXX" is a version number. Note that the contents of the - composed hical configuration profile is used to + composed hicalbeta configuration profile is used to provide initial values for the profile loaded out of this file. @@ -988,7 +988,7 @@ End_Object because of the low number of in-flight dark frame images acquired--all bin modes were utilized to generate these linear fits. - hical does a rebin to expand or contract the + hicalbeta does a rebin to expand or contract the bin4 linear coefficients to bin8, bin2, or bin1, depending on the bin mode of the image being calibrated. @@ -1043,7 +1043,7 @@ End_Object

    GainLineDrift Module Parameters


    - The GainLineDrift module in hical uses the line + The GainLineDrift module in hicalbeta uses the line correction coefficients which are contained in the file as patterned by the LineGainDrift as defined below. This file contains 4 parameters (C[1234]) and is applied @@ -1094,7 +1094,7 @@ End_Object

    GainNonLinearity Module Parameters


    @@ -988,7 +988,7 @@ End_Object because of the low number of in-flight dark frame images acquired--all bin modes were utilized to generate these linear fits. - hicalbeta does a rebin to expand or contract the + hical does a rebin to expand or contract the bin4 linear coefficients to bin8, bin2, or bin1, depending on the bin mode of the image being calibrated. @@ -1043,7 +1043,7 @@ End_Object

    GainLineDrift Module Parameters


    - The GainNonLinearity module in hical uses the + The GainNonLinearity module in hicalbeta uses the nonlinearity coefficients that are derived as a function of binning mode. These coefficients are used in the following equations to correct for nonlinear gain @@ -1132,7 +1132,7 @@ End_Object

    GainChannelNormalize Module Parameters


    @@ -1407,9 +1407,6 @@ End_Object Renamed many of the modules to better reflect their function. Extensively updated the program documentation. - - Merged hicalbeta changes into hical to make new release - @@ -1433,13 +1430,13 @@ End_Object filename input $mro/calibration - $mro/calibration/hical.????.conf + $mro/calibration/hicalbeta.????.conf File containing HiRISE calibration and matrix configuration parameters *.conf - This file is critical to the proper functioning of hical. It + This file is critical to the proper functioning of hicalbeta. It contains parameters that are loaded to provide necessary data used in the calibration of HiRISE CCD channels. It is extensively documented in the main documentation section of this application. diff --git a/isis/src/mro/apps/hical/hical.cpp b/isis/src/mro/apps/hical/main.cpp similarity index 100% rename from isis/src/mro/apps/hical/hical.cpp rename to isis/src/mro/apps/hical/main.cpp diff --git a/isis/src/mro/apps/hicalbeta/hicalbeta.cpp b/isis/src/mro/apps/hicalbeta/main.cpp similarity index 100% rename from isis/src/mro/apps/hicalbeta/hicalbeta.cpp rename to isis/src/mro/apps/hicalbeta/main.cpp diff --git a/isis/src/mro/apps/hicalproc/hicalproc.cpp b/isis/src/mro/apps/hicalproc/main.cpp similarity index 100% rename from isis/src/mro/apps/hicalproc/hicalproc.cpp rename to isis/src/mro/apps/hicalproc/main.cpp diff --git a/isis/src/mro/apps/hiccdstitch/hiccdstitch.cpp b/isis/src/mro/apps/hiccdstitch/main.cpp similarity index 100% rename from isis/src/mro/apps/hiccdstitch/hiccdstitch.cpp rename to isis/src/mro/apps/hiccdstitch/main.cpp diff --git a/isis/src/mro/apps/hicolormos/hicolormos.cpp b/isis/src/mro/apps/hicolormos/main.cpp similarity index 100% rename from isis/src/mro/apps/hicolormos/hicolormos.cpp rename to isis/src/mro/apps/hicolormos/main.cpp diff --git a/isis/src/mro/apps/hicrop/hicrop.cpp b/isis/src/mro/apps/hicrop/main.cpp similarity index 100% rename from isis/src/mro/apps/hicrop/hicrop.cpp rename to isis/src/mro/apps/hicrop/main.cpp diff --git a/isis/src/mro/apps/hicubeit/hicubeit.cpp b/isis/src/mro/apps/hicubeit/main.cpp similarity index 100% rename from isis/src/mro/apps/hicubeit/hicubeit.cpp rename to isis/src/mro/apps/hicubeit/main.cpp diff --git a/isis/src/mro/apps/hicubenorm/hicubenorm.cpp b/isis/src/mro/apps/hicubenorm/main.cpp similarity index 100% rename from isis/src/mro/apps/hicubenorm/hicubenorm.cpp rename to isis/src/mro/apps/hicubenorm/main.cpp diff --git a/isis/src/mro/apps/hideal2pds/hideal2pds.cpp b/isis/src/mro/apps/hideal2pds/main.cpp similarity index 100% rename from isis/src/mro/apps/hideal2pds/hideal2pds.cpp rename to isis/src/mro/apps/hideal2pds/main.cpp diff --git a/isis/src/mro/apps/hidestripe/hidestripe.cpp b/isis/src/mro/apps/hidestripe/main.cpp similarity index 100% rename from isis/src/mro/apps/hidestripe/hidestripe.cpp rename to isis/src/mro/apps/hidestripe/main.cpp diff --git a/isis/src/mro/apps/hidtmgen/hidtmgen.cpp b/isis/src/mro/apps/hidtmgen/main.cpp similarity index 100% rename from isis/src/mro/apps/hidtmgen/hidtmgen.cpp rename to isis/src/mro/apps/hidtmgen/main.cpp diff --git a/isis/src/mro/apps/hiequal/hiequal.cpp b/isis/src/mro/apps/hiequal/main.cpp similarity index 100% rename from isis/src/mro/apps/hiequal/hiequal.cpp rename to isis/src/mro/apps/hiequal/main.cpp diff --git a/isis/src/mro/apps/hifringe/hifringe.cpp b/isis/src/mro/apps/hifringe/main.cpp similarity index 100% rename from isis/src/mro/apps/hifringe/hifringe.cpp rename to isis/src/mro/apps/hifringe/main.cpp diff --git a/isis/src/mro/apps/hifurrows/hifurrows.cpp b/isis/src/mro/apps/hifurrows/main.cpp similarity index 100% rename from isis/src/mro/apps/hifurrows/hifurrows.cpp rename to isis/src/mro/apps/hifurrows/main.cpp diff --git a/isis/src/mro/apps/higlob/higlob.cpp b/isis/src/mro/apps/higlob/main.cpp similarity index 100% rename from isis/src/mro/apps/higlob/higlob.cpp rename to isis/src/mro/apps/higlob/main.cpp diff --git a/isis/src/mro/apps/hijitreg/hijitreg.cpp b/isis/src/mro/apps/hijitreg/main.cpp similarity index 100% rename from isis/src/mro/apps/hijitreg/hijitreg.cpp rename to isis/src/mro/apps/hijitreg/main.cpp diff --git a/isis/src/mro/apps/hijitter/hijitter.cpp b/isis/src/mro/apps/hijitter/main.cpp similarity index 100% rename from isis/src/mro/apps/hijitter/hijitter.cpp rename to isis/src/mro/apps/hijitter/main.cpp diff --git a/isis/src/mro/apps/himos/himos.cpp b/isis/src/mro/apps/himos/main.cpp similarity index 100% rename from isis/src/mro/apps/himos/himos.cpp rename to isis/src/mro/apps/himos/main.cpp diff --git a/isis/src/mro/apps/hinoise/hinoise.cpp b/isis/src/mro/apps/hinoise/main.cpp similarity index 100% rename from isis/src/mro/apps/hinoise/hinoise.cpp rename to isis/src/mro/apps/hinoise/main.cpp diff --git a/isis/src/mro/apps/hirdr2isis/hirdr2isis.cpp b/isis/src/mro/apps/hirdr2isis/main.cpp similarity index 100% rename from isis/src/mro/apps/hirdr2isis/hirdr2isis.cpp rename to isis/src/mro/apps/hirdr2isis/main.cpp diff --git a/isis/src/mro/apps/hirdrgen/hirdrgen.cpp b/isis/src/mro/apps/hirdrgen/main.cpp similarity index 100% rename from isis/src/mro/apps/hirdrgen/hirdrgen.cpp rename to isis/src/mro/apps/hirdrgen/main.cpp diff --git a/isis/src/mro/apps/hisharpen/hisharpen.cpp b/isis/src/mro/apps/hisharpen/main.cpp similarity index 100% rename from isis/src/mro/apps/hisharpen/hisharpen.cpp rename to isis/src/mro/apps/hisharpen/main.cpp diff --git a/isis/src/mro/apps/histat/histat.cpp b/isis/src/mro/apps/histat/main.cpp similarity index 100% rename from isis/src/mro/apps/histat/histat.cpp rename to isis/src/mro/apps/histat/main.cpp diff --git a/isis/src/mro/apps/histitch/histitch.cpp b/isis/src/mro/apps/histitch/main.cpp similarity index 100% rename from isis/src/mro/apps/histitch/histitch.cpp rename to isis/src/mro/apps/histitch/main.cpp diff --git a/isis/src/mro/apps/marci2isis/marci2isis.cpp b/isis/src/mro/apps/marci2isis/main.cpp similarity index 100% rename from isis/src/mro/apps/marci2isis/marci2isis.cpp rename to isis/src/mro/apps/marci2isis/main.cpp diff --git a/isis/src/mro/apps/marcical/marcical.cpp b/isis/src/mro/apps/marcical/main.cpp similarity index 100% rename from isis/src/mro/apps/marcical/marcical.cpp rename to isis/src/mro/apps/marcical/main.cpp diff --git a/isis/src/mro/apps/marciflip/marciflip.cpp b/isis/src/mro/apps/marciflip/main.cpp similarity index 100% rename from isis/src/mro/apps/marciflip/marciflip.cpp rename to isis/src/mro/apps/marciflip/main.cpp diff --git a/isis/src/mro/apps/mroctx2isis/mroctx2isis.cpp b/isis/src/mro/apps/mroctx2isis/main.cpp similarity index 100% rename from isis/src/mro/apps/mroctx2isis/mroctx2isis.cpp rename to isis/src/mro/apps/mroctx2isis/main.cpp diff --git a/isis/src/mro/apps/pds2hideal/pds2hideal.cpp b/isis/src/mro/apps/pds2hideal/main.cpp similarity index 100% rename from isis/src/mro/apps/pds2hideal/pds2hideal.cpp rename to isis/src/mro/apps/pds2hideal/main.cpp diff --git a/isis/src/mro/apps/hicalbeta/GainChannelNormalize.h b/isis/src/mro/objs/HiCal/GainChannelNormalize.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/GainChannelNormalize.h rename to isis/src/mro/objs/HiCal/GainChannelNormalize.h diff --git a/isis/src/mro/apps/hicalbeta/GainFlatField.h b/isis/src/mro/objs/HiCal/GainFlatField.h similarity index 73% rename from isis/src/mro/apps/hicalbeta/GainFlatField.h rename to isis/src/mro/objs/HiCal/GainFlatField.h index 5c55125c37..084af4dbc9 100644 --- a/isis/src/mro/apps/hicalbeta/GainFlatField.h +++ b/isis/src/mro/objs/HiCal/GainFlatField.h @@ -1,28 +1,28 @@ #ifndef GainFlatField_h #define GainFlatField_h -/** - * @file +/** + * @file * $Revision: 1.4 $ * $Date: 2009/09/15 21:56:44 $ * $Id: GainFlatField.h,v 1.4 2009/09/15 21:56:44 kbecker Exp $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ #include #include #include @@ -39,22 +39,22 @@ namespace Isis { /** - * @brief GainFlatField Module - Computes flat field correction for sample - * + * @brief GainFlatField Module - Computes flat field correction for sample + * * This class computes the HiRISE flat field correction component using the A * matrix. - * + * * @ingroup Utility - * - * @author 2008-03-04 Kris Becker - * @history 2009-09-14 Kris Becker Removed temperature components and placed + * + * @author 2008-03-04 Kris Becker + * @history 2009-09-14 Kris Becker Removed temperature components and placed * them in the GainTemperature module. - * @history 2010-04-16 Kris Becker Modified to used the standardized CSV + * @history 2010-04-16 Kris Becker Modified to used the standardized CSV * reader for the A matrix. */ class GainFlatField : public Module { - public: + public: // Constructors and Destructor GainFlatField() : Module("GainFlatField") { } GainFlatField(const HiCalConf &conf) : Module("GainFlatField") { @@ -64,9 +64,9 @@ namespace Isis { /** Destructor */ virtual ~GainFlatField() { } - /** + /** * @brief Return statistics A matrix corection - * + * * @return const Statistics& Statistics class with all stats */ const Statistics &Stats() const { return (_stats); } @@ -89,7 +89,7 @@ namespace Isis { } _history.add("Statistics(Average["+ToString(_stats.Average())+ - "],StdDev["+ToString(_stats.StandardDeviation())+"])"); + "],StdDev["+ToString(_stats.StandardDeviation())+"])"); return; } @@ -97,4 +97,3 @@ namespace Isis { } // namespace Isis #endif - diff --git a/isis/src/mro/apps/hicalbeta/GainLineDrift.h b/isis/src/mro/objs/HiCal/GainLineDrift.h similarity index 72% rename from isis/src/mro/apps/hicalbeta/GainLineDrift.h rename to isis/src/mro/objs/HiCal/GainLineDrift.h index 593c94ccff..b0b3729d54 100644 --- a/isis/src/mro/apps/hicalbeta/GainLineDrift.h +++ b/isis/src/mro/objs/HiCal/GainLineDrift.h @@ -1,28 +1,28 @@ #ifndef GainLineDrift_h #define GainLineDrift_h -/** - * @file +/** + * @file * $Revision: 1.2 $ * $Date: 2008/05/14 21:07:22 $ * $Id: GainLineDrift.h,v 1.2 2008/05/14 21:07:22 slambright Exp $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ #include #include #include @@ -37,24 +37,23 @@ #include "IException.h" namespace Isis { - /** * @brief Computes a gain correction for each line (Zg Module) - * - * This class computes the HiRISE gain component correction for each line. - * Time dependant line drift correction also governed by parameters in config - * file and LineGainDrift coefficients matrix file. - * + * + * This class computes the HiRISE gain component correction for each line. + * Time dependant line drift correction also governed by parameters in config + * file and LineGainDrift coefficients matrix file. + * * @ingroup Utility - * - * @author 2008-01-10 Kris Becker - * @internal + * + * @author 2008-01-10 Kris Becker + * @internal * @history 2010-04-16 Kris Becker Modifed to use standardized CSV file * format. */ class GainLineDrift : public Module { - public: + public: // Constructors and Destructor GainLineDrift() : Module("GainLineDrift") { } GainLineDrift(const HiCalConf &conf) : Module("GainLineDrift") { @@ -92,7 +91,7 @@ namespace Isis { HiVector gainV(nlines); for ( int i = 0 ; i < nlines ; i++ ) { double lt = timet(i); - gainV[i] = _coefs[0] + (_coefs[1] * lt) + + gainV[i] = _coefs[0] + (_coefs[1] * lt) + _coefs[2] * exp(_coefs[3] * lt); } @@ -104,4 +103,3 @@ namespace Isis { } // namespace Isis #endif - diff --git a/isis/src/mro/apps/hicalbeta/GainNonLinearity.h b/isis/src/mro/objs/HiCal/GainNonLinearity.h similarity index 71% rename from isis/src/mro/apps/hicalbeta/GainNonLinearity.h rename to isis/src/mro/objs/HiCal/GainNonLinearity.h index e15354e138..f3ee196b74 100644 --- a/isis/src/mro/apps/hicalbeta/GainNonLinearity.h +++ b/isis/src/mro/objs/HiCal/GainNonLinearity.h @@ -1,28 +1,28 @@ #ifndef GainNonLinearity_h #define GainNonLinearity_h -/** - * @file +/** + * @file * $Revision: 1.1 $ * $Date: 2009/09/15 21:56:44 $ * $Id: GainNonLinearity.h,v 1.1 2009/09/15 21:56:44 kbecker Exp $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ #include #include #include @@ -37,23 +37,22 @@ #include "IException.h" namespace Isis { - /** * @brief GainNonLinearity Module - Applies non-linear, line-dependant gain - * + * * This class computes the line-based non-linearity dependant gain correction. - * It has a comma separated value (CSV) file in the config file parameter - * "NonLinearityGain". This file is assumed to contain one column of data: the + * It has a comma separated value (CSV) file in the config file parameter + * "NonLinearityGain". This file is assumed to contain one column of data: the * factor applied to the line average to correct non linear gain contribution. - * + * * @ingroup Utility - * - * @author 2010-05-20 Kris Becker - * @internal + * + * @author 2010-05-20 Kris Becker + * @internal */ class GainNonLinearity : public Module { - public: + public: // Constructors and Destructor GainNonLinearity() : Module("GainNonLinearity") { } GainNonLinearity(const HiCalConf &conf) : Module("GainNonLinearity") { @@ -86,4 +85,3 @@ namespace Isis { } // namespace Isis #endif - diff --git a/isis/src/mro/apps/hicalbeta/GainTemperature.h b/isis/src/mro/objs/HiCal/GainTemperature.h similarity index 99% rename from isis/src/mro/apps/hicalbeta/GainTemperature.h rename to isis/src/mro/objs/HiCal/GainTemperature.h index f3eb0cf459..abd54a2239 100644 --- a/isis/src/mro/apps/hicalbeta/GainTemperature.h +++ b/isis/src/mro/objs/HiCal/GainTemperature.h @@ -37,7 +37,6 @@ #include "IException.h" namespace Isis { - /** * @brief GaingTemperature Module - Applies temperature-dependant gain * correction (column) diff --git a/isis/src/mro/apps/hicalbeta/GainUnitConversion.h b/isis/src/mro/objs/HiCal/GainUnitConversion.h similarity index 81% rename from isis/src/mro/apps/hicalbeta/GainUnitConversion.h rename to isis/src/mro/objs/HiCal/GainUnitConversion.h index b31842acc5..6de026f7f7 100644 --- a/isis/src/mro/apps/hicalbeta/GainUnitConversion.h +++ b/isis/src/mro/objs/HiCal/GainUnitConversion.h @@ -1,28 +1,28 @@ #ifndef GainUnitConversion_h #define GainUnitConversion_h -/** - * @file +/** + * @file * $Revision: 1.2 $ * $Date: 2008/05/14 21:07:22 $ * $Id$ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ #include #include #include @@ -40,23 +40,23 @@ namespace Isis { /** * @brief Computes units parameters for HiRISE data calibration (Ziof Module) - * - * This class computes the HiRISE parameters necessary to derive the user - * selected calibration units of the image data. - * + * + * This class computes the HiRISE parameters necessary to derive the user + * selected calibration units of the image data. + * * @ingroup Utility - * - * @author 2010-04-19 Kris Becker - * @internal + * + * @author 2010-04-19 Kris Becker + * @internal * @history 2010-10-28 Kris Becker Renamed parameters replacing "Ziof" with * "GainUnitConversion". */ class GainUnitConversion : public Module { - public: + public: // Constructors and Destructor GainUnitConversion() : Module("GainUnitConversion"), _units("DN") { } - GainUnitConversion(HiCalConf &conf, const QString &units) : + GainUnitConversion(HiCalConf &conf, const QString &units) : Module("GainUnitConversion"), _units(units) { init(conf); } @@ -85,7 +85,7 @@ namespace Isis { double ztemp = getTempDepGain(conf, prof); _history.add("ScanExposureDuration[" + ToString(sed) + "]"); - double ziof = (zbin * ztemp) * (sed * 1.0e-6) * suncorr; + double ziof = (zbin * ztemp) * (sed * 1.0e-6) * suncorr; _data = HiVector(1, ziof); _history.add("I/F_Factor[" + ToString(ziof) + "]"); @@ -112,11 +112,11 @@ namespace Isis { /** * @brief Compute CalFact, CCD QE, Temperature I/F dependancy - * + * * @author Kris Becker - 4/28/2010 - * + * * @param prof Profile providing parameters - * + * * @return double Dependancy factor */ double getTempDepGain(const HiCalConf &conf, const DbProfile &prof) { @@ -147,4 +147,3 @@ namespace Isis { } // namespace Isis #endif - diff --git a/isis/src/mro/apps/hicalbeta/HiBlob.h b/isis/src/mro/objs/HiCal/HiBlob.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/HiBlob.h rename to isis/src/mro/objs/HiCal/HiBlob.h diff --git a/isis/src/mro/apps/hicalbeta/HiCalConf.cpp b/isis/src/mro/objs/HiCal/HiCalConf.cpp similarity index 100% rename from isis/src/mro/apps/hicalbeta/HiCalConf.cpp rename to isis/src/mro/objs/HiCal/HiCalConf.cpp diff --git a/isis/src/mro/apps/hicalbeta/HiCalConf.h b/isis/src/mro/objs/HiCal/HiCalConf.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/HiCalConf.h rename to isis/src/mro/objs/HiCal/HiCalConf.h diff --git a/isis/src/mro/apps/hicalbeta/HiCalData.h b/isis/src/mro/objs/HiCal/HiCalData.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/HiCalData.h rename to isis/src/mro/objs/HiCal/HiCalData.h diff --git a/isis/src/mro/apps/hicalbeta/HiCalTypes.h b/isis/src/mro/objs/HiCal/HiCalTypes.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/HiCalTypes.h rename to isis/src/mro/objs/HiCal/HiCalTypes.h diff --git a/isis/src/mro/apps/hicalbeta/HiCalUtil.h b/isis/src/mro/objs/HiCal/HiCalUtil.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/HiCalUtil.h rename to isis/src/mro/objs/HiCal/HiCalUtil.h diff --git a/isis/src/mro/apps/hicalbeta/LoadCSV.cpp b/isis/src/mro/objs/HiCal/LoadCSV.cpp similarity index 100% rename from isis/src/mro/apps/hicalbeta/LoadCSV.cpp rename to isis/src/mro/objs/HiCal/LoadCSV.cpp diff --git a/isis/src/mro/apps/hicalbeta/LoadCSV.h b/isis/src/mro/objs/HiCal/LoadCSV.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/LoadCSV.h rename to isis/src/mro/objs/HiCal/LoadCSV.h diff --git a/isis/src/mro/apps/hicalbeta/LowPassFilter.h b/isis/src/mro/objs/HiCal/LowPassFilter.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/LowPassFilter.h rename to isis/src/mro/objs/HiCal/LowPassFilter.h diff --git a/isis/src/mro/apps/hicalbeta/Module.h b/isis/src/mro/objs/HiCal/Module.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/Module.h rename to isis/src/mro/objs/HiCal/Module.h diff --git a/isis/src/mro/apps/hicalbeta/NonLinearLSQ.cpp b/isis/src/mro/objs/HiCal/NonLinearLSQ.cpp similarity index 100% rename from isis/src/mro/apps/hicalbeta/NonLinearLSQ.cpp rename to isis/src/mro/objs/HiCal/NonLinearLSQ.cpp diff --git a/isis/src/mro/apps/hicalbeta/NonLinearLSQ.h b/isis/src/mro/objs/HiCal/NonLinearLSQ.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/NonLinearLSQ.h rename to isis/src/mro/objs/HiCal/NonLinearLSQ.h diff --git a/isis/src/mro/apps/hicalbeta/SplineFill.h b/isis/src/mro/objs/HiCal/SplineFill.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/SplineFill.h rename to isis/src/mro/objs/HiCal/SplineFill.h diff --git a/isis/src/mro/apps/hicalbeta/ZeroBufferFit.cpp b/isis/src/mro/objs/HiCal/ZeroBufferFit.cpp similarity index 100% rename from isis/src/mro/apps/hicalbeta/ZeroBufferFit.cpp rename to isis/src/mro/objs/HiCal/ZeroBufferFit.cpp diff --git a/isis/src/mro/apps/hicalbeta/ZeroBufferFit.h b/isis/src/mro/objs/HiCal/ZeroBufferFit.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/ZeroBufferFit.h rename to isis/src/mro/objs/HiCal/ZeroBufferFit.h diff --git a/isis/src/mro/apps/hicalbeta/ZeroBufferSmooth.h b/isis/src/mro/objs/HiCal/ZeroBufferSmooth.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/ZeroBufferSmooth.h rename to isis/src/mro/objs/HiCal/ZeroBufferSmooth.h diff --git a/isis/src/mro/apps/hicalbeta/ZeroDark.h b/isis/src/mro/objs/HiCal/ZeroDark.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/ZeroDark.h rename to isis/src/mro/objs/HiCal/ZeroDark.h diff --git a/isis/src/mro/apps/hicalbeta/ZeroReverse.h b/isis/src/mro/objs/HiCal/ZeroReverse.h similarity index 100% rename from isis/src/mro/apps/hicalbeta/ZeroReverse.h rename to isis/src/mro/objs/HiCal/ZeroReverse.h diff --git a/isis/src/near/apps/msi2isis/msi2isis.cpp b/isis/src/near/apps/msi2isis/main.cpp similarity index 100% rename from isis/src/near/apps/msi2isis/msi2isis.cpp rename to isis/src/near/apps/msi2isis/main.cpp diff --git a/isis/src/newhorizons/apps/leisa2isis/leisa2isis.cpp b/isis/src/newhorizons/apps/leisa2isis/main.cpp similarity index 100% rename from isis/src/newhorizons/apps/leisa2isis/leisa2isis.cpp rename to isis/src/newhorizons/apps/leisa2isis/main.cpp diff --git a/isis/src/newhorizons/apps/lorri2isis/lorri2isis.cpp b/isis/src/newhorizons/apps/lorri2isis/main.cpp similarity index 100% rename from isis/src/newhorizons/apps/lorri2isis/lorri2isis.cpp rename to isis/src/newhorizons/apps/lorri2isis/main.cpp diff --git a/isis/src/newhorizons/apps/mvic2isis/mvic2isis.cpp b/isis/src/newhorizons/apps/mvic2isis/main.cpp similarity index 100% rename from isis/src/newhorizons/apps/mvic2isis/mvic2isis.cpp rename to isis/src/newhorizons/apps/mvic2isis/main.cpp diff --git a/isis/src/odyssey/apps/thm2isis/thm2isis.cpp b/isis/src/odyssey/apps/thm2isis/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thm2isis/thm2isis.cpp rename to isis/src/odyssey/apps/thm2isis/main.cpp diff --git a/isis/src/odyssey/apps/thmbasemap1/thmbasemap1.cpp b/isis/src/odyssey/apps/thmbasemap1/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thmbasemap1/thmbasemap1.cpp rename to isis/src/odyssey/apps/thmbasemap1/main.cpp diff --git a/isis/src/odyssey/apps/thmdriftcor/thmdriftcor.cpp b/isis/src/odyssey/apps/thmdriftcor/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thmdriftcor/thmdriftcor.cpp rename to isis/src/odyssey/apps/thmdriftcor/main.cpp diff --git a/isis/src/odyssey/apps/thmnoseam/thmnoseam.cpp b/isis/src/odyssey/apps/thmnoseam/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thmnoseam/thmnoseam.cpp rename to isis/src/odyssey/apps/thmnoseam/main.cpp diff --git a/isis/src/odyssey/apps/thmproc/thmproc.cpp b/isis/src/odyssey/apps/thmproc/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thmproc/thmproc.cpp rename to isis/src/odyssey/apps/thmproc/main.cpp diff --git a/isis/src/odyssey/apps/thmvisflat/thmvisflat.cpp b/isis/src/odyssey/apps/thmvisflat/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thmvisflat/thmvisflat.cpp rename to isis/src/odyssey/apps/thmvisflat/main.cpp diff --git a/isis/src/odyssey/apps/thmvistrim/thmvistrim.cpp b/isis/src/odyssey/apps/thmvistrim/main.cpp similarity index 100% rename from isis/src/odyssey/apps/thmvistrim/thmvistrim.cpp rename to isis/src/odyssey/apps/thmvistrim/main.cpp diff --git a/isis/src/osirisrex/apps/ocams2isis/ocams2isis.cpp b/isis/src/osirisrex/apps/ocams2isis/main.cpp similarity index 100% rename from isis/src/osirisrex/apps/ocams2isis/ocams2isis.cpp rename to isis/src/osirisrex/apps/ocams2isis/main.cpp diff --git a/isis/src/qisis/apps/ipce/WarningTreeWidget.cpp b/isis/src/qisis/apps/ipce/WarningTreeWidget.cpp deleted file mode 100644 index 9faa90b99d..0000000000 --- a/isis/src/qisis/apps/ipce/WarningTreeWidget.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "WarningTreeWidget.h" - -#include - -#include - -namespace Isis { - /** - * Create a warning tree widget for the given project. - * - * @param parent The widget that goes along with the warnings. - */ - WarningTreeWidget::WarningTreeWidget(QWidget *parent) : QTreeWidget(parent) { - - setHeaderHidden(true); - } - - - WarningTreeWidget::~WarningTreeWidget() { - - } - - - /** - * Creates a new warning item with the given text. - * - * @param text The text of the warning. - */ - void WarningTreeWidget::showWarning(QString text) { - - QTreeWidgetItem *warningItem = new QTreeWidgetItem(this); - warningItem->setText(0, text); - // Makes sure the text fits inside the column, this will actually enable horizontal - // scrolling if the resized column is wider than the widget view. - resizeColumnToContents(0); - } -} diff --git a/isis/src/qisis/apps/ipce/WarningTreeWidget.h b/isis/src/qisis/apps/ipce/WarningTreeWidget.h deleted file mode 100644 index 6e94f01694..0000000000 --- a/isis/src/qisis/apps/ipce/WarningTreeWidget.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef WarningTreeWidget_H -#define WarningTreeWidget_H - -#include - -namespace Isis { - - /** - * @brief Warning Widget for ipce - * - * @author 2012-05-29 Steven Lambright and Tracie Sucharski - * - * @internal - * @history 2012-07-31 Kimberly Oyama - Added comments to some of the methods. - * @history 2017-10-11 Ian Humphrey - Added a resize column call to showWarning() to ensure - * the column size is fit to the width of the warning text. This - * enables horizontal scrolling for the warning widget. Fixes #5164. - */ - class WarningTreeWidget : public QTreeWidget { - Q_OBJECT - public: - WarningTreeWidget(QWidget *parent = 0); - virtual ~WarningTreeWidget(); - - void showWarning(QString text); - - private: - Q_DISABLE_COPY(WarningTreeWidget); - }; -} - -#endif - diff --git a/isis/src/qisis/apps/ipce/ipce.cpp b/isis/src/qisis/apps/ipce/main.cpp similarity index 100% rename from isis/src/qisis/apps/ipce/ipce.cpp rename to isis/src/qisis/apps/ipce/main.cpp diff --git a/isis/src/qisis/apps/qmos/qmos.cpp b/isis/src/qisis/apps/qmos/main.cpp similarity index 100% rename from isis/src/qisis/apps/qmos/qmos.cpp rename to isis/src/qisis/apps/qmos/main.cpp diff --git a/isis/src/qisis/apps/qnet/qnet.cpp b/isis/src/qisis/apps/qnet/main.cpp similarity index 100% rename from isis/src/qisis/apps/qnet/qnet.cpp rename to isis/src/qisis/apps/qnet/main.cpp diff --git a/isis/src/qisis/apps/qtie/qtie.cpp b/isis/src/qisis/apps/qtie/main.cpp similarity index 100% rename from isis/src/qisis/apps/qtie/qtie.cpp rename to isis/src/qisis/apps/qtie/main.cpp diff --git a/isis/src/qisis/apps/qview/qview.cpp b/isis/src/qisis/apps/qview/main.cpp similarity index 100% rename from isis/src/qisis/apps/qview/qview.cpp rename to isis/src/qisis/apps/qview/main.cpp diff --git a/isis/src/rolo/apps/rolo2isis/rolo2isis.cpp b/isis/src/rolo/apps/rolo2isis/main.cpp similarity index 100% rename from isis/src/rolo/apps/rolo2isis/rolo2isis.cpp rename to isis/src/rolo/apps/rolo2isis/main.cpp diff --git a/isis/src/rosetta/apps/rososiris2isis/rososiris2isis.cpp b/isis/src/rosetta/apps/rososiris2isis/main.cpp similarity index 100% rename from isis/src/rosetta/apps/rososiris2isis/rososiris2isis.cpp rename to isis/src/rosetta/apps/rososiris2isis/main.cpp diff --git a/isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp b/isis/src/rosetta/apps/rosvirtis2isis/main.cpp similarity index 100% rename from isis/src/rosetta/apps/rosvirtis2isis/rosvirtis2isis.cpp rename to isis/src/rosetta/apps/rosvirtis2isis/main.cpp diff --git a/isis/src/socet/apps/socetframesettings/socetframesettings.cpp b/isis/src/socet/apps/socetframesettings/main.cpp similarity index 100% rename from isis/src/socet/apps/socetframesettings/socetframesettings.cpp rename to isis/src/socet/apps/socetframesettings/main.cpp diff --git a/isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.cpp b/isis/src/socet/apps/socetlinescankeywords/main.cpp similarity index 100% rename from isis/src/socet/apps/socetlinescankeywords/socetlinescankeywords.cpp rename to isis/src/socet/apps/socetlinescankeywords/main.cpp diff --git a/isis/src/system/apps/blobdump/blobdump.cpp b/isis/src/system/apps/blobdump/main.cpp similarity index 100% rename from isis/src/system/apps/blobdump/blobdump.cpp rename to isis/src/system/apps/blobdump/main.cpp diff --git a/isis/src/system/apps/csspckgen/csspckgen.cpp b/isis/src/system/apps/csspckgen/main.cpp similarity index 100% rename from isis/src/system/apps/csspckgen/csspckgen.cpp rename to isis/src/system/apps/csspckgen/main.cpp diff --git a/isis/src/system/apps/dempack/dempack.cpp b/isis/src/system/apps/dempack/main.cpp similarity index 100% rename from isis/src/system/apps/dempack/dempack.cpp rename to isis/src/system/apps/dempack/main.cpp diff --git a/isis/src/system/apps/isiscomplete/isiscomplete.cpp b/isis/src/system/apps/isiscomplete/main.cpp similarity index 100% rename from isis/src/system/apps/isiscomplete/isiscomplete.cpp rename to isis/src/system/apps/isiscomplete/main.cpp diff --git a/isis/src/system/apps/kerneldbgen/kerneldbgen.cpp b/isis/src/system/apps/kerneldbgen/main.cpp similarity index 100% rename from isis/src/system/apps/kerneldbgen/kerneldbgen.cpp rename to isis/src/system/apps/kerneldbgen/main.cpp diff --git a/isis/src/system/apps/messckgen/messckgen.cpp b/isis/src/system/apps/messckgen/main.cpp similarity index 100% rename from isis/src/system/apps/messckgen/messckgen.cpp rename to isis/src/system/apps/messckgen/main.cpp diff --git a/isis/src/system/apps/messspkgen/messspkgen.cpp b/isis/src/system/apps/messspkgen/main.cpp similarity index 100% rename from isis/src/system/apps/messspkgen/messspkgen.cpp rename to isis/src/system/apps/messspkgen/main.cpp diff --git a/isis/src/system/apps/prtloganalyzer/prtloganalyzer.cpp b/isis/src/system/apps/prtloganalyzer/main.cpp similarity index 100% rename from isis/src/system/apps/prtloganalyzer/prtloganalyzer.cpp rename to isis/src/system/apps/prtloganalyzer/main.cpp diff --git a/isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp b/isis/src/tgo/apps/tgocassis2isis/main.cpp similarity index 100% rename from isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp rename to isis/src/tgo/apps/tgocassis2isis/main.cpp diff --git a/isis/src/tgo/apps/tgocassismos/tgocassismos.cpp b/isis/src/tgo/apps/tgocassismos/main.cpp similarity index 100% rename from isis/src/tgo/apps/tgocassismos/tgocassismos.cpp rename to isis/src/tgo/apps/tgocassismos/main.cpp diff --git a/isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp b/isis/src/tgo/apps/tgocassisrdrgen/main.cpp similarity index 100% rename from isis/src/tgo/apps/tgocassisrdrgen/tgocassisrdrgen.cpp rename to isis/src/tgo/apps/tgocassisrdrgen/main.cpp diff --git a/isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.cpp b/isis/src/tgo/apps/tgocassisstitch/main.cpp similarity index 100% rename from isis/src/tgo/apps/tgocassisstitch/tgocassisstitch.cpp rename to isis/src/tgo/apps/tgocassisstitch/main.cpp diff --git a/isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.cpp b/isis/src/tgo/apps/tgocassisunstitch/main.cpp similarity index 100% rename from isis/src/tgo/apps/tgocassisunstitch/tgocassisunstitch.cpp rename to isis/src/tgo/apps/tgocassisunstitch/main.cpp diff --git a/isis/src/viking/apps/vdcomp/vdcomp.cpp b/isis/src/viking/apps/vdcomp/main.cpp similarity index 100% rename from isis/src/viking/apps/vdcomp/vdcomp.cpp rename to isis/src/viking/apps/vdcomp/main.cpp diff --git a/isis/src/viking/apps/vik2isis/vik2isis.cpp b/isis/src/viking/apps/vik2isis/main.cpp similarity index 100% rename from isis/src/viking/apps/vik2isis/vik2isis.cpp rename to isis/src/viking/apps/vik2isis/main.cpp diff --git a/isis/src/viking/apps/vikcal/vikcal.cpp b/isis/src/viking/apps/vikcal/main.cpp similarity index 100% rename from isis/src/viking/apps/vikcal/vikcal.cpp rename to isis/src/viking/apps/vikcal/main.cpp diff --git a/isis/src/viking/apps/vikclean/vikclean.cpp b/isis/src/viking/apps/vikclean/main.cpp similarity index 100% rename from isis/src/viking/apps/vikclean/vikclean.cpp rename to isis/src/viking/apps/vikclean/main.cpp diff --git a/isis/src/viking/apps/vikfixtrx/vikfixtrx.cpp b/isis/src/viking/apps/vikfixtrx/main.cpp similarity index 100% rename from isis/src/viking/apps/vikfixtrx/vikfixtrx.cpp rename to isis/src/viking/apps/vikfixtrx/main.cpp diff --git a/isis/src/viking/apps/viknobutter/viknobutter.cpp b/isis/src/viking/apps/viknobutter/main.cpp similarity index 100% rename from isis/src/viking/apps/viknobutter/viknobutter.cpp rename to isis/src/viking/apps/viknobutter/main.cpp diff --git a/isis/src/viking/apps/viknonoodle/viknonoodle.cpp b/isis/src/viking/apps/viknonoodle/main.cpp similarity index 100% rename from isis/src/viking/apps/viknonoodle/viknonoodle.cpp rename to isis/src/viking/apps/viknonoodle/main.cpp diff --git a/isis/src/viking/apps/viknopepper/viknopepper.cpp b/isis/src/viking/apps/viknopepper/main.cpp similarity index 100% rename from isis/src/viking/apps/viknopepper/viknopepper.cpp rename to isis/src/viking/apps/viknopepper/main.cpp diff --git a/isis/src/viking/apps/viknosalt/viknosalt.cpp b/isis/src/viking/apps/viknosalt/main.cpp similarity index 100% rename from isis/src/viking/apps/viknosalt/viknosalt.cpp rename to isis/src/viking/apps/viknosalt/main.cpp diff --git a/isis/src/voyager/apps/voy2isis/voy2isis.cpp b/isis/src/voyager/apps/voy2isis/main.cpp similarity index 100% rename from isis/src/voyager/apps/voy2isis/voy2isis.cpp rename to isis/src/voyager/apps/voy2isis/main.cpp diff --git a/isis/src/voyager/apps/voycal/voycal.cpp b/isis/src/voyager/apps/voycal/main.cpp similarity index 100% rename from isis/src/voyager/apps/voycal/voycal.cpp rename to isis/src/voyager/apps/voycal/main.cpp diff --git a/isis/src/voyager/apps/voyramp/voyramp.cpp b/isis/src/voyager/apps/voyramp/main.cpp similarity index 100% rename from isis/src/voyager/apps/voyramp/voyramp.cpp rename to isis/src/voyager/apps/voyramp/main.cpp diff --git a/isis/tests/AngleTest.cpp b/isis/tests/AngleTest.cpp new file mode 100644 index 0000000000..befdfa8c30 --- /dev/null +++ b/isis/tests/AngleTest.cpp @@ -0,0 +1,310 @@ +#include "Angle.h" +#include "SpecialPixel.h" +#include "Constants.h" +#include "IException.h" + +#include +#include + +#include + + +TEST(AngleTest, DefaultConstructor) { + Isis::Angle angle; + EXPECT_FALSE(angle.isValid()); + EXPECT_EQ(angle.radians(), Isis::Null); + EXPECT_EQ(angle.degrees(), Isis::Null); + EXPECT_STREQ(angle.toString().toLatin1(), ""); +} + + +TEST(AngleTest, NullInput_DegreeOutput) { + Isis::Angle angle; + EXPECT_DOUBLE_EQ(angle.degrees(), Isis::Null); + EXPECT_FALSE(angle.isValid()); + EXPECT_STREQ(angle.toString().toLatin1(), ""); +} + + +TEST(AngleTest, DegreeInput_RadianOutput) { + Isis::Angle angle(30., Isis::Angle::Degrees ); + EXPECT_DOUBLE_EQ(angle.radians(), 30 * Isis::PI/180.0); + EXPECT_TRUE(angle.isValid()); + EXPECT_STREQ(angle.toString().toLatin1(), "30.0 degrees"); +} + + +TEST(AngleTest, RadianInput_DegreeOutput) { + Isis::Angle angle(30. * Isis::PI / 180.0, Isis::Angle::Radians ); + EXPECT_DOUBLE_EQ(angle.degrees(), 30.0); + EXPECT_STREQ(angle.toString(false).toLatin1(), "30.0"); +} + + +TEST(AngleTest, CopyConstructor) { + Isis::Angle angle(30., Isis::Angle::Degrees ); + Isis::Angle angleCopy(angle); + EXPECT_DOUBLE_EQ(angleCopy.degrees(), 30.0); +} + + +TEST(AngleTest, Mutators) { + Isis::Angle angle(30.0, Isis::Angle::Degrees ); + angle.setDegrees(180); + EXPECT_DOUBLE_EQ(angle.degrees(), 180.0); + angle.setRadians(Isis::PI); + EXPECT_DOUBLE_EQ(angle.radians(), Isis::PI); +} + +TEST(AngleOperators, QDebug) { + Isis::Angle angle(0.0, Isis::Angle::Degrees); + QString qdebug_output; + QDebug debug(&qdebug_output); + debug << angle; + EXPECT_STREQ(qdebug_output.toLatin1(), "0 (0 ) "); +} + + +TEST(AngleOperators, Assignment) { + Isis::Angle angle(30.0, Isis::Angle::Degrees ); + angle = Isis::Angle(45.0, Isis::Angle::Degrees); + EXPECT_DOUBLE_EQ(angle.degrees(), 45.0); +} + + +TEST(AngleOperators, AddSubtract) { + Isis::Angle angle1(30.0, Isis::Angle::Degrees ); + Isis::Angle angle2(60.0, Isis::Angle::Degrees ); + angle1 = angle1 + angle2; + EXPECT_DOUBLE_EQ(angle1.degrees(), 90.0); + angle1 += angle2; + EXPECT_DOUBLE_EQ(angle1.degrees(), 150.0); + angle1 -= angle2; + EXPECT_DOUBLE_EQ(angle1.degrees(), 90.0); + angle1 = angle1 - angle2; + EXPECT_DOUBLE_EQ(angle1.degrees(), 30.0); +} + + +TEST(AngleOperators, MultiplyDivide) { + Isis::Angle angle(30., Isis::Angle::Degrees ); + angle = 2. * angle; + EXPECT_DOUBLE_EQ(angle.degrees(), 60.0); + angle *= 2; + EXPECT_DOUBLE_EQ(angle.degrees(), 120.0); + angle /= 2; + EXPECT_DOUBLE_EQ(angle.degrees(), 60.0); + angle = angle / 2; + EXPECT_DOUBLE_EQ(angle.degrees(), 30.0); +} + + +TEST(AngleOperators, Logical) { + Isis::Angle angle1(30.0, Isis::Angle::Degrees ); + Isis::Angle angle2(45.0, Isis::Angle::Degrees ); + EXPECT_FALSE(angle1 == angle2); + EXPECT_TRUE(Isis::Angle() == Isis::Angle()); + EXPECT_FALSE(Isis::Angle() == angle2); +} + + +TEST(AngleOperators, LessThan) { + Isis::Angle angle1(30.0, Isis::Angle::Degrees ); + Isis::Angle angle2(45.0, Isis::Angle::Degrees ); + EXPECT_TRUE(angle1 < angle2); + EXPECT_FALSE(angle2 < angle1); + EXPECT_FALSE(angle1 < angle1); +} + +// Added good and consistent test for "greater than" +TEST(AngleOperators, GreaterThan) { + Isis::Angle angle1(30.0, Isis::Angle::Degrees ); + Isis::Angle angle2(45.0, Isis::Angle::Degrees ); + EXPECT_TRUE(angle2 > angle1); + EXPECT_FALSE(angle1 > angle2); + EXPECT_FALSE(angle2 > angle2); +} + + +TEST(AngleOperators, LessThanOrEqualTo) { + Isis::Angle angle1(30.0, Isis::Angle::Degrees ); + Isis::Angle angle2(45.0, Isis::Angle::Degrees ); + EXPECT_TRUE(angle1 <= angle1); + EXPECT_TRUE(angle1 <= angle2); + EXPECT_FALSE(angle2 <= angle1); +} + + +TEST(AngleExceptions, LessThanNullAngle){ + Isis::Angle angle1(30., Isis::Angle::Degrees ); + + try { + angle1 < Isis::Angle(); + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains("Cannot compare a invalid angles with the < operator")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException"; + } +} + +TEST(AngleExceptions, NullAngleLessThan){ + Isis::Angle angle1(30., Isis::Angle::Degrees ); + + try { + Isis::Angle() < angle1; + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains("Cannot compare a invalid angles with the < operator")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException"; + } +} + +TEST(AngleExceptions, NullAngleLessThanOrEqual){ + Isis::Angle angle1(30., Isis::Angle::Degrees ); + + try { + Isis::Angle() <= angle1; + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains("Cannot compare a invalid angles with the < operator")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException"; + } +} + + +TEST(AngleExceptions, GreaterThanNullAngle){ + Isis::Angle angle1(30., Isis::Angle::Degrees ); + + try { + angle1 > Isis::Angle(); + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains("Cannot compare a invalid angles with the > operator")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException"; + } +} + + +TEST(AngleExceptions, GreaterThanOrEqualToNullAngle){ + Isis::Angle angle1(30., Isis::Angle::Degrees ); + + try { + angle1 >= Isis::Angle(); + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains("Cannot compare a invalid angles with the > operator")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException"; + } +} + + +TEST(AngleOperators, Multiplication) { + Isis::Angle angle(30.0, Isis::Angle::Degrees ); + angle = 2.0 * angle; + EXPECT_DOUBLE_EQ(angle.degrees(), 60.0); +} + + +TEST(Angle, wrapValue){ + Isis::Angle angle(30., Isis::Angle::Degrees); + EXPECT_EQ(angle.unitWrapValue(Isis::Angle::Degrees), 360); + EXPECT_DOUBLE_EQ(angle.unitWrapValue(Isis::Angle::Radians), 2*Isis::PI); +} + + +TEST(Angle, setAngleDegrees){ + Isis::Angle angle(0.0, Isis::Angle::Degrees); + angle.setAngle(60.0, Isis::Angle::Degrees); + EXPECT_DOUBLE_EQ(angle.degrees(), 60.0); +} + + +TEST(Angle, setAngleRadians){ + Isis::Angle angle(0.0, Isis::Angle::Radians); + angle.setAngle(0.5, Isis::Angle::Radians); + EXPECT_DOUBLE_EQ(angle.radians(), 0.5); +} + + +TEST(Angle, QStringConstructor){ + Isis::Angle angle(QString("-70 15 30.125")); + EXPECT_DOUBLE_EQ(angle.degrees(), -70.25836805555555); + Isis::Angle angle2(QString(" +70 30 11 ")); + EXPECT_DOUBLE_EQ(angle2.degrees(), 70.503055555555562); + Isis::Angle angle3(QString("100 00 00")); + EXPECT_DOUBLE_EQ(angle3.degrees(), 100.0); +} + + +TEST(AngleExceptions, InvalidInput){ + try { + Isis::Angle angle(QString("100")); + angle.toString(); + + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains( + "[100] is not a vaid input to Angle. It needs to be of the form: \"dd mm ss.ss\"")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException."; + } +} + + +TEST(AngleExceptions, InvalidInput2){ + try { + Isis::Angle angle(QString("70 11")); + angle.toString(); + + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains( + "[70 11] is not a vaid input to Angle. It needs to be of the form: \"dd mm ss.ss\"")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException."; + } +} + + +TEST(AngleExceptions, InvalidInput3){ + try { + Isis::Angle angle(QString("this 79 should 00 fail 0.111")); + angle.toString(); + + FAIL() << "Expected an error"; + } + catch(Isis::IException &e) { + EXPECT_TRUE(e.toString().contains( + "[this 79 should 00 fail 0.111] is not a vaid input to Angle. It needs to be of the form: \"dd mm ss.ss\"")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected IException."; + } +} diff --git a/isis/tests/BundleSettingsTests.cpp b/isis/tests/BundleSettingsTests.cpp new file mode 100644 index 0000000000..3cdf389047 --- /dev/null +++ b/isis/tests/BundleSettingsTests.cpp @@ -0,0 +1,873 @@ +#include "BundleSettings.h" + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "BundleObservationSolveSettings.h" +#include "BundleTargetBody.h" +#include "IException.h" +#include "MaximumLikelihoodWFunctions.h" + +#include "gmock/gmock.h" + +bool observationSettingsComparison( + BundleObservationSolveSettings m, + BundleObservationSolveSettings n +) { + return (m.instrumentId() == n.instrumentId()); +} + +::testing::AssertionResult assertObservationSettingsEqual( + const char* m_expr, + const char* n_expr, + BundleObservationSolveSettings m, + BundleObservationSolveSettings n +) { + if (observationSettingsComparison(m, n)) return ::testing::AssertionSuccess(); + + return ::testing::AssertionFailure() << m_expr << " and " << n_expr + << " are different because they have different InstrumentIds (" + << m.instrumentId().toStdString() << " and " + << n.instrumentId().toStdString() << ")"; +} + +QDomDocument saveToQDomDocument(BundleSettings &settings) { + + QString outputString; + QXmlStreamWriter outputWriter(&outputString); + settings.save(outputWriter, NULL); + QDomDocument settingsDoc("settings_doc"); + settingsDoc.setContent(outputString); + + return settingsDoc; +} + +class BundleSettings_ObservationTest : public ::testing::Test { + protected: + BundleSettings testSettings; + QList optionsList; + QString firstInstrument; + QString secondInstrument; + QString firstObservationNumber; + QString secondObservationNumber; + + void SetUp() override { + firstInstrument = "First Instrument"; + secondInstrument = "Second Instrument"; + firstObservationNumber = "First Observation"; + secondObservationNumber = "Second Observation"; + BundleObservationSolveSettings firstObsSettings; + BundleObservationSolveSettings secondObsSettings; + firstObsSettings.setInstrumentId(firstInstrument); + secondObsSettings.setInstrumentId(secondInstrument); + firstObsSettings.addObservationNumber(firstObservationNumber); + secondObsSettings.addObservationNumber(secondObservationNumber); + optionsList = {firstObsSettings, secondObsSettings}; + testSettings.setObservationSolveOptions(optionsList); + } +}; + +class BundleSettings_NotDefault : public ::testing::Test { + protected: + BundleSettings testSettings; + + void SetUp() override { + BundleSettings testSettings; + testSettings.setSolveOptions( + true, true, true, true, + SurfacePoint::Rectangular, SurfacePoint::Rectangular, + 0.1, + 0.25, + 0.3); + testSettings.setValidateNetwork(true); + testSettings.setOutlierRejection(true, 5.0); + testSettings.setCreateInverseMatrix(true); + QList emptySolveSettings; + testSettings.setObservationSolveOptions(emptySolveSettings); + testSettings.setConvergenceCriteria( + BundleSettings::ParameterCorrections, + 10, + 5); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Huber, + 75.0); + BundleTargetBodyQsp testTarget(new BundleTargetBody); + testSettings.setBundleTargetBody(testTarget); + testSettings.setOutputFilePrefix("test/path"); + } +}; + +class MockBundleTargetBody : public BundleTargetBody { + public: + MOCK_METHOD0(numberParameters, int()); + MOCK_METHOD0(solvePoleRA, bool()); + MOCK_METHOD0(solvePoleRAVelocity, bool()); + MOCK_METHOD0(solvePoleDec, bool()); + MOCK_METHOD0(solvePoleDecVelocity, bool()); + MOCK_METHOD0(solvePM, bool()); + MOCK_METHOD0(solvePMVelocity, bool()); + MOCK_METHOD0(solvePMAcceleration, bool()); + MOCK_METHOD0(solveTriaxialRadii, bool()); + MOCK_METHOD0(solveMeanRadius, bool()); +}; + +class BoolTest : public ::testing::TestWithParam { + // Intentionally empty +}; + +class CoordinateTypeTest : public ::testing::TestWithParam { + // Intentionally empty +}; + +class ConvergenceCriteriaTest : public ::testing::TestWithParam { + // Intentionally empty +}; + +TEST(BundleSettings, DefaultConstructor) { + BundleSettings testSettings; + + EXPECT_TRUE(testSettings.validateNetwork()); + + EXPECT_FALSE(testSettings.createInverseMatrix()); + EXPECT_FALSE(testSettings.solveObservationMode()); + EXPECT_FALSE(testSettings.solveRadius()); + EXPECT_FALSE(testSettings.updateCubeLabel()); + EXPECT_FALSE(testSettings.errorPropagation()); + EXPECT_FALSE(testSettings.outlierRejection()); + + EXPECT_EQ(3.0, testSettings.outlierRejectionMultiplier()); + + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord1AprioriSigma()); + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord2AprioriSigma()); + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord3AprioriSigma()); + + EXPECT_EQ(BundleSettings::Sigma0, testSettings.convergenceCriteria()); + EXPECT_EQ(1.0e-10, testSettings.convergenceCriteriaThreshold()); + EXPECT_EQ(50, testSettings.convergenceCriteriaMaximumIterations()); + + EXPECT_TRUE(testSettings.maximumLikelihoodEstimatorModels().isEmpty()); + + EXPECT_FALSE(testSettings.solveTargetBody()); + EXPECT_FALSE(testSettings.solvePoleRA()); + EXPECT_FALSE(testSettings.solvePoleRAVelocity()); + EXPECT_FALSE(testSettings.solvePoleDec()); + EXPECT_FALSE(testSettings.solvePoleDecVelocity()); + EXPECT_FALSE(testSettings.solvePM()); + EXPECT_FALSE(testSettings.solvePMVelocity()); + EXPECT_FALSE(testSettings.solvePMAcceleration()); + EXPECT_FALSE(testSettings.solveTargetBody()); + EXPECT_FALSE(testSettings.solveMeanRadius()); + EXPECT_EQ(0, testSettings.numberTargetBodyParameters()); + + EXPECT_EQ(1, testSettings.numberSolveSettings()); + + EXPECT_EQ(SurfacePoint::Latitudinal, testSettings.controlPointCoordTypeReports()); + EXPECT_EQ(SurfacePoint::Latitudinal, testSettings.controlPointCoordTypeBundle()); + + EXPECT_EQ("", testSettings.outputFilePrefix()); +} + +TEST_F(BundleSettings_NotDefault, CopyConstructor) { + BundleSettings copySettings(testSettings); + + EXPECT_EQ(testSettings.validateNetwork(), copySettings.validateNetwork()); + + EXPECT_EQ(testSettings.createInverseMatrix(), copySettings.createInverseMatrix()); + EXPECT_EQ(testSettings.solveObservationMode(), copySettings.solveObservationMode()); + EXPECT_EQ(testSettings.solveRadius(), copySettings.solveRadius()); + EXPECT_EQ(testSettings.updateCubeLabel(), copySettings.updateCubeLabel()); + EXPECT_EQ(testSettings.errorPropagation(), copySettings.errorPropagation()); + EXPECT_EQ(testSettings.outlierRejection(), copySettings.outlierRejection()); + + EXPECT_EQ(testSettings.outlierRejectionMultiplier(), copySettings.outlierRejectionMultiplier()); + + EXPECT_EQ(testSettings.globalPointCoord1AprioriSigma(), copySettings.globalPointCoord1AprioriSigma()); + EXPECT_EQ(testSettings.globalPointCoord2AprioriSigma(), copySettings.globalPointCoord2AprioriSigma()); + EXPECT_EQ(testSettings.globalPointCoord3AprioriSigma(), copySettings.globalPointCoord3AprioriSigma()); + + EXPECT_EQ(testSettings.convergenceCriteria(), copySettings.convergenceCriteria()); + EXPECT_EQ(testSettings.convergenceCriteriaThreshold(), copySettings.convergenceCriteriaThreshold()); + EXPECT_EQ(testSettings.convergenceCriteriaMaximumIterations(), copySettings.convergenceCriteriaMaximumIterations()); + + EXPECT_EQ(testSettings.maximumLikelihoodEstimatorModels(), copySettings.maximumLikelihoodEstimatorModels()); + + EXPECT_EQ(testSettings.numberSolveSettings(), copySettings.numberSolveSettings()); + + EXPECT_EQ(testSettings.controlPointCoordTypeReports(), copySettings.controlPointCoordTypeReports()); + EXPECT_EQ(testSettings.controlPointCoordTypeBundle(), copySettings.controlPointCoordTypeBundle()); + + EXPECT_EQ(testSettings.outputFilePrefix(), copySettings.outputFilePrefix()); + + EXPECT_EQ(testSettings.bundleTargetBody(), copySettings.bundleTargetBody()); +} + +TEST_F(BundleSettings_NotDefault, Assignment) { + BundleSettings assignedSettings; + assignedSettings = testSettings; + + EXPECT_EQ(testSettings.validateNetwork(), assignedSettings.validateNetwork()); + + EXPECT_EQ(testSettings.createInverseMatrix(), assignedSettings.createInverseMatrix()); + EXPECT_EQ(testSettings.solveObservationMode(), assignedSettings.solveObservationMode()); + EXPECT_EQ(testSettings.solveRadius(), assignedSettings.solveRadius()); + EXPECT_EQ(testSettings.updateCubeLabel(), assignedSettings.updateCubeLabel()); + EXPECT_EQ(testSettings.errorPropagation(), assignedSettings.errorPropagation()); + EXPECT_EQ(testSettings.outlierRejection(), assignedSettings.outlierRejection()); + + EXPECT_EQ(testSettings.outlierRejectionMultiplier(), assignedSettings.outlierRejectionMultiplier()); + + EXPECT_EQ(testSettings.globalPointCoord1AprioriSigma(), assignedSettings.globalPointCoord1AprioriSigma()); + EXPECT_EQ(testSettings.globalPointCoord2AprioriSigma(), assignedSettings.globalPointCoord2AprioriSigma()); + EXPECT_EQ(testSettings.globalPointCoord3AprioriSigma(), assignedSettings.globalPointCoord3AprioriSigma()); + + EXPECT_EQ(testSettings.convergenceCriteria(), assignedSettings.convergenceCriteria()); + EXPECT_EQ(testSettings.convergenceCriteriaThreshold(), assignedSettings.convergenceCriteriaThreshold()); + EXPECT_EQ(testSettings.convergenceCriteriaMaximumIterations(), assignedSettings.convergenceCriteriaMaximumIterations()); + + EXPECT_EQ(testSettings.maximumLikelihoodEstimatorModels(), assignedSettings.maximumLikelihoodEstimatorModels()); + + EXPECT_EQ(testSettings.numberSolveSettings(), assignedSettings.numberSolveSettings()); + + EXPECT_EQ(testSettings.controlPointCoordTypeReports(), assignedSettings.controlPointCoordTypeReports()); + EXPECT_EQ(testSettings.controlPointCoordTypeBundle(), assignedSettings.controlPointCoordTypeBundle()); + + EXPECT_EQ(testSettings.outputFilePrefix(), assignedSettings.outputFilePrefix()); + + EXPECT_EQ(testSettings.bundleTargetBody(), assignedSettings.bundleTargetBody()); +} + +TEST_P(BoolTest, validateNetwork) { + BundleSettings testSettings; + testSettings.setValidateNetwork(GetParam()); + EXPECT_EQ(GetParam(), testSettings.validateNetwork()); +} + +TEST_P(BoolTest, saveValidateNetwork) { + BundleSettings testSettings; + testSettings.setValidateNetwork(GetParam()); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement validateNetwork = globalSettings.firstChildElement("validateNetwork"); + ASSERT_FALSE(validateNetwork.isNull()); + EXPECT_EQ("validateNetwork", validateNetwork.tagName()); + EXPECT_EQ(toString(testSettings.validateNetwork()), validateNetwork.text()); +} + +TEST_P(BoolTest, outlierRejection) { + BundleSettings testSettings; + testSettings.setOutlierRejection(GetParam()); + EXPECT_EQ(GetParam(), testSettings.outlierRejection()); +} + +TEST_P(BoolTest, saveOutlierRejection) { + BundleSettings testSettings; + testSettings.setOutlierRejection(GetParam()); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement outlierRejectionOptions = globalSettings.firstChildElement("outlierRejectionOptions"); + ASSERT_FALSE(outlierRejectionOptions.isNull()); + QDomNamedNodeMap outlierRejectionOptionsAtts = outlierRejectionOptions.attributes(); + EXPECT_EQ( + toString(testSettings.outlierRejection()), + outlierRejectionOptionsAtts.namedItem("rejection").nodeValue() + ); + EXPECT_EQ( + (testSettings.outlierRejection() ? + toString(testSettings.outlierRejectionMultiplier()) : "N/A"), + outlierRejectionOptionsAtts.namedItem("multiplier").nodeValue() + ); +} + +TEST_P(BoolTest, inverseMatrix) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + true, + testSettings.solveRadius() + ); + testSettings.setCreateInverseMatrix(GetParam()); + EXPECT_EQ(GetParam(), testSettings.createInverseMatrix()); +} + +TEST_P(BoolTest, setBoolSolveOptions) { + BundleSettings testSettings; + testSettings.setSolveOptions( + GetParam(), + GetParam(), + GetParam(), + GetParam() + ); + EXPECT_EQ(GetParam(), testSettings.solveObservationMode()); + EXPECT_EQ(GetParam(), testSettings.updateCubeLabel()); + EXPECT_EQ(GetParam(), testSettings.errorPropagation()); + EXPECT_EQ(GetParam(), testSettings.solveRadius()); +} + +TEST_P(BoolTest, saveSolveOptions) { + BundleSettings testSettings; + testSettings.setSolveOptions( + GetParam(), + GetParam(), + GetParam(), + GetParam() + ); + testSettings.setCreateInverseMatrix(GetParam()); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement solveOptions = globalSettings.firstChildElement("solveOptions"); + ASSERT_FALSE(solveOptions.isNull()); + QDomNamedNodeMap solveOptionAtts = solveOptions.attributes(); + EXPECT_EQ( + toString(testSettings.solveObservationMode()), + solveOptionAtts.namedItem("solveObservationMode").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.solveRadius()), + solveOptionAtts.namedItem("solveRadius").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.updateCubeLabel()), + solveOptionAtts.namedItem("updateCubeLabel").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.errorPropagation()), + solveOptionAtts.namedItem("errorPropagation").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.createInverseMatrix()), + solveOptionAtts.namedItem("createInverseMatrix").nodeValue() + ); +} + +INSTANTIATE_TEST_CASE_P( + BundleSettings, + BoolTest, + ::testing::Bool() +); + +TEST_P(CoordinateTypeTest, setCoordinateTypeSolveOptions) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + testSettings.errorPropagation(), + testSettings.solveRadius(), + GetParam(), + GetParam() + ); + EXPECT_EQ(GetParam(), testSettings.controlPointCoordTypeReports()); + EXPECT_EQ(GetParam(), testSettings.controlPointCoordTypeBundle()); +} + +TEST_P(BoolTest, saveCoordinateTypes) { + BundleSettings testSettings; + testSettings.setSolveOptions( + GetParam(), + GetParam(), + GetParam(), + GetParam() + ); + testSettings.setCreateInverseMatrix(GetParam()); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement solveOptions = globalSettings.firstChildElement("solveOptions"); + ASSERT_FALSE(solveOptions.isNull()); + QDomNamedNodeMap solveOptionAtts = solveOptions.attributes(); + EXPECT_EQ( + toString(testSettings.controlPointCoordTypeReports()), + solveOptionAtts.namedItem("controlPointCoordTypeReports").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.controlPointCoordTypeBundle()), + solveOptionAtts.namedItem("controlPointCoordTypeBundle").nodeValue() + ); +} + +INSTANTIATE_TEST_CASE_P( + BundleSettings, + CoordinateTypeTest, + ::testing::Values(SurfacePoint::Latitudinal, SurfacePoint::Rectangular) +); + +TEST(BundleSettings, setGlobalSigmas) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + testSettings.errorPropagation(), + true, + testSettings.controlPointCoordTypeBundle(), + testSettings.controlPointCoordTypeReports(), + 2.0, + 8.0, + 32.0 + ); + + EXPECT_EQ(2.0, testSettings.globalPointCoord1AprioriSigma()); + EXPECT_EQ(8.0, testSettings.globalPointCoord2AprioriSigma()); + EXPECT_EQ(32.0, testSettings.globalPointCoord3AprioriSigma()); +} + +TEST(BundleSettings, setBadGlobalSigmas) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + testSettings.errorPropagation(), + true, + testSettings.controlPointCoordTypeBundle(), + testSettings.controlPointCoordTypeReports(), + -2.0, + -8.0, + -32.0 + ); + + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord1AprioriSigma()); + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord2AprioriSigma()); + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord3AprioriSigma()); +} + +TEST(BundleSettings, setGlobalSigmasNoRadius) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + testSettings.errorPropagation(), + false, + testSettings.controlPointCoordTypeBundle(), + testSettings.controlPointCoordTypeReports(), + Isis::Null, + Isis::Null, + 32.0 + ); + + EXPECT_EQ(Isis::Null, testSettings.globalPointCoord3AprioriSigma()); +} + +TEST(BundleSettings, saveGlobalSigmas) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + testSettings.errorPropagation(), + true, + testSettings.controlPointCoordTypeBundle(), + testSettings.controlPointCoordTypeReports(), + 2.0, + 8.0, + 32.0 + ); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement aprioriSigmas = globalSettings.firstChildElement("aprioriSigmas"); + ASSERT_FALSE(aprioriSigmas.isNull()); + QDomNamedNodeMap aprioriSigmasAtts = aprioriSigmas.attributes(); + EXPECT_EQ( + toString(testSettings.globalPointCoord1AprioriSigma()), + aprioriSigmasAtts.namedItem("pointCoord1").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.globalPointCoord2AprioriSigma()), + aprioriSigmasAtts.namedItem("pointCoord2").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.globalPointCoord3AprioriSigma()), + aprioriSigmasAtts.namedItem("pointCoord3").nodeValue() + ); +} + +TEST(BundleSettings, saveBadGlobalSigmas) { + BundleSettings testSettings; + testSettings.setSolveOptions( + testSettings.solveObservationMode(), + testSettings.updateCubeLabel(), + testSettings.errorPropagation(), + true, + testSettings.controlPointCoordTypeBundle(), + testSettings.controlPointCoordTypeReports(), + -2.0, + -8.0, + -32.0 + ); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement aprioriSigmas = globalSettings.firstChildElement("aprioriSigmas"); + ASSERT_FALSE(aprioriSigmas.isNull()); + QDomNamedNodeMap aprioriSigmasAtts = aprioriSigmas.attributes(); + EXPECT_EQ( + "N/A", + aprioriSigmasAtts.namedItem("pointCoord1").nodeValue() + ); + EXPECT_EQ( + "N/A", + aprioriSigmasAtts.namedItem("pointCoord2").nodeValue() + ); + EXPECT_EQ( + "N/A", + aprioriSigmasAtts.namedItem("pointCoord3").nodeValue() + ); +} + +TEST(BundleSettings, outlierRejectionMultiplier) { + BundleSettings testSettings; + testSettings.setOutlierRejection(true, 8.0); + EXPECT_EQ(8.0, testSettings.outlierRejectionMultiplier()); +} + +TEST_F(BundleSettings_ObservationTest, observationSolveSettings) { + EXPECT_EQ(testSettings.numberSolveSettings(), optionsList.size()); + EXPECT_TRUE(std::equal( + optionsList.begin(), + optionsList.end(), + testSettings.observationSolveSettings().begin(), + observationSettingsComparison) + ); + EXPECT_PRED_FORMAT2( + assertObservationSettingsEqual, + testSettings.observationSolveSettings(secondObservationNumber), + optionsList[1] + ); + EXPECT_PRED_FORMAT2( + assertObservationSettingsEqual, + testSettings.observationSolveSettings(1), + optionsList[1] + ); +} + +TEST_F(BundleSettings_ObservationTest, saveObservationSolveSettings) { + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + QDomElement observationSolveSettingsList = root.firstChildElement("observationSolveSettingsList"); + ASSERT_FALSE(observationSolveSettingsList.isNull()); + EXPECT_EQ(testSettings.numberSolveSettings(), observationSolveSettingsList.childNodes().size()); +} + +TEST_P(ConvergenceCriteriaTest, convergenceCriteriaStrings) { + QString criteriaString = BundleSettings::convergenceCriteriaToString(GetParam()); + BundleSettings::ConvergenceCriteria criteria = + BundleSettings::stringToConvergenceCriteria(criteriaString); + EXPECT_EQ(GetParam(), criteria); +} + +TEST_P(ConvergenceCriteriaTest, convergenceCriteria) { + BundleSettings testSettings; + testSettings.setConvergenceCriteria( + GetParam(), + 2.0, + 50 + ); + EXPECT_EQ(GetParam(), testSettings.convergenceCriteria()); + EXPECT_EQ(2.0, testSettings.convergenceCriteriaThreshold()); + EXPECT_EQ(50, testSettings.convergenceCriteriaMaximumIterations()); +} + +TEST_P(ConvergenceCriteriaTest, saveConvergenceCriteria) { + BundleSettings testSettings; + testSettings.setConvergenceCriteria( + GetParam(), + 2.0, + 50 + ); + testSettings.setCreateInverseMatrix(GetParam()); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement convergenceCriteriaOptions = globalSettings.firstChildElement("convergenceCriteriaOptions"); + ASSERT_FALSE(convergenceCriteriaOptions.isNull()); + QDomNamedNodeMap convergenceCriteriaOptionsAtts = convergenceCriteriaOptions.attributes(); + EXPECT_EQ( + BundleSettings::convergenceCriteriaToString(testSettings.convergenceCriteria()), + convergenceCriteriaOptionsAtts.namedItem("convergenceCriteria").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.convergenceCriteriaThreshold()), + convergenceCriteriaOptionsAtts.namedItem("threshold").nodeValue() + ); + EXPECT_EQ( + toString(testSettings.convergenceCriteriaMaximumIterations()), + convergenceCriteriaOptionsAtts.namedItem("maximumIterations").nodeValue() + ); +} + +INSTANTIATE_TEST_CASE_P( + BundleSettings, + ConvergenceCriteriaTest, + ::testing::Values(BundleSettings::Sigma0, BundleSettings::ParameterCorrections) +); + +TEST(BundleSettings, maximumLikelihoodHuber) { + BundleSettings testSettings; + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Huber, + 64.0 + ); + QList< QPair< MaximumLikelihoodWFunctions::Model, double > > functions = + testSettings.maximumLikelihoodEstimatorModels(); + ASSERT_EQ(1, functions.size()); + EXPECT_EQ(MaximumLikelihoodWFunctions::Huber, functions.front().first); + EXPECT_EQ(64.0, functions.front().second); +} + +TEST(BundleSettings, maximumLikelihoodHuberModified) { + BundleSettings testSettings; + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::HuberModified, + 64.0 + ); + QList< QPair< MaximumLikelihoodWFunctions::Model, double > > functions = + testSettings.maximumLikelihoodEstimatorModels(); + ASSERT_EQ(1, functions.size()); + EXPECT_EQ(MaximumLikelihoodWFunctions::HuberModified, functions.front().first); + EXPECT_EQ(64.0, functions.front().second); +} + +// I am not sure why this throws an exceptions. Unforunately, the people who wrote +// this are now gone and no one knows if they should throw or not without doing +// more research. For now, we are testing existing functionality - JAM 2018/11/13 +TEST(BundleSettings, maximumLikelihoodWelsch) { + BundleSettings testSettings; + try { + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Welsch, + 64.0 + ); + FAIL() << "Expected an exception"; + } + catch (IException &e) { + EXPECT_THAT( + e.toString().toStdString(), + ::testing::HasSubstr("the first model must be of type HUBER or HUBER_MODIFIED") + ); + } + catch (...) { + FAIL() << "Expected an ISIS exception"; + } +} + +// I am not sure why this throws an exceptions. Unforunately, the people who wrote +// this are now gone and no one knows if they should throw or not without doing +// more research. For now, we are testing existing functionality - JAM 2018/11/13 +TEST(BundleSettings, maximumLikelihoodChen) { + BundleSettings testSettings; + try { + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Chen, + 64.0 + ); + FAIL() << "Expected an exception"; + } + catch (IException &e) { + EXPECT_THAT( + e.toString().toStdString(), + ::testing::HasSubstr("the first model must be of type HUBER or HUBER_MODIFIED") + ); + } + catch (...) { + FAIL() << "Expected an ISIS exception"; + } +} + +TEST(BundleSettings, multipleMaximumLikelihoodModels) { + BundleSettings testSettings; + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Huber, + 64.0 + ); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::HuberModified, + 32.0 + ); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Welsch, + 16.0 + ); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Chen, + 8.0 + ); + QList< QPair< MaximumLikelihoodWFunctions::Model, double > > functions = + testSettings.maximumLikelihoodEstimatorModels(); + ASSERT_EQ(4, functions.size()); + EXPECT_EQ(MaximumLikelihoodWFunctions::Huber, functions[0].first); + EXPECT_EQ(64.0, functions[0].second); + EXPECT_EQ(MaximumLikelihoodWFunctions::HuberModified, functions[1].first); + EXPECT_EQ(32.0, functions[1].second); + EXPECT_EQ(MaximumLikelihoodWFunctions::Welsch, functions[2].first); + EXPECT_EQ(16.0, functions[2].second); + EXPECT_EQ(MaximumLikelihoodWFunctions::Chen, functions[3].first); + EXPECT_EQ(8.0, functions[3].second); +} + +TEST(BundleSettings, saveMaximumLikelyhoodModels) { + BundleSettings testSettings; + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Huber, + 64.0 + ); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::HuberModified, + 32.0 + ); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Welsch, + 16.0 + ); + testSettings.addMaximumLikelihoodEstimatorModel( + MaximumLikelihoodWFunctions::Chen, + 8.0 + ); + QList< QPair< MaximumLikelihoodWFunctions::Model, double > > functions = + testSettings.maximumLikelihoodEstimatorModels(); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement maximumLikelihoodEstimation = globalSettings.firstChildElement("maximumLikelihoodEstimation"); + ASSERT_FALSE(maximumLikelihoodEstimation.isNull()); + + QDomNodeList modelNodes = maximumLikelihoodEstimation.childNodes(); + ASSERT_EQ(functions.size(), modelNodes.size()); + for(int modelIndex = 0; modelIndex < functions.size(); modelIndex++) { + QDomNode modelElement = modelNodes.at(modelIndex); + EXPECT_EQ("model", modelElement.nodeName()); + QDomNamedNodeMap modelAtts = modelElement.attributes(); + EXPECT_EQ( + MaximumLikelihoodWFunctions::modelToString(functions[modelIndex].first), + modelAtts.namedItem("type").nodeValue() + ); + EXPECT_EQ( + toString(functions[modelIndex].second), + modelAtts.namedItem("quantile").nodeValue() + ); + } +} + +TEST(BundleSettings, outputFilePrefix) { + BundleSettings testSettings; + QString testPrefix("test/file/prefix"); + testSettings.setOutputFilePrefix(testPrefix); + EXPECT_EQ(testPrefix, testSettings.outputFilePrefix()); +} + +TEST(BundleSettings, SaveOutputFilePrefix) { + BundleSettings testSettings; + QString testPrefix("test/file/prefix"); + testSettings.setOutputFilePrefix(testPrefix); + + QDomDocument settingsDoc = saveToQDomDocument(testSettings); + QDomElement root = settingsDoc.documentElement(); + + QDomElement globalSettings = root.firstChildElement("globalSettings"); + ASSERT_FALSE(globalSettings.isNull()); + + QDomElement outputFileOptions = globalSettings.firstChildElement("outputFileOptions"); + ASSERT_FALSE(outputFileOptions.isNull()); + QDomNamedNodeMap outputFileOptionsAtts = outputFileOptions.attributes(); + EXPECT_EQ( + testSettings.outputFilePrefix(), + outputFileOptionsAtts.namedItem("fileNamePrefix").nodeValue() + ); +} + +TEST(BundleSettings, setBundleTargetBody) { + BundleTargetBodyQsp testTarget(new BundleTargetBody); + BundleSettings testSettings; + testSettings.setBundleTargetBody(testTarget); + EXPECT_EQ(testTarget, testSettings.bundleTargetBody()); +} + +TEST(BundleSettings, BundleTargetBodyAccesors) { + MockBundleTargetBody *mockBody = new MockBundleTargetBody; + EXPECT_CALL(*mockBody, numberParameters()) + .Times(3) + .WillOnce(::testing::Return(0)) + .WillRepeatedly(::testing::Return(5)); + EXPECT_CALL(*mockBody, solvePoleRA()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solvePoleRAVelocity()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solvePoleDec()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solvePoleDecVelocity()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solvePM()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solvePMVelocity()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solvePMAcceleration()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solveTriaxialRadii()) + .Times(1) + .WillOnce(::testing::Return(true)); + EXPECT_CALL(*mockBody, solveMeanRadius()) + .Times(1) + .WillOnce(::testing::Return(true)); + + BundleSettings testSettings; + BundleTargetBodyQsp testTarget(mockBody); + testSettings.setBundleTargetBody(testTarget); + EXPECT_FALSE(testSettings.solveTargetBody()); + EXPECT_TRUE(testSettings.solveTargetBody()); + EXPECT_EQ(5, testSettings.numberTargetBodyParameters()); + EXPECT_TRUE(testSettings.solvePoleRA()); + EXPECT_TRUE(testSettings.solvePoleRAVelocity()); + EXPECT_TRUE(testSettings.solvePoleDec()); + EXPECT_TRUE(testSettings.solvePoleDecVelocity()); + EXPECT_TRUE(testSettings.solvePM()); + EXPECT_TRUE(testSettings.solvePMVelocity()); + EXPECT_TRUE(testSettings.solvePMAcceleration()); + EXPECT_TRUE(testSettings.solveTriaxialRadii()); + EXPECT_TRUE(testSettings.solveMeanRadius()); +} diff --git a/isis/tests/CMakeLists.txt b/isis/tests/CMakeLists.txt new file mode 100644 index 0000000000..dd5bf29f16 --- /dev/null +++ b/isis/tests/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.10) + +add_dependencies(isis3 isis3) + +file(GLOB test_source "${CMAKE_SOURCE_DIR}/tests/*.cpp") + + +# Link runISISTests with what we want to test and the GTest and pthread library +add_executable(runISISTests + IsisTestMain.cpp + ${test_source}) + +target_link_libraries(runISISTests isis3 ${ALLLIBS} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread) + +gtest_discover_tests(runISISTests WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) diff --git a/isis/tests/ColorTests.cpp b/isis/tests/ColorTests.cpp new file mode 100644 index 0000000000..e4aac67823 --- /dev/null +++ b/isis/tests/ColorTests.cpp @@ -0,0 +1,91 @@ +#include "gtest/gtest.h" + +#include "Color.h" +#include "IException.h" +#include "TestUtilities.h" + +#include +#include + + +namespace Isis{ + + + class QStringQColorPair: public ::testing::TestWithParam > { + // Intentionally left empty + }; + + + class InvalidColorString: public ::testing::TestWithParam { + // Intentionally left empty + }; + + + TEST_P (QStringQColorPair, ValidColorToString) { + EXPECT_PRED_FORMAT2(AssertQStringsEqual, GetParam().first, Color::toRGBAString(GetParam().second)); + } + + + TEST (ColorTests, InvalidColorToString) { + QString message = "Can not convert an invalid color to an RGBA string. " + "There is no string representation of an invalid color"; + try { + Color::toRGBAString(QColor()); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_PRED_FORMAT2( + AssertIExceptionMessage, + e, + message); + EXPECT_PRED_FORMAT2( + AssertIExceptionError, + e, + IException::ErrorType::Unknown); + } + catch(...) { + FAIL() << "Expected error message: \"" << message.toStdString() << "\""; + } + } + + + TEST_P (QStringQColorPair, ValidStringToColor) { + EXPECT_EQ(GetParam().second, Color::fromRGBAString(GetParam().first)); + } + + + TEST_P (InvalidColorString, InvalidStringToColor) { + EXPECT_EQ(QColor(QColor::Invalid), Color::fromRGBAString(GetParam())); + } + + + TEST_P (QStringQColorPair, ValidColorRGBAFormat) { + EXPECT_TRUE(Color::colorRGBAFormat().exactMatch(GetParam().first)); + } + + + TEST_P (InvalidColorString, InvalidColorRGBAFormat) { + EXPECT_FALSE(Color::colorRGBAFormat().exactMatch(GetParam())); + } + + + INSTANTIATE_TEST_CASE_P (Color, + QStringQColorPair, + ::testing::Values(std::make_pair(QString("#000000ff"), QColor(0, 0, 0)), + std::make_pair(QString("#00000000"), QColor(0, 0, 0, 0)), + std::make_pair(QString("#ff000000"), QColor(255, 0, 0, 0)), + std::make_pair(QString("#00ff0000"), QColor(0, 255, 0, 0)), + std::make_pair(QString("#0000ff00"), QColor(0, 0, 255, 0)), + std::make_pair(QString("#000000ff"), QColor(0, 0, 0, 255)), + std::make_pair(QString("#ffffffff"), QColor(255, 255, 255, 255)), + std::make_pair(QString("#0a141e28"), QColor(10, 20, 30, 40)))); + + + INSTANTIATE_TEST_CASE_P (Color, + InvalidColorString, + ::testing::Values(QString("#rrggbbaa"), + QString(" 00112233"), + QString(""), + QString("#001122"))); + +} diff --git a/isis/tests/DistanceTests.cpp b/isis/tests/DistanceTests.cpp new file mode 100644 index 0000000000..8d6765ff6a --- /dev/null +++ b/isis/tests/DistanceTests.cpp @@ -0,0 +1,294 @@ +#include "Distance.h" +#include "Displacement.h" +#include "IException.h" +#include "SpecialPixel.h" + +#include + +using namespace Isis; + +TEST(DistanceTests, DefaultConstructor) { + Distance dist; + EXPECT_EQ(dist.meters(), Null); + EXPECT_EQ(dist.kilometers(), Null); + EXPECT_EQ(dist.pixels(), Null); + EXPECT_EQ(dist.solarRadii(), Null); +} + + +TEST(DistanceTests, MetersConstructor) { + Distance dist(1500500, Distance::Meters); + EXPECT_EQ(dist.meters(), 1500500); + EXPECT_EQ(dist.kilometers(), 1500.5); + EXPECT_DOUBLE_EQ(dist.solarRadii(), 1500500 / 6.9599e8); + EXPECT_EQ(dist.pixels(1), 1500500); +} + + +TEST(DistanceTests, KilometersConstructor) { + Distance dist(1500.5, Distance::Kilometers); + EXPECT_EQ(dist.kilometers(), 1500.5); + EXPECT_EQ(dist.meters(), 1500500); + EXPECT_DOUBLE_EQ(dist.solarRadii(), 1500500 / 6.9599e8); + EXPECT_EQ(dist.pixels(1), 1500500); +} + + +TEST(DistanceTests, SolarRadiiConstructor) { + Distance dist(1, Distance::SolarRadii); + EXPECT_EQ(dist.solarRadii(), 1); + EXPECT_DOUBLE_EQ(dist.meters(), 6.9599e8); + EXPECT_DOUBLE_EQ(dist.kilometers(), 6.9599e5); + EXPECT_DOUBLE_EQ(dist.pixels(1), 6.9599e8); +} + + +TEST(DistanceTests, PixelsConstructor) { + Distance dist(1500500, Distance::Pixels); + EXPECT_EQ(dist.pixels(1), 1500500); + EXPECT_EQ(dist.meters(), 1500500); + EXPECT_EQ(dist.kilometers(), 1500.5); + EXPECT_DOUBLE_EQ(dist.solarRadii(), 1500500 / 6.9599e8); +} + + +TEST(DistanceTests, PixelsPerMeterConstructor) { + Distance dist(1500500, 2); + EXPECT_EQ(dist.pixels(2), 1500500); + EXPECT_EQ(dist.meters(), 750250); + EXPECT_EQ(dist.kilometers(), 750.25); + EXPECT_DOUBLE_EQ(dist.solarRadii(), 750250 / 6.9599e8); +} + + +TEST(DistanceTests, CopyConstructor) { + Distance origDist(1500.5, Distance::Meters); + Distance copiedDist(origDist); + ASSERT_EQ(copiedDist.meters(), 1500.5); +} + + +TEST(DistanceTests, SetMeters) { + Distance dist; + dist.setMeters(1500500); + ASSERT_EQ(dist.meters(), 1500500); +} + + +TEST(DistanceTests, SetKilometers) { + Distance dist; + dist.setKilometers(1500500); + ASSERT_EQ(dist.kilometers(), 1500500); +} + + +TEST(DistanceTests, SetSolarRadii) { + Distance dist; + dist.setSolarRadii(1); + ASSERT_EQ(dist.solarRadii(), 1); +} + + +TEST(DistanceTests, SetPixels) { + Distance dist; + dist.setPixels(1500500, 2); + ASSERT_EQ(dist.pixels(2), 1500500); +} + + +TEST(DistanceTests, SetNegativeDistance) { + try { + Distance dist; + dist.setMeters(-1); + FAIL() << "Expected error message: Negative distances are not supported"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().contains("Negative distances are not supported")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Negative distances are not supported"; + } +} + + +TEST(DistanceTests, ToString) { + Distance dist(1500500, Distance::Meters); + ASSERT_EQ(dist.toString(), "1500500.0 meters"); +} + + +TEST(DistanceTests, IsValidTrue) { + Distance dist(1500500, Distance::Meters); + ASSERT_TRUE(dist.isValid()); +} + + +TEST(DistanceTests, IsValidFalse) { + Distance dist; + ASSERT_FALSE(dist.isValid()); +} + + +TEST(DistanceTests, GreaterThanDifferent) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + EXPECT_TRUE(dist2 > dist1); + EXPECT_FALSE(dist1 > dist2); +} + + +TEST(DistanceTests, GreaterThanEqual) { + Distance dist1(10, Distance::Meters); + Distance dist2(10, Distance::Meters); + EXPECT_FALSE(dist2 > dist1); + EXPECT_FALSE(dist1 > dist2); +} + + +TEST(DistanceTests, GreaterThanNull) { + try { + bool value = Distance() > Distance(); + ASSERT_TRUE(value); // Added this line so we do not get an unused comparison build warning. + FAIL() << "Expected error message: Distance has not been initialized"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().contains("Distance has not been initialized")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Distance has not been initialized"; + } +} + + +TEST(DistanceTests, LessThanDifferent) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + EXPECT_TRUE(dist1 < dist2); + EXPECT_FALSE(dist2 < dist1); +} + + +TEST(DistanceTests, LessThanEqual) { + Distance dist1(10, Distance::Meters); + Distance dist2(10, Distance::Meters); + EXPECT_FALSE(dist1 < dist2); + EXPECT_FALSE(dist2 < dist1); +} + + +TEST(DistanceTests, LessThanNull) { + try { + bool value = Distance() < Distance(); + ASSERT_TRUE(value); // Added this line so we do not get an unused comparison build warning. + FAIL() << "Expected error message: Distance has not been initialized"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().contains("Distance has not been initialized")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Distance has not been initialized"; + } +} + + +TEST(DistanceTests, AssignDistance) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + dist1 = dist2; + ASSERT_EQ(dist1.meters(), 20); +} + + +TEST(DistanceTests, Add) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + Distance sum = dist1 + dist2; + ASSERT_EQ(sum.meters(), 30); +} + + +TEST(DistanceTests, SubtractPositive) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + Displacement difference = dist2 - dist1; + ASSERT_EQ(difference.meters(), 10); +} + + +TEST(DistanceTests, SubtractNegative) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + Displacement difference = dist1 - dist2; + ASSERT_EQ(difference.meters(), -10); +} + + +TEST(DistanceTests, DivideDistance) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + ASSERT_EQ(dist2 / dist1, 2); +} + + +TEST(DistanceTests, DivideDouble) { + Distance dist1(10, Distance::Meters); + Distance quotient = dist1 / 2; + ASSERT_EQ(quotient.meters(), 5); +} + + +TEST(DistanceTests, Multiply) { + Distance dist1(10, Distance::Meters); + Distance product = dist1 * 2; + ASSERT_EQ(product.meters(), 20); +} + + +TEST(DistanceTests, AddAssign) { + Distance dist1(10, Distance::Meters); + Distance dist2(20, Distance::Meters); + dist1 += dist2; + ASSERT_EQ(dist1.meters(), 30); +} + + +TEST(DistanceTests, SubtractAssignPositive) { + Distance dist1(10, Distance::Meters); + Distance dist2(30, Distance::Meters); + dist2 -= dist1; + ASSERT_EQ(dist2.meters(), 20); +} + + +TEST(DistanceTests, SubtractAssignNegative) { + try { + Distance dist1(10, Distance::Meters); + Distance dist2(30, Distance::Meters); + dist1 -= dist2; + FAIL() << "Expected error message: Negative distances are not supported"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().contains("Negative distances are not supported")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Negative distances are not supported"; + } +} + + +TEST(DistanceTests, DivideAssign) { + Distance dist(10, Distance::Meters); + dist /= 2; + ASSERT_EQ(dist.meters(), 5); +} + + +TEST(DistanceTests, MultiplyAssign) { + Distance dist(10, Distance::Meters); + dist *= 2; + ASSERT_EQ(dist.meters(), 20); +} \ No newline at end of file diff --git a/isis/tests/EndianTests.cpp b/isis/tests/EndianTests.cpp new file mode 100644 index 0000000000..5b6783d6bb --- /dev/null +++ b/isis/tests/EndianTests.cpp @@ -0,0 +1,21 @@ +#include "Endian.h" + +#include +#include + +using namespace Isis; + +class ConversionTest : public ::testing::TestWithParam > { + // Intentionally empty +}; + +TEST_P(ConversionTest, ByteOrder) { + ASSERT_EQ(ByteOrderEnumeration(GetParam().first), GetParam().second); + ASSERT_EQ(ByteOrderName(GetParam().second), GetParam().first); +} + +QPair noOrder("None", Isis::ByteOrder::NoByteOrder); +QPair lsb("Lsb", Isis::ByteOrder::Lsb); +QPair msb("Msb", Isis::ByteOrder::Msb); + +INSTANTIATE_TEST_CASE_P(Endian, ConversionTest, ::testing::Values(noOrder, lsb, msb)); diff --git a/isis/tests/FileNameTests.cpp b/isis/tests/FileNameTests.cpp new file mode 100644 index 0000000000..eeb93cd180 --- /dev/null +++ b/isis/tests/FileNameTests.cpp @@ -0,0 +1,255 @@ +#include "FileName.h" + +#include + +#include +#include +#include + +#include + +using namespace Isis; + +class FileName_Fixture_Versioned : public ::testing::TestWithParam { + // Intentionally empty +}; + +class FileName_Fixture_NotVersioned : public ::testing::TestWithParam { + // Intentionally empty +}; + + +TEST(FileName, DefaultConstructor) { + FileName file; + + EXPECT_EQ("", file.baseName()); + EXPECT_EQ("", file.name()); + EXPECT_EQ("", file.extension()); +} + +// The other constructors are being tested in the other tests so there is no need to duplicate them + +TEST(FileName, CopyConstructor) { + FileName file; + + EXPECT_EQ("", file.baseName()); + EXPECT_EQ("", file.name()); + EXPECT_EQ("", file.extension()); +} + +TEST(FileName, OriginalPath) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("/testy/mc/test/face", file.originalPath()); +} + +TEST(FileName, Path) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("/testy/mc/test/face", file.path()); +} + +TEST(FileName, Attributes) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("", file.attributes()); + + QString testAtt = "/testy/mc/test/face/test.cub+Bsq"; + FileName fileAtt(testAtt); + + EXPECT_EQ("Bsq", fileAtt.attributes()); +} + +TEST(FileName, BaseName) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("test", file.baseName()); +} + +TEST(FileName, Name) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("test.cub", file.name()); +} + +TEST(FileName, Extension) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("cub", file.extension()); +} + +TEST(FileName, Expanded) { + QString relativeFileName("test.cub"); + FileName file("$ISISROOT/" + relativeFileName); + QString isisRoot(getenv("ISISROOT")); + EXPECT_EQ(isisRoot + "/" + relativeFileName, file.expanded()); +} + +TEST(FileName, Original) { + QString test = "$ISISROOT/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("$ISISROOT/testy/mc/test/face/test.cub", file.original()); +} + +TEST(FileName, AddExtension) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("txt", file.addExtension(".txt").extension()); +} + +TEST(FileName, RemoveExtension) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + EXPECT_EQ("", file.removeExtension().extension()); +} + +TEST(FileName, SetExtension) { + QString test = "/testy/mc/test/face/test.cub"; + FileName file(test); + + EXPECT_EQ("log", file.setExtension("log").extension()); +} + +TEST(FileName, isQuestionMarksNoExtensionVersioned) { + QString test = "/testy/mc/test/face/test??????"; + FileName file(test); + + EXPECT_TRUE(file.isVersioned()); +} + +TEST(FileName, isQuestionMarksExtensionVersioned) { + QString test = "/testy/mc/test/face/test??????.cub"; + FileName file(test); + + EXPECT_TRUE(file.isVersioned()); +} + +TEST(FileName, isDDMMMYYYVersioned) { + QString test = "/testy/mc/test/face/test{ddMMMyyyy}..cub"; + FileName file(test); + + EXPECT_TRUE(file.isVersioned()); +} + +TEST(FileName, HighestVersion) { + std::ofstream fileStream; + fileStream.open("test000001.cub"); + fileStream << "test"; + fileStream.close(); + fileStream.open("test000002.cub"); + fileStream << "test"; + fileStream.close(); + + FileName file("test??????.cub"); + EXPECT_EQ("./test000002.cub", file.highestVersion().expanded()); + remove("test000001.cub"); + remove("test000002.cub"); + +} + +TEST(FileName, NewVersion) { + std::ofstream fileStream; + fileStream.open("test000001.cub"); + fileStream << "test"; + fileStream.close(); + fileStream.open("test000002.cub"); + fileStream << "test"; + fileStream.close(); + + FileName file("test??????.cub"); + EXPECT_EQ("./test000003.cub", file.newVersion().expanded()); + remove("test000001.cub"); + remove("test000002.cub"); + remove("test000003.cub"); +} + +TEST(FileName, FileExists) { + std::ofstream fileStream; + fileStream.open("test000001.cub"); + fileStream << "test"; + fileStream.close(); + + FileName realFile("test000001.cub"); + EXPECT_TRUE(realFile.fileExists()); + + FileName fakeFile("test.cub"); + EXPECT_FALSE(fakeFile.fileExists()); + + remove("test000001.cub"); +} + +TEST(FileName, CreateTempFile) { + FileName test("test.cub"); + + FileName temp = test.createTempFile(test); + + EXPECT_EQ("cub", temp.extension()); + EXPECT_TRUE(temp.fileExists()); + + remove(temp.expanded().toLatin1()); +} + +TEST(FileName, ToString) { + QString relativeFileName("test.cub"); + FileName file("$ISISROOT/" + relativeFileName); + QString isisRoot(getenv("ISISROOT")); + EXPECT_EQ(isisRoot + "/" + relativeFileName, file.toString()); +} + +TEST(FileName, AssignmentOperator) { + FileName defaultFile("/testy/mc/test/face/test.cub"); + + FileName file; + file = defaultFile; + + EXPECT_EQ("test", file.baseName()); + EXPECT_EQ("test.cub", file.name()); + EXPECT_EQ("cub", file.extension()); +} + +TEST(FileName, EqualOperator) { + FileName file1("/testy/mc/test/face/test.cub"); + FileName file2("/testy/mc/test/face/test.cub"); + + EXPECT_TRUE(file1 == file2); +} + +TEST(FileName, NotEqualOperator) { + FileName file1("/testy/mc/test/face/test.cub"); + FileName file2("/testy/mc/test/face/Peaks.cub"); + + EXPECT_TRUE(file1 != file2); +} + +TEST_P(FileName_Fixture_Versioned, IsVersioned) { + FileName file(GetParam()); + + EXPECT_TRUE(file.isVersioned()); +} + +const char* versionedFiles[] = {"tttt??????", "tttt??????.tmp", "tttt_?.tmp", "??tttt", + "?tttt000008.tmp", "junk?", "tttt{ddMMMyyyy}.tmp", + "tt{MMM}tt{dd}yy{yy}.tmp", "tt{d}tt{MMM}.tmp", "tt{d}tt{MMMM}.tmp", + "tt{dd}.tmp", "tttt{dd}.tmp", "$TEMPORARY/{MMM}-{dd}-{yy}_v???.tmp"}; + +INSTANTIATE_TEST_CASE_P(FileName, FileName_Fixture_Versioned, ::testing::ValuesIn(versionedFiles)); + +TEST_P(FileName_Fixture_NotVersioned, IsVersioned) { + FileName file(GetParam()); + + EXPECT_FALSE(file.isVersioned()); +} + +const char* notVersionedFiles[] = {"tttt"}; +//TODO These actually throw errors so they cannot be checked like this +//"tttt{}.tmp", "ttttt{}.tmp", "??tttt??", "tttt{aaaa}.tmp"}; + +INSTANTIATE_TEST_CASE_P(FileName, FileName_Fixture_NotVersioned, ::testing::ValuesIn(notVersionedFiles)); diff --git a/isis/tests/IsisTestMain.cpp b/isis/tests/IsisTestMain.cpp new file mode 100644 index 0000000000..472b173ed7 --- /dev/null +++ b/isis/tests/IsisTestMain.cpp @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/isis/tests/MatrixTests.cpp b/isis/tests/MatrixTests.cpp new file mode 100644 index 0000000000..9e9c35c880 --- /dev/null +++ b/isis/tests/MatrixTests.cpp @@ -0,0 +1,399 @@ +#include "gtest/gtest.h" +#include "tnt/tnt_array2d.h" + +#include "Matrix.h" +#include "IException.h" + +#include + + + +namespace Isis { + + TEST (MatrixTests, ConstructorWithDimensions) { + Matrix A(2, 2, 2); + + ASSERT_EQ(2, A.Rows()); + ASSERT_EQ(2, A.Columns()); + EXPECT_EQ(2, A[0][0]); + EXPECT_EQ(2, A[0][1]); + EXPECT_EQ(2, A[1][0]); + EXPECT_EQ(2, A[1][1]); + } + + + TEST (MatrixTests, ConstructorWithTNTArray) { + TNT::Array2D matrix = TNT::Array2D(2, 2, 2); + Matrix A(matrix); + + EXPECT_EQ(2, A[0][0]); + EXPECT_EQ(2, A[0][1]); + EXPECT_EQ(2, A[1][0]); + EXPECT_EQ(2, A[1][1]); + } + + + TEST (MatrixTests, IdentityMatrix) { + Matrix I = Matrix::Identity(2); + + EXPECT_EQ(1, I[0][0]); + EXPECT_EQ(0, I[0][1]); + EXPECT_EQ(0, I[1][0]); + EXPECT_EQ(1, I[1][1]); + } + + + TEST (MatrixTests, SetValues) { + Matrix A(2, 2); + + A[0][0] = 1; + A[0][1] = 2; + A[1][0] = 3; + A[1][1] = 4; + + EXPECT_EQ(1, A[0][0]); + EXPECT_EQ(2, A[0][1]); + EXPECT_EQ(3, A[1][0]); + EXPECT_EQ(4, A[1][1]); + } + + + TEST (MatrixTests, Add) { + Matrix I = Matrix::Identity(2); + Matrix A(2, 2, 2); + Matrix APopI = A + I; + + EXPECT_EQ(3, APopI[0][0]); + EXPECT_EQ(2, APopI[0][1]); + EXPECT_EQ(2, APopI[1][0]); + EXPECT_EQ(3, APopI[1][1]); + + Matrix API = A.Add(I); + + EXPECT_EQ(3, API[0][0]); + EXPECT_EQ(2, API[0][1]); + EXPECT_EQ(2, API[1][0]); + EXPECT_EQ(3, API[1][1]); + } + + + TEST (MatrixTests, Subtract) { + Matrix I = Matrix::Identity(2); + Matrix A(2, 2, 2); + Matrix AMopI = A - I; + + EXPECT_EQ(1, AMopI[0][0]); + EXPECT_EQ(2, AMopI[0][1]); + EXPECT_EQ(2, AMopI[1][0]); + EXPECT_EQ(1, AMopI[1][1]); + + Matrix AMI = A.Subtract(I); + + EXPECT_EQ(1, AMI[0][0]); + EXPECT_EQ(2, AMI[0][1]); + EXPECT_EQ(2, AMI[1][0]); + EXPECT_EQ(1, AMI[1][1]); + } + + + TEST (MatrixTests, MultiplyByScalar) { + Matrix A(2, 2, 2); + Matrix AMSopI = A * 2; + + EXPECT_EQ(4, AMSopI[0][0]); + EXPECT_EQ(4, AMSopI[0][1]); + EXPECT_EQ(4, AMSopI[1][0]); + EXPECT_EQ(4, AMSopI[1][1]); + + Matrix AMSI = A.Multiply(2); + + EXPECT_EQ(4, AMSI[0][0]); + EXPECT_EQ(4, AMSI[0][1]); + EXPECT_EQ(4, AMSI[1][0]); + EXPECT_EQ(4, AMSI[1][1]); + } + + + TEST (MatrixTests, MultiplyByMatrix) { + Matrix I = Matrix::Identity(2); + Matrix A(2, 2, 2); + Matrix AMMopI = A * I; + + EXPECT_EQ(2, AMMopI[0][0]); + EXPECT_EQ(2, AMMopI[0][1]); + EXPECT_EQ(2, AMMopI[1][0]); + EXPECT_EQ(2, AMMopI[1][1]); + + Matrix AMMI = A.Multiply(I); + + EXPECT_EQ(2, AMMI[0][0]); + EXPECT_EQ(2, AMMI[0][1]); + EXPECT_EQ(2, AMMI[1][0]); + EXPECT_EQ(2, AMMI[1][1]); + } + + + TEST (MatrixTests, MultiplyElementWise) { + Matrix I = Matrix::Identity(2); + Matrix A(2, 2, 2); + Matrix AMMI = A.MultiplyElementWise(I); + + EXPECT_EQ(2, AMMI[0][0]); + EXPECT_EQ(0, AMMI[0][1]); + EXPECT_EQ(0, AMMI[1][0]); + EXPECT_EQ(2, AMMI[1][1]); + } + + + TEST (MatrixTests, ConstructorWithBadArgs) { + try { + Matrix A(0, 1); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Invalid matrix dimensions")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Invalid matrix dimensions"; + } + + try { + Matrix A(-1, 1); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Invalid matrix dimensions")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Invalid matrix dimensions"; + } + } + + + TEST (MatrixTests, IdentityConstructorWithBadArgs) { + try { + Matrix::Identity(0); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Invalid matrix dimensions")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Invalid matrix dimensions"; + } + + try { + Matrix::Identity(-1); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Invalid matrix dimensions")) + << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Invalid matrix dimensions"; + } + } + + + TEST (MatrixTests, DeterminantWithBadArgs) { + Matrix A(1, 2); + + try { + A.Determinant(); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Unable to calculate the determinant, the " + "matrix is not square")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Unable to calculate the determinant, the matrix is not square."; + } + } + + + TEST (MatrixTests, TraceWithBadArgs) { + Matrix A(1, 2); + + try { + A.Trace(); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Unable to calculate the trace, the matrix is " + "not square")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Unable to calculate the trace, the matrix is not square."; + } + } + + + TEST (MatrixTests, AddMatricesWithBadArgs) { + Matrix A(1, 2); + Matrix B(2, 2); + Matrix C(2, 1); + + try { + A + B; + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot add " + "the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot add the matrices."; + } + + try { + A + C; + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot add " + "the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot add the matrices."; + } + } + + + TEST (MatrixTests, SubtractMatricesWithBadArgs) { + Matrix A(1, 2); + Matrix B(2, 2); + Matrix C(2, 1); + + try { + A - B; + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot " + "subtract the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot subtract the matrices."; + } + + try { + A - C; + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot " + "subtract the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot subtract the matrices."; + } + } + + + TEST (MatrixTests, MultiplyMatrixWithBadArgs) { + Matrix A(1, 1); + Matrix B(2, 1); + + try { + A * B; + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot " + "multiply the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot multiply the matrices."; + } + } + + + TEST (MatrixTests, MultiplyMatrixElementwiseWithBadArgs) { + Matrix A(1, 2); + Matrix B(2, 2); + Matrix C(2, 1); + + try { + A.MultiplyElementWise(B); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot " + "multiply the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot multiply the matrices."; + } + + try { + A.MultiplyElementWise(C); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Incompatible matrix dimensions, cannot " + "multiply the matrices")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Incompatible matrix dimensions, cannot multiply the matrices."; + } + } + + + TEST (MatrixTests, InverseWithBadArgs) { + Matrix A(1, 2); + + try { + A.Inverse(); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Unable to calculate the inverse, the matrix " + "is not square")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Unable to calculate the inverse, the matrix is not square."; + } + } + + + TEST (MatrixTests, EigenValuesWithBadArgs) { + Matrix A(1, 2); + + try { + A.Eigenvalues(); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Unable to calculate eigenvalues, the matrix " + "is not square")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Unable to calculate eigenvalues, the matrix is not square."; + } + } + + + TEST (MatrixTests, EigenVectorsWithBadArgs) { + Matrix A(1, 2); + + try { + A.Eigenvectors(); + FAIL() << "Expected an IException"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Unable to calculate eigenvectors, the matrix " + "is not square")) << e.toString().toStdString(); + } + catch(...) { + FAIL() << "Expected error message: Unable to calculate eigenvectors, the matrix is not square."; + } + } + + +} + diff --git a/isis/tests/PixelTests.cpp b/isis/tests/PixelTests.cpp new file mode 100644 index 0000000000..46ac5b0f7b --- /dev/null +++ b/isis/tests/PixelTests.cpp @@ -0,0 +1,481 @@ +#include + +#include +#include +#include +// #include +#include +#include + +#include "Pixel.h" +#include "SpecialPixel.h" + +using namespace Isis; + +TEST(Pixel, DefaultConstructor) { + Pixel p; + EXPECT_EQ(0, p.sample()); + EXPECT_EQ(0, p.line()); + EXPECT_EQ(0, p.band()); + EXPECT_EQ(Isis::Null, p.DN()); +} + +TEST(Pixel, Constructor1) { + Pixel p(0, 1, 2, 3.0); + EXPECT_EQ(0, p.sample()); + EXPECT_EQ(1, p.line()); + EXPECT_EQ(2, p.band()); + EXPECT_DOUBLE_EQ(3.0, p.DN()); +} + +TEST(Pixel, CopyConstructor) { + Pixel p(0, 1, 2, 3.0); + // Note this is equivalent to Pixel copy(p); + Pixel copy = p; + EXPECT_EQ(0, copy.sample()); + EXPECT_EQ(1, copy.line()); + EXPECT_EQ(2, copy.band()); + EXPECT_DOUBLE_EQ(3.0, copy.DN()); +} + +TEST(Pixel, CopyAssignment) { + Pixel p(0, 1, 2, 3.0); + Pixel copy; + copy = p; + EXPECT_EQ(0, copy.sample()); + EXPECT_EQ(1, copy.line()); + EXPECT_EQ(2, copy.band()); + EXPECT_DOUBLE_EQ(3.0, copy.DN()); +} + +TEST(Pixel, static_To8Bit) { + // Zero test + EXPECT_EQ(Isis::NULL1, Pixel::To8Bit(0.0)); + // Negative test + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel::To8Bit(-1.0)); + // Trivial positive test + EXPECT_EQ(1, Pixel::To8Bit(1.0)); + // Minimum valid input // Isis::ValidMinimum becomes \0 + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel::To8Bit(Isis::ValidMinimum)); + // Maximum valid input // Isis::ValidMaximum becomes \xFF (255) + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel::To8Bit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULL1, Pixel::To8Bit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel::To8Bit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT1, Pixel::To8Bit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel::To8Bit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT1, Pixel::To8Bit(Isis::Lis)); +} + +TEST(Pixel, To8Bit) { + // Zero test + EXPECT_EQ(Isis::NULL1, Pixel(1, 2, 3, 0.0).To8Bit()); + // Negative test + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel(1, 2, 3, -1.0).To8Bit()); + // Trivial positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To8Bit()); + // Minimum valid input // Isis::ValidMinimum becomes \0 + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel(1, 2, 3, Isis::ValidMinimum).To8Bit()); + // Maximum valid input // Isis::ValidMaximum becomes \xFF (255) + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel(1, 2, 3, Isis::ValidMaximum).To8Bit()); + // "Null" pixel + EXPECT_EQ(Isis::NULL1, Pixel(1, 2, 3, Isis::Null).To8Bit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT1, Pixel(1, 2, 3, Isis::Hrs).To8Bit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT1, Pixel(1, 2, 3, Isis::His).To8Bit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT1, Pixel(1, 2, 3, Isis::Lrs).To8Bit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT1, Pixel(1, 2, 3, Isis::Lis).To8Bit()); +} + +TEST(Pixel, static_To16UBit) { + // Zero test + EXPECT_EQ(Isis::NULLU2, Pixel::To16UBit(0.0)); + // Negative test // -1.0 becomes HIGH_REPR_SATU2, not LOW_REPR_SATU2 + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel::To16UBit(-1.0)); + // Positive test + EXPECT_EQ(1, Pixel::To16UBit(1.0)); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel::To16UBit(Isis::ValidMinimum)); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel::To16UBit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULLU2, Pixel::To16UBit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel::To16UBit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SATU2, Pixel::To16UBit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel::To16UBit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SATU2, Pixel::To16UBit(Isis::Lis)); +} + +TEST(Pixel, To16UBit) { + // Zero test + EXPECT_EQ(Isis::NULLU2, Pixel(1, 2, 3, 0.0).To16Ubit()); + // Negative test // -1.0 becomes HIGH_REPR_SATU2, not LOW_REPR_SATU2 + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel(1, 2, 3, -1.0).To16Ubit()); + // Positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To16Ubit()); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel(1, 2, 3, Isis::ValidMinimum).To16Ubit()); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel(1, 2, 3, Isis::ValidMaximum).To16Ubit()); + // "Null" pixel + EXPECT_EQ(Isis::NULLU2, Pixel(1, 2, 3, Isis::Null).To16Ubit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SATU2, Pixel(1, 2, 3, Isis::Hrs).To16Ubit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SATU2, Pixel(1, 2, 3, Isis::His).To16Ubit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SATU2, Pixel(1, 2, 3, Isis::Lrs).To16Ubit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SATU2, Pixel(1 ,2, 3, Isis::Lis).To16Ubit()); +} + +TEST(Pixel, static_To16Bit) { + // Zero test + EXPECT_EQ(0, Pixel::To16Bit(0.0)); + // Negative test + EXPECT_EQ(-1, Pixel::To16Bit(-1.0)); + // Positive test + EXPECT_EQ(1, Pixel::To16Bit(1.0)); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel::To16Bit(Isis::ValidMinimum)); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel::To16Bit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULL2, Pixel::To16Bit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel::To16Bit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT2, Pixel::To16Bit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel::To16Bit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT2, Pixel::To16Bit(Isis::Lis)); +} + +TEST(Pixel, To16Bit) { + // Zero test + EXPECT_EQ(0, Pixel(1, 2, 3, 0.0).To16Bit()); + // Negative test + EXPECT_EQ(-1, Pixel(1, 2, 3, -1.0).To16Bit()); + // Positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To16Bit()); + // Minimum valid input + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel(1, 2, 3, Isis::ValidMinimum).To16Bit()); + // Maximum valid input + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel(1, 2, 3, Isis::ValidMaximum).To16Bit()); + // "Null" pixel + EXPECT_EQ(Isis::NULL2, Pixel(1, 2, 3, Isis::Null).To16Bit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT2, Pixel(1, 2, 3, Isis::Hrs).To16Bit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT2, Pixel(1, 2, 3, Isis::His).To16Bit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT2, Pixel(1, 2, 3, Isis::Lrs).To16Bit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT2, Pixel(1, 2, 3, Isis::Lis).To16Bit()); +} + +TEST(Pixel, static_To32Bit) { + // Zero test + EXPECT_EQ(0, Pixel::To32Bit(0.0)); + // Negative test + EXPECT_EQ(-1, Pixel::To32Bit(-1.0)); + // Positive test + EXPECT_EQ(1, Pixel::To32Bit(1.0)); + // Minimum valid input + // EXPECT_FLOAT_EQ(Isis::LOW_REPR_SAT4, Pixel::To32Bit(Isis::ValidMinimum)); + // Maximum valid input // Isis::Maximum becomes inf (not IHIGH_REPR_SAT4) + // EXPECT_FLOAT_EQ(Isis::HIGH_REPR_SAT4, Pixel::To32Bit(Isis::ValidMaximum)); + // "Null" pixel + EXPECT_EQ(Isis::NULL4, Pixel::To32Bit(Isis::Null)); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT4, Pixel::To32Bit(Isis::Hrs)); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT4, Pixel::To32Bit(Isis::His)); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT4, Pixel::To32Bit(Isis::Lrs)); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT4, Pixel::To32Bit(Isis::Lis)); +} + +TEST(Pixel, To32Bit) { + // Zero test + EXPECT_EQ(0, Pixel(1, 2, 3, 0.0).To32Bit()); + // Negative test + EXPECT_EQ(-1, Pixel(1, 2, 3, -1.0).To32Bit()); + // Positive test + EXPECT_EQ(1, Pixel(1, 2, 3, 1.0).To32Bit()); + // Minimum valid input + // EXPECT_EQ(Isis::LOW_REPR_SAT4, Pixel(1, 2, 3, Isis::ValidMinimum).To32Bit()); + // Maximum valid input // Isis::Maximum becomes inf (not HIGH_REPR_SAT4) + // EXPECT_FLOAT_EQ(Isis::HIGH_REPR_SAT4, Pixel(1, 2, 3, Isis::ValidMaximum).To32Bit()); + // "Null" pixel + EXPECT_EQ(Isis::NULL4, Pixel(1, 2, 3, Isis::Null).To32Bit()); + // HRS + EXPECT_EQ(Isis::HIGH_REPR_SAT4, Pixel(1, 2, 3, Isis::Hrs).To32Bit()); + // HIS + EXPECT_EQ(Isis::HIGH_INSTR_SAT4, Pixel(1, 2, 3, Isis::His).To32Bit()); + // LRS + EXPECT_EQ(Isis::LOW_REPR_SAT4, Pixel(1, 2, 3, Isis::Lrs).To32Bit()); + // LIS + EXPECT_EQ(Isis::LOW_INSTR_SAT4, Pixel(1, 2, 3, Isis::Lis).To32Bit()); +} + +TEST(Pixel, static_ToDouble) { + // unsigned char + unsigned char uc = 0; + EXPECT_DOUBLE_EQ(Isis::Null, Pixel::ToDouble(uc)); + + // short + short s = 0.0; + EXPECT_DOUBLE_EQ(0.0, Pixel::ToDouble(s)); + + // unsigned short + unsigned short us = 0.0; + EXPECT_DOUBLE_EQ(Isis::Null, Pixel::ToDouble(us)); + + // float + float f = 0.0; + EXPECT_DOUBLE_EQ(0.0, Pixel::ToDouble(f)); +} + +TEST(Pixel, ToDouble) { + EXPECT_EQ(0.0, Pixel(1, 2, 3, 0.0).ToDouble()); +} + +TEST(Pixel, static_ToFloat) { + // unsigned char + unsigned char uc = 0; + EXPECT_FLOAT_EQ(Isis::NULL4, Pixel::ToFloat(uc)); + + // short + short s = 0.0; + EXPECT_FLOAT_EQ(0.0, Pixel::ToFloat(s)); + + // unsigned short + unsigned short us = 0.0; + EXPECT_FLOAT_EQ(Isis::NULL4, Pixel::ToFloat(us)); + + // float + float f = 0.0; + EXPECT_FLOAT_EQ(0.0, Pixel::ToFloat(f)); +} + +TEST(Pixel, ToFloat) { + EXPECT_FLOAT_EQ(0.0, Pixel(1, 2, 3, 0.0).ToFloat()); +} + +TEST(Pixel, static_IsSpecial) { + EXPECT_TRUE(Pixel::IsSpecial(Isis::His)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Hrs)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Lis)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Lrs)); + EXPECT_TRUE(Pixel::IsSpecial(Isis::Null)); + EXPECT_FALSE(Pixel::IsSpecial(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsSpecial(Isis::ValidMinimum)); +} + +TEST(Pixel, IsSpecial) { + EXPECT_TRUE(Pixel(1,2,3,Isis::His).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Hrs).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lis).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lrs).IsSpecial()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Null).IsSpecial()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsSpecial()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsSpecial()); +} + +TEST(Pixel, static_IsValid) { + EXPECT_FALSE(Pixel::IsValid(Isis::His)); + EXPECT_FALSE(Pixel::IsValid(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsValid(Isis::Lis)); + EXPECT_FALSE(Pixel::IsValid(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsValid(Isis::Null)); + EXPECT_TRUE(Pixel::IsValid(Isis::ValidMaximum)); + EXPECT_TRUE(Pixel::IsValid(Isis::ValidMinimum)); +} + +TEST(Pixel, IsValid) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsValid()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsValid()); + EXPECT_TRUE(Pixel(1,2,3,Isis::ValidMaximum).IsValid()); + EXPECT_TRUE(Pixel(1,2,3,Isis::ValidMinimum).IsValid()); +} + +TEST(Pixel, static_IsNull) { + EXPECT_FALSE(Pixel::IsNull(Isis::His)); + EXPECT_FALSE(Pixel::IsNull(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsNull(Isis::Lis)); + EXPECT_FALSE(Pixel::IsNull(Isis::Lrs)); + EXPECT_TRUE(Pixel::IsNull(Isis::Null)); + EXPECT_FALSE(Pixel::IsNull(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsNull(Isis::ValidMinimum)); +} + +TEST(Pixel, IsNull) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsNull()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Null).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsNull()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsNull()); +} + +TEST(Pixel, static_IsHigh) { + EXPECT_TRUE (Pixel::IsHigh(Isis::His)); + EXPECT_TRUE (Pixel::IsHigh(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsHigh(Isis::Lis)); + EXPECT_FALSE(Pixel::IsHigh(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsHigh(Isis::Null)); + EXPECT_FALSE(Pixel::IsHigh(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsHigh(Isis::ValidMinimum)); +} + +TEST(Pixel, IsHigh) { + EXPECT_TRUE(Pixel(1,2,3,Isis::His).IsHigh()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Hrs).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsHigh()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsHigh()); +} + +TEST(Pixel, static_IsLow) { + EXPECT_FALSE(Pixel::IsLow(Isis::His)); + EXPECT_FALSE(Pixel::IsLow(Isis::Hrs)); + EXPECT_TRUE(Pixel::IsLow(Isis::Lis)); + EXPECT_TRUE(Pixel::IsLow(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsLow(Isis::Null)); + EXPECT_FALSE(Pixel::IsLow(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsLow(Isis::ValidMinimum)); +} + +TEST(Pixel, IsLow) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsLow()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lis).IsLow()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lrs).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsLow()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsLow()); +} + +TEST(Pixel, static_IsHrs) { + EXPECT_FALSE(Pixel::IsHrs(Isis::His)); + EXPECT_TRUE(Pixel::IsHrs(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsHrs(Isis::Lis)); + EXPECT_FALSE(Pixel::IsHrs(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsHrs(Isis::Null)); + EXPECT_FALSE(Pixel::IsHrs(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsHrs(Isis::ValidMinimum)); +} + +TEST(Pixel, IsHrs) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsHrs()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Hrs).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsHrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsHrs()); +} + +TEST(Pixel, static_IsHis) { + EXPECT_TRUE(Pixel::IsHis(Isis::His)); + EXPECT_FALSE(Pixel::IsHis(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsHis(Isis::Lis)); + EXPECT_FALSE(Pixel::IsHis(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsHis(Isis::Null)); + EXPECT_FALSE(Pixel::IsHis(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsHis(Isis::ValidMinimum)); +} + +TEST(Pixel, IsHis) { + EXPECT_TRUE(Pixel(1,2,3,Isis::His).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsHis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsHis()); +} + +TEST(Pixel, static_IsLis) { + EXPECT_FALSE(Pixel::IsLis(Isis::His)); + EXPECT_FALSE(Pixel::IsLis(Isis::Hrs)); + EXPECT_TRUE(Pixel::IsLis(Isis::Lis)); + EXPECT_FALSE(Pixel::IsLis(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsLis(Isis::Null)); + EXPECT_FALSE(Pixel::IsLis(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsLis(Isis::ValidMinimum)); +} + +TEST(Pixel, IsLis) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsLis()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lis).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lrs).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsLis()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsLis()); +} + +TEST(Pixel, static_IsLrs) { + EXPECT_FALSE(Pixel::IsLrs(Isis::His)); + EXPECT_FALSE(Pixel::IsLrs(Isis::Hrs)); + EXPECT_FALSE(Pixel::IsLrs(Isis::Lis)); + EXPECT_TRUE(Pixel::IsLrs(Isis::Lrs)); + EXPECT_FALSE(Pixel::IsLrs(Isis::Null)); + EXPECT_FALSE(Pixel::IsLrs(Isis::ValidMaximum)); + EXPECT_FALSE(Pixel::IsLrs(Isis::ValidMinimum)); +} + +TEST(Pixel, IsLrs) { + EXPECT_FALSE(Pixel(1,2,3,Isis::His).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Hrs).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Lis).IsLrs()); + EXPECT_TRUE(Pixel(1,2,3,Isis::Lrs).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::Null).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMaximum).IsLrs()); + EXPECT_FALSE(Pixel(1,2,3,Isis::ValidMinimum).IsLrs()); +} + +TEST(Pixel, static_ToString) { + EXPECT_EQ(std::string("1"), Pixel::ToString(1.0)); + EXPECT_EQ(std::string("-1.2"), Pixel::ToString(-1.2)); + // Special pixels + EXPECT_EQ(std::string("His"), Pixel::ToString(Isis::His)); + EXPECT_EQ(std::string("Hrs"), Pixel::ToString(Isis::Hrs)); + EXPECT_EQ(std::string("Lis"), Pixel::ToString(Isis::Lis)); + EXPECT_EQ(std::string("Lrs"), Pixel::ToString(Isis::Lrs)); + EXPECT_EQ(std::string("Null"), Pixel::ToString(Isis::Null)); + EXPECT_EQ(std::string("Invalid"), Pixel::ToString(-1.0e+1000)); +} + +TEST(Pixel, ToString) { + EXPECT_EQ(std::string("1"), Pixel(1,2,3,1.0).ToString()); + EXPECT_EQ(std::string("-1.2"), Pixel(1,2,3,-1.2).ToString()); + // Special pixels + EXPECT_EQ(std::string("His"), Pixel(1,2,3,Isis::His).ToString()); + EXPECT_EQ(std::string("Hrs"), Pixel(1,2,3,Isis::Hrs).ToString()); + EXPECT_EQ(std::string("Lis"), Pixel(1,2,3,Isis::Lis).ToString()); + EXPECT_EQ(std::string("Lrs"), Pixel(1,2,3,Isis::Lrs).ToString()); + EXPECT_EQ(std::string("Null"), Pixel(1,2,3,Isis::Null).ToString()); + EXPECT_EQ(std::string("Invalid"), Pixel(1,2,3,-1.0e+1000).ToString()); +} diff --git a/isis/tests/SpectelTest.cpp b/isis/tests/SpectelTest.cpp new file mode 100644 index 0000000000..ce3ebe7644 --- /dev/null +++ b/isis/tests/SpectelTest.cpp @@ -0,0 +1,57 @@ +#include "Spectel.h" +#include "Constants.h" +#include "IException.h" +#include "Pixel.h" +#include "SpecialPixel.h" + +#include +#include + +#include + +#define TEST_EPSILON 1e-8 + +TEST(SpectelTest, SimpleConstructor) { + Isis::Spectel spec(1, 2, 100, 123.45, 0.1, 0.05); + EXPECT_EQ(spec.sample(), 1); + EXPECT_EQ(spec.line(), 2); + EXPECT_EQ(spec.band(), 100); + EXPECT_EQ(spec.DN(), 123.45); + EXPECT_EQ(spec.centerWavelength(), 0.1); + EXPECT_EQ(spec.filterWidth(), 0.05); +} + +TEST(SpectelTest, CopyConstructor) { + Isis::Spectel spec(1, 2, 100, 123.45, 0.1, 0.05); + Isis::Spectel spec2(spec); + EXPECT_EQ(spec2.sample(), 1); + EXPECT_EQ(spec2.line(), 2); + EXPECT_EQ(spec2.band(), 100); + EXPECT_EQ(spec2.DN(), 123.45); + EXPECT_EQ(spec2.centerWavelength(), 0.1); + EXPECT_EQ(spec2.filterWidth(), 0.05); +} + +TEST(SpectelTest, AssignmentOperator) { + Isis::Spectel spec(1, 2, 100, 123.45, 0.1, 0.05); + Isis::Spectel spec2(spec); + spec2 = spec; + EXPECT_EQ(spec2.sample(), 1); + EXPECT_EQ(spec2.line(), 2); + EXPECT_EQ(spec2.band(), 100); + EXPECT_EQ(spec2.DN(), 123.45); + EXPECT_EQ(spec2.centerWavelength(), 0.1); + EXPECT_EQ(spec2.filterWidth(), 0.05); +} + +TEST(SpectelTest, PixelConstructor) { + Isis::Spectel spec(Isis::Pixel(1, 2, 3, 0.4), 0.5, 0.6); + EXPECT_EQ(spec.sample(), 1); + EXPECT_EQ(spec.line(), 2); + EXPECT_EQ(spec.band(), 3); + EXPECT_EQ(spec.DN(), 0.4); + EXPECT_EQ(spec.centerWavelength(), 0.5); + EXPECT_EQ(spec.filterWidth(), 0.6); +} + + diff --git a/isis/tests/TestUtilities.h b/isis/tests/TestUtilities.h new file mode 100644 index 0000000000..5d81bf7132 --- /dev/null +++ b/isis/tests/TestUtilities.h @@ -0,0 +1,67 @@ +#ifndef TestUtilities_h +#define TestUtilities_h + +#include "gtest/gtest.h" + +#include + +#include + +#include "IException.h" + +namespace Isis { + + /** + * Custom IException assertion that checks that the exception message contains + * a substring. + */ + ::testing::AssertionResult AssertIExceptionMessage( + const char* e_expr, + const char* contents_expr, + IException &e, + QString contents) { + if (e.toString().contains(contents)) return ::testing::AssertionSuccess(); + + return ::testing::AssertionFailure() << "IExeption "<< e_expr << "\'s error message (\"" + << e.toString().toStdString() << "\") does not contain " << contents_expr << " (\"" + << contents.toStdString() << "\")."; + } + + + /** + * Custom IException assertion that checks that the exception is the expected + * IException::ErrorType. + */ + ::testing::AssertionResult AssertIExceptionError( + const char* e_expr, + const char* errorType_expr, + IException &e, + IException::ErrorType errorType) { + if (e.errorType() == errorType) return ::testing::AssertionSuccess(); + + return ::testing::AssertionFailure() << "IExeption "<< e_expr << "\'s error type (" + << std::to_string(e.errorType()) << ") does not match expected error type (" + << std::to_string(errorType) << ")."; + } + + + /** + * Custom QString assertion that properly outputs them as string if they + * are different. + */ + ::testing::AssertionResult AssertQStringsEqual( + const char* string1_expr, + const char* string2_expr, + QString string1, + QString string2) { + if (string1 != string2) { + return ::testing::AssertionFailure() << "QStrings " << string1_expr + << " (" << string1.toStdString() << ") and " << string2_expr + << " (" << string2.toStdString() << ") are not the same."; + } + + return ::testing::AssertionSuccess(); + } +} + +#endif -- GitLab From f20b22d5f3fc13559657ab33c58bbf43839c7187 Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Mon, 26 Nov 2018 09:52:30 -0700 Subject: [PATCH 605/620] Fixed unit tests not being build --- isis/cmake/AddIsisModule.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/cmake/AddIsisModule.cmake b/isis/cmake/AddIsisModule.cmake index c71cb78291..712aec0fd7 100644 --- a/isis/cmake/AddIsisModule.cmake +++ b/isis/cmake/AddIsisModule.cmake @@ -61,7 +61,7 @@ endfunction(add_isis_app) # Set up the lone unit test in an obj folder function(make_obj_unit_test moduleName testFile truthFile reqLibs pluginLibs) - if(NOT ${testFile}) + if(${testFile} STREQUAL "NOTFOUND") # Skip if no unitest return() endif() -- GitLab From cb8605e4cbb32cb28bd7bc19eb6797486c33aa66 Mon Sep 17 00:00:00 2001 From: jlaura Date: Mon, 26 Nov 2018 11:44:29 -0700 Subject: [PATCH 606/620] Adds PR template. (#596) * Adds PR template. * Update pull_request_template.md * Update pull_request_template.md --- .github/pull_request_template.md | 44 ++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..e8abd6034e --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,44 @@ + + +## Description + + +## Related Issue + + + + + +## Motivation and Context + + +## How Has This Been Tested? + + + + +## Screenshots (if appropriate): + +## Types of changes + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) + +## Checklist: + + + +- [ ] I have read and agree to abide by the [Code of Conduct](https://usgs-astrogeology.github.io/code/) +- [ ] I have read the [**CONTRIBUTING**](https://github.com/USGS-Astrogeology/ISIS3/blob/dev/CONTRIBUTING.md) document. +- [ ] My change requires a change to the documentation. +- [ ] I have updated the documentation accordingly. +- [ ] I have added tests to cover my changes. +- [ ] All new and existing tests passed. + +## Licensing +This project is mostly composed of free and unencumbered software released into the public domain, and we are unlikely to accept contributions that are not also released into the public domain. Somewhere near the top of each file should have these words: + +> This work is free and unencumbered software released into the public domain. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. + +- [ ] I dedicate any and all copyright interest in this software to the public domain. I make this dedication for the benefit of the public at large and to the detriment of my heirs and successors. I intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. -- GitLab From 23e06ac7d17adbec02637a3e9ab941cab2ea647a Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Mon, 26 Nov 2018 11:57:00 -0700 Subject: [PATCH 607/620] fixed hical having the wrong xml file (#608) --- .../apps/hical/{hicalbeta.xml => hical.xml} | 75 ++++++++++--------- 1 file changed, 39 insertions(+), 36 deletions(-) rename isis/src/mro/apps/hical/{hicalbeta.xml => hical.xml} (97%) diff --git a/isis/src/mro/apps/hical/hicalbeta.xml b/isis/src/mro/apps/hical/hical.xml similarity index 97% rename from isis/src/mro/apps/hical/hicalbeta.xml rename to isis/src/mro/apps/hical/hical.xml index 461d219721..ad9c6f3b08 100644 --- a/isis/src/mro/apps/hical/hicalbeta.xml +++ b/isis/src/mro/apps/hical/hical.xml @@ -1,7 +1,7 @@ - + - + Performs radiometric calibration of HiRISE channel images @@ -9,7 +9,7 @@

    - hicalbeta appiles radiometric calibration correction to HiRISE + hical appiles radiometric calibration correction to HiRISE images. This particular version is deemed experimental, thus the beta designation. The radiometric calibration correction is performed on each individual HiRISE channel file (EDR) correcting for drift, @@ -56,7 +56,7 @@ equal the total number of image lines.
    - Note that these data BLOBs are removed by hicalbeta in the output + Note that these data BLOBs are removed by hical in the output file so that repeated runs of this application are prevented.

    @@ -144,7 +144,7 @@

    The real power of the configuration file is its use of named Profiles. Profiles are groups of keywords that can be associated to a - unique definition. The hicalbeta PVL configuration file + unique definition. The hical PVL configuration file consists of a single Hical object with numerous named Profile groups. Each of the Profile groups must contain a Name keyword that uniquely identifies it within the @@ -215,16 +215,16 @@

     
     #  HiRISE Calibration Matricies configuration file
    -#  See documentation for the hicalbeta application on the content and form of
    +#  See documentation for the hical application on the content and form of
     #  this file.
     Object = Hical
     
    -  Program = "hicalbeta"
    +  Program = "hical"
     
       Name           = "HiMatrices"
       DefaultProfile = "HiMatrices"
     
    -/* If you want to rerun hicalbeta, you must set PropagateTables to True.  Use */
    +/* If you want to rerun hical, you must set PropagateTables to True.  Use */
     /* this in conjuction with Debug::SkipModule = True option for each module. */
       PropagateTables = False
     
    @@ -338,21 +338,21 @@ Object = Hical
         Module = ZeroDark
     
     /* Define the B matrix file reference */
    -    B = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
    +    B = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hical_????.cub"
         SkipLines        = 1
    -    Slope            = "$mro/calibration/matrices/beta/t_slope_CH{CHANNEL}_hicalbeta_????.csv"
    -    Intercept        = "$mro/calibration/matrices/beta/t_intercept_CH{CHANNEL}_hicalbeta_????.csv"
    +    Slope            = "$mro/calibration/matrices/beta/t_slope_CH{CHANNEL}_hical_????.csv"
    +    Intercept        = "$mro/calibration/matrices/beta/t_intercept_CH{CHANNEL}_hical_????.csv"
     
     /* As of version 0020, 9 March 2010, we will be using the following names and formats */
     /* We are calling this the DarkCurrent now.  The filename will stay the same (with a .csv extension) */
    -    DarkCurrent = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hicalbeta_????.csv"
    +    DarkCurrent = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hical_????.csv"
         DarkCurrentColumnName = "{CCD}/{CHANNEL}"
     
     /* The slope and intercepts to the temperature-dependent correction to the dark current are given below. */
    -    DarkSlope = "$mro/calibration/matrices/beta/B_Temperature_Slope_hicalbeta_????.csv"
    +    DarkSlope = "$mro/calibration/matrices/beta/B_Temperature_Slope_hical_????.csv"
         DarkSlopeColumnName = "CH{CHANNEL}_TDI{TDI}"
     
    -    DarkIntercept = "$mro/calibration/matrices/beta/B_Temperature_Intercept_hicalbeta_????.csv"
    +    DarkIntercept = "$mro/calibration/matrices/beta/B_Temperature_Intercept_hical_????.csv"
         DarkInterceptColumnName = "CH{CHANNEL}_TDI{TDI}"
     
         /* Do filtering? */
    @@ -366,7 +366,7 @@ Object = Hical
         Module = GainNonLinearity
       
     /* Define the nonlinearity correction coefficients */
    -    NonLinearityGain = "$mro/calibration/matrices/beta/Gain_NonLinearity_BIN{BIN}_hicalbeta_????.csv"
    +    NonLinearityGain = "$mro/calibration/matrices/beta/Gain_NonLinearity_BIN{BIN}_hical_????.csv"
         NonLinearityGainRowName  = "{CCD}_{CHANNEL}"
       End_Group
     
    @@ -380,12 +380,12 @@ Object = Hical
         Module = GainLineDrift
     
         SkipLines            = 1
    -/* Added "_hicalbeta" to filename as of 2008-04-02.  This is consistant with */
    +/* Added "_hical" to filename as of 2008-04-02.  This is consistant with */
     /* naming convention used for the beta version of hical. */
    -    GainLineCoefficients = "$mro/calibration/matrices/beta/line_correct_{BIN}_hicalbeta_????.csv"
    +    GainLineCoefficients = "$mro/calibration/matrices/beta/line_correct_{BIN}_hical_????.csv"
     
     /* As of version 0020, 9 March 2010, these are more correctly, called the LineGainDrift correction*/
    -    LineGainDrift = "$mro/calibration/matrices/beta/Line_Gain_Drift_BIN{BIN}_hicalbeta_????.csv"
    +    LineGainDrift = "$mro/calibration/matrices/beta/Line_Gain_Drift_BIN{BIN}_hical_????.csv"
         LineGainDriftColumnHeader = True
         LineGainDriftRowName = "{CCD}/{CHANNEL}"
       End_Group
    @@ -397,10 +397,10 @@ Object = Hical
         Module = GainChannelNormalize
     
     /* Define the G matrix file reference */
    -    G = "$mro/calibration/matrices/beta/G_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
    +    G = "$mro/calibration/matrices/beta/G_TDI{TDI}_BIN{BIN}_hical_????.cub"
     
     /* As of version 0020, 9 March 2010, these coefficients have been renamed to Gains. */
    -    Gains = "$mro/calibration/matrices/beta/Gains_hicalbeta_????.csv"
    +    Gains = "$mro/calibration/matrices/beta/Gains_hical_????.csv"
         GainsRowName = "{BIN}"
         GainsColumnName = "{CCD}/{CHANNEL}"
       End_Group
    @@ -412,11 +412,11 @@ Object = Hical
         Module = GainFlatField
     
     /* Define the A matrix file reference */
    -     A = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
    +     A = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hical_????.cub"
     
     /* As of version 0020, 9 March 2010, These have the same filename with a .csv extension.*/
     /* As of version 0020, 9 March 2010, These coefficients are now called Flats. */
    -    Flats = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hicalbeta_????.csv"
    +    Flats = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hical_????.csv"
         FlatsColumnName = "{CCD}/{CHANNEL}"
       End_Group
     
    @@ -522,7 +522,7 @@ End_Object
                     

    Application Control Parameters


    - The GainChannelNormalize module in hical uses the + The GainChannelNormalize module in hicalbeta uses the bin, TDI, CCD, and Channel dependent coefficients described below in the equation "GCN = GCNc * 128 / (TDI * bin^2)" where GCNc is the normalization coefficient @@ -1270,7 +1270,7 @@ End_Object
    Specifies the filter dependent gain correction factor. Note that these values are found in the BG, RED, and IR - profiles and hical relies on the profile + profiles and hicalbeta relies on the profile options to load the proper parameter at runtime.
    @@ -682,7 +682,7 @@ End_Object
    - Description of main hicalbeta configuration + Description of main hical configuration parameters. These parameters govern profile loading, filename pattern replacement and debugging operations. Note that keywords in this section are present in all @@ -566,12 +566,12 @@ End_Object FROM file to the TO file when the file is completed. This has some interesting implications. When False, all Table objects in the FROM file are removed in the - TO file, which in effect prevents hicalbeta from being + TO file, which in effect prevents hical from being able to run again. However, because of debugging capabilities, one may want to select which calibration modules are run. Setting this to True will propagate all Table objects (BLOBs) in the FROM file to the TO - file so that hicalbeta can be run again to apply other + file so that hical can be run again to apply other modules. @@ -635,7 +635,7 @@ End_Object the calibration process. This is very useful for debugging and seeing how each module contributes. Be sure to set ProgagateTables to True if you - intend to perform subsequent runs of hicalbeta. + intend to perform subsequent runs of hical.

    - The following tables describe hicalbeta module processing + The following tables describe hical module processing overview. A general description of the module processing steps and configuration file parameters for the modules are provided. Note that each module contains a Name and Module parameter that @@ -696,7 +696,7 @@ End_Object profiles are modules. Multiple profiles can be loaded to fully define a set of module parameters. The order of potential profiles that are loaded in addition to the one requested directly in - hicalbeta application is specified by the + hical application is specified by the ProfileOptions keyword as described above.


    ZeroBufferSmooth Module Parameters


    @@ -886,7 +886,7 @@ End_Object component is determined. The default file name is "ReverseClockStatistics.XXXX.conf" where "XXXX" is a version number. Note that the contents of the - composed hicalbeta configuration profile is used to + composed hical configuration profile is used to provide initial values for the profile loaded out of this file.
    - The GainLineDrift module in hicalbeta uses the line + The GainLineDrift module in hical uses the line correction coefficients which are contained in the file as patterned by the LineGainDrift as defined below. This file contains 4 parameters (C[1234]) and is applied @@ -1094,7 +1094,7 @@ End_Object

    GainNonLinearity Module Parameters


    - The GainNonLinearity module in hicalbeta uses the + The GainNonLinearity module in hical uses the nonlinearity coefficients that are derived as a function of binning mode. These coefficients are used in the following equations to correct for nonlinear gain @@ -1132,7 +1132,7 @@ End_Object

    GainChannelNormalize Module Parameters


    @@ -1407,6 +1407,9 @@ End_Object Renamed many of the modules to better reflect their function. Extensively updated the program documentation. + + Merged hicalbeta changes into hical to make new release + @@ -1430,13 +1433,13 @@ End_Object filename input $mro/calibration - $mro/calibration/hicalbeta.????.conf + $mro/calibration/hical.????.conf File containing HiRISE calibration and matrix configuration parameters *.conf - This file is critical to the proper functioning of hicalbeta. It + This file is critical to the proper functioning of hical. It contains parameters that are loaded to provide necessary data used in the calibration of HiRISE CCD channels. It is extensively documented in the main documentation section of this application. -- GitLab From c81bc4ef5096b5def4813cc40ec1ee4ce9aa9a73 Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Mon, 26 Nov 2018 16:19:11 -0700 Subject: [PATCH 608/620] Unpinned gcc4 nn build number (#610) --- environment_gcc4.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment_gcc4.yml b/environment_gcc4.yml index 98ee1458d4..6a671b8318 100644 --- a/environment_gcc4.yml +++ b/environment_gcc4.yml @@ -38,7 +38,7 @@ dependencies: - mysql-connector-c==6.1.6=0 - nanoflann==1.2.2 - ninja==1.7.2=0 - - nn==1.86.0=2 + - nn==1.86.0 # - numpy==1.13.3=py36_blas_openblas_200 - openblas==0.2.19=2 - opencv -- GitLab From 0fddde6e0b874a39afe4277accd2c4a98872e5c1 Mon Sep 17 00:00:00 2001 From: jlaura Date: Wed, 28 Nov 2018 13:19:21 -0700 Subject: [PATCH 609/620] Update README.md (#618) * Update README.md Draft of the install instructions into the README where many devs / downloaders might end up looking. Used Pandoc for the conversion and then some manual cleanup. I did not catch everything. * Update README.md Updates for comments. --- README.md | 350 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 349 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 29d6502725..b40b5a3ad1 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,352 @@ [![Join the chat at https://gitter.im/USGS-Astrogeology/isis3_cmake](https://badges.gitter.im/USGS-Astrogeology/isis3_cmake.svg)](https://gitter.im/USGS-Astrogeology/isis3_cmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Integrated Software for Imagers and Spectrometers ISIS3 public release site +## Table of Contents + +* [Installation](README.md##Installation) + +## Installation + +This installation guide is for ISIS3 users interested in installing ISIS3 (3.6.0)+ through conda. + +### ISIS3 Installation With Conda + +1. Download either the Anaconda or Miniconda installation script for your OS platform. Anaconda is a much larger distribtion of packages supporting scientific python, while Miniconda is a minimal installation and not as large: [Anaconda installer](https://www.anaconda.com/download), [Miniconda installer](https://conda.io/miniconda.html) +2. If you are running on some variant of Linux, open a terminal window in the directory where you downloaded the script, and run the following commands. In this example, we chose to do a full install of Anaconda, and our OS is Linux-based. Your file name may be different depending on your environment. + + chmod +x Anaconda3-5.2.0-Linux-x86_64.sh + ./Anaconda3-5.2.0-Linux-x86_64.sh + + + This will start the Anaconda installer which will guide you through the installation process. + +3. If you are running Mac OS X, a pkg file (which looks similar to Anaconda3-5.3.0-MacOSX-x86\_64.pkg) will be downloaded. Double-click on the file to start the installation process. +4. After the installation has finished, open up a bash prompt in your terminal window. +5. Next setup your Anaconda environment for ISIS3. In the bash prompt, run the following commands: + + #Create a new conda environment to install ISIS3 in + conda create -n isis3 python=3.6 + + #Activate the environment + #Depending on your OS, you may need to use conda activate isis3 instead + source activate isis3 + + #Add the following channels to the environment + conda config --env --add channels conda-forge + conda config --env --add channels usgs-astrogeology + + #Verify you have the correct channels: + conda config --show channels + + #You should see: + + channels: + - usgs-astrogeology + - conda-forge + - defaults + + #The order is important. If conda-forge is before usgs-astrogeology, you will need to run: + + conda config --env --add channels usgs-astrogeology + + +6. The environment is now ready to download ISIS3 and its dependencies: + + conda install -c usgs-astrogeology isis3 + + +7. Finally, setup the environment variables: + + #Execute the ISIS3 variable initialization script with default arguments. + #This script prepares default values for: $ISISROOT/$ISIS3DATA/$ISIS3TESTDATA + + python $CONDA_PREFIX/scripts/isis3VarInit.py + + + Executing this script with no arguments will result in $ISIS3DATA=$CONDA\_PREFIX/data, and $ISIS3TESTDATA=$CONDA\_PREFIX/testdata. The user can specify different directories for both of these optional values: + + python $CONDA_PREFIX/scripts/isis3VarInit.py --data-dir=[path to data directory] --test-dir=[path to test data directory] + + + Directions for running rsync to download ISIS3 data can be found [here.](#ISIS3DataDownload) Now everytime the isis3 environment is activated, $ISISROOT, $ISIS3DATA, and $ISIS3TESTDATA will be set to the values passed to isis3VarInit.py. This does not happen retroactively, re-activate the isis3 envionment with the following command: + + #Depending on your OS, you may need to use conda activate isis3 instead + source activate isis3 + + +### Operating System Requirements + +ISIS3 runs on many UNIX variants. ISIS does not run natively on MS Windows, although it has been successfully run on Windows 10 using the Windows Subsystem for Linux (WSL). Instructions for doing this can be found [here.](#RunningOnWindows) The UNIX variants ISIS3 has been successfully built on are: + +- Ubuntu 18.04 LTS +- Mac OS X 10.13.6 High Sierra +- Fedora 28 +- CentOS 7.2 + +ISIS3 may be run on other Linux or macOS operating systems then those listed above, but it has not been tested and is not supported. + +### Hardware Requirements + +Here are the minimum hardware requirements + +- 64-bit (x86) processors +- 2 GB RAM +- 2.5 GB of disk space for ISIS3 binaries +- 10 GB to 510 GB disk space for ISIS3 data +- 10 GB to many TB disk space for processing images +- A quality graphics card + +To build and compile ISIS3 requires following the instructions listed below, which are given on the GitHub wiki page for the ISIS3 project: + +- [Getting Started With GitHub](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#getting-started-with-github) +- [Building ISIS3 With cmake](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#building-isis3) +- [New ISIS3 environmental variables and their meanings](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#new-environmental-variable-meanings) +- [Custom data and test directories](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#custom-data-and-test-data-directories) +- [Cleaning builds](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#cleaning-builds) +- [Building individual applications/objects](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#building-individual-isis3-applicationsobjects) +- [Building ISIS3 documentation](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#building-isis3-documentation) +- [What to do if you encounter any problems](https://github.com/USGS-Astrogeology/ISIS3/wiki/Developing-ISIS3-with-cmake#problems) + +### Mission Requirements + +ISIS3 supports many planetary missions; in fact, over 40 different instruments including some flown as early as the 1960s. Ancillary data are required to process images from these instruments. For example, translation definition files to help convert from PDS format to ISIS cubes, dark current and flat file images for radiometric calibration, and large quantities of SPICE files (spacecraft pointing and position) for map projecting images. If you plan to work with data from all missions, then the download will require about 180 GB for all the ancillary data. However, most of this volume is taken up by SPICE files. We have a SPICE Web service that can be used in lieu of downloading all of the SPICE files which can reduce the download size to 10 GB. When downloading ISIS, you will have the option of choosing which mission data to acquire as well as if you only want the translation and calibration files and not SPICE files. + +### DTM Requirements + +The strength of ISIS3 lies in its capabilities for planetary cartography. The image orthorectification process is improved if a digital terrain model (DTM) is used. The DTMs can be quite large and take some time to download. They exist for many planetary bodies (e.g., the Moon, Mars, etc.). Therefore, there are options for selecting which DTMs to download if you are only working with a particular target body. + + + +### Full ISIS3 Data Download + +Mission data is hosted on rsync servers and not through conda channels like the ISIS3 distribution. This requires using the rsync command from within a terminal window within your Unix distribution, or from within WSL if running Windows 10. Downloading all mission data requires over 130 GB of disk space. If you want to acquire only certain mission data [click here](#MissionSpecific). To download all ISIS3 data files, continue reading. + +To download all ISIS3 data (approximately 180 GB), enter the following commands at the command prompt: + + cd $ISIS3DATA + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data . + + +> Note: The above command downloads all ISIS data including the required base data area and all of the optional mission data areas. + + +### Partial Download of ISIS3 Base Data (Required) + +The base data area is separate from the source code. This data area is crucial to ISIS3 and must be downloaded. + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/base data/ + +### Partial Download of Mission Specific Data + +There are many missions supported by ISIS. If you are only working with a few missions then you should download only those specific data areas. One way you can save time and space is to not download the SPICE data for the mission you need. If you chose download the SPICE data, read the next section about the SPICE Web Service that provides instructions for excluding the SPICE kernels. Otherwise [jump](README.md#ApolloMission) to the mission specific sections. + +### ISIS SPICE Web Service + +ISIS can now use a service to retrieve the SPICE data for all instruments ISIS supports via the internet. To use this service instead of your local SPICE data, click the WEB check box in the spiceinit program GUI or type spiceinit web=yes at the command line. Using the ISIS SPICE Web Service will significantly reduce the size of the downloads from our data area. If you want to use this new service, without having to download all the SPICE data, add the following argument to the mission-specific rsync command: + + --exclude='kernels' + +For example: `rsync -azv **--exclude='kernels'** --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/cassini data/` + + WARNING: Some instruments require mission data to be present for calibration, which may not be supported by the SPICE Web Server exclusively, and some programs that are designed to run an image from ingestion through the mapping phase do not have an option to use the SPICE Web Service. For information specific to an instrument, see the documentation for radiometric callobration programs. + +#### Apollo Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo15 data/ + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo16 data/ + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/apollo17 data/ + + + + +Cassini Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/cassini data/ + + + + +Chandrayaan Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/chandrayaan1 data/ + + + + +Clementine Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/clementine1 data/ + + + + +Dawn Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/dawn data/ + + +ExoMars Trace Gas Orbiter Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/tgo data/ + + +Galileo Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/galileo data/ + + +Hayabusa Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/hayabusa data/ + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/hayabusa2 data/ + + +Juno Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/juno data/ + + + + +Kaguya Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/kaguya data/ + + + + +Lunar Orbiter Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/lo data/ + + + + +Lunar Reconnaissance Orbiter Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/lro data/ + + + + +Mars Exploration Rover Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mer data/ + + + + +Mariner10 Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mariner10 data/ + + + + +Messenger Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/messenger data/ + + + + +Mars Express Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mex data/ + + + + +Mars Global Surveyor Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mgs data/ + + + + +Mars Reconnaissance Orbiter Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/mro data/ + + + + +Mars Odyssey Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/odyssey data/ + + + + +Near Mission (kernels can be excluded): + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/near data/ + + +New Horizons Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/newhorizons data/ + + +Odyssey Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/odyssey data/ + + +Rolo Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/rolo data/ + + +Rosetta Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/rosetta data/ + + +Smart1 Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/smart1 data/ + + +Viking Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/viking1 data/ + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/viking2 data/ + + +Voyager Mission (kernels can be excluded): + + + + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/voyager1 data/ + rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data/voyager2 data/ + + +Installing older versions of ISIS +--------------------------------- + +### How do I install ISIS2? + +If you are looking for ISIS2, please [refer to the ISIS 2 Installation Guide](http://isis.astrogeology.usgs.gov/Isis2/isis-bin/installation.cgi) for instructions on downloading and installing ISIS 2. + +### How do I install ISIS3.5.2 or earlier? + +If you are looking for a version of ISIS3 prior to 3.6.0, please [refer to the Legacy ISIS3 Installation Guide](../../documents/LegacyInstallGuide/index.html) for instructions on downloading and installing ISIS3, versions prior to 3.6.0. -- GitLab From 23536d3adf49e4db7fda50b3e188970a911176ff Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Wed, 28 Nov 2018 14:29:17 -0700 Subject: [PATCH 610/620] Removed debug cout from Least Squares --- isis/src/base/objs/LeastSquares/LeastSquares.cpp | 13 ++++++------- isis/src/base/objs/LeastSquares/LeastSquares.truth | 1 - 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.cpp b/isis/src/base/objs/LeastSquares/LeastSquares.cpp index 9ef7b873df..8d073195cc 100644 --- a/isis/src/base/objs/LeastSquares/LeastSquares.cpp +++ b/isis/src/base/objs/LeastSquares/LeastSquares.cpp @@ -43,7 +43,7 @@ namespace Isis { p_solved = false; p_sparse = sparse; p_sigma0 = 0.; - + p_sparseRows = sparseRows; p_sparseCols = sparseCols; @@ -69,7 +69,7 @@ namespace Isis { p_parameterWeights.resize(sparseCols); } - + } p_currentFillRow = -1; } @@ -308,8 +308,8 @@ namespace Isis { if (coefs.dim1() < p_basis->Coefficients()) { QString msg = "Unable to solve least-squares using SVD method. No " "solution available. Not enough knowns or knowns are " - "co-linear ... [Unknowns = " - + toString(p_basis->Coefficients()) + "] [Knowns = " + "co-linear ... [Unknowns = " + + toString(p_basis->Coefficients()) + "] [Knowns = " + toString(coefs.dim1()) + "]"; throw IException(IException::Unknown, msg, _FILEINFO_); } @@ -444,7 +444,6 @@ namespace Isis { int LeastSquares::SolveSparse() { // form "normal equations" matrix by multiplying ATA - std::cout << p_sparseA.n_rows << ", " << p_sparseA.n_cols << std::endl; p_normals = p_sparseA.t()*p_sparseA; // Create the right-hand-side column vector 'b' @@ -469,9 +468,9 @@ namespace Isis { p_ATb(i, 0) -= p_epsilonsSparse[i]*weight; } } - + bool status = spsolve(p_xSparse, p_normals, p_ATb, "superlu"); - + if (status == false) { QString msg = "Could not solve sparse least squares problem."; throw IException(IException::Unknown, msg, _FILEINFO_); diff --git a/isis/src/base/objs/LeastSquares/LeastSquares.truth b/isis/src/base/objs/LeastSquares/LeastSquares.truth index 6caeb1d023..9c5221b1f4 100644 --- a/isis/src/base/objs/LeastSquares/LeastSquares.truth +++ b/isis/src/base/objs/LeastSquares/LeastSquares.truth @@ -31,7 +31,6 @@ Number of Knowns = 7 y = 1.43458 1.43458 --- *** TEST 4: SAME 3 POINTS, SPARSE *** -3, 2 Number of Knowns = 3 SPARSE one = 3.08 -- GitLab From 88a02c769ccd96cca2592ee7e455f43250706e7f Mon Sep 17 00:00:00 2001 From: Evin Dunn Date: Thu, 29 Nov 2018 11:37:51 -0700 Subject: [PATCH 611/620] Updates Jenkinsfile to work with Docker Plugin --- Jenkinsfile | 92 +++++++++++++++++++++++------------------------------ 1 file changed, 40 insertions(+), 52 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index dbd8245a00..1681a9752f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,63 +1,51 @@ -pipeline { - agent none +pipeline { + agent none environment { ISISROOT="${workspace}" + "/build/" ISIS3TESTDATA="/usgs/cpkgs/isis3/testData/" ISIS3DATA="/usgs/cpkgs/isis3/data/" } stages { - stage('Fedora25') { - agent { - docker { - label 'cmake' - image 'chrisryancombs/docker_isis' - args '''\ - -v /usgs/cpkgs/isis3/data:/usgs/cpkgs/isis3/data \ - -v /usgs/cpkgs/isis3/testData:/usgs/cpkgs/isis3/testData\ - -v /usgs/cpkgs/isis3/isis3mgr_scripts:/usgs/cpkgs/isis3/isis3mgr_scripts - ''' + stage('Build') { + parallel { + stage('Fedora25') { + agent { + label 'isis-fedora-25' + } + steps { + sh """ + conda env create -n isis3 -f environment.yml + source activate isis3 + mkdir -p ./install ./build && cd build + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis + set +e + ninja -j8 && ninja install + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + ctest -V -R _unit_ --timeout 500 + ctest -V -R _app_ --timeout 500 + ctest -V -R _module_ --timeout 500 + """ + } } - } - steps { - sh """ - conda env create -n isis3 -f environment.yml - source activate isis3 - mkdir -p ./install ./build && cd build - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis - set +e - ninja -j8 && ninja install - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ - } - } - stage('CentOS7') { - agent { - docker { - label 'cmake_cool' - image 'chrisryancombs/docker_isis_centos' - args '''\ - -v /usgs/cpkgs/isis3/data:/usgs/cpkgs/isis3/data \ - -v /usgs/cpkgs/isis3/testData:/usgs/cpkgs/isis3/testData\ - -v /usgs/cpkgs/isis3/isis3mgr_scripts:/usgs/cpkgs/isis3/isis3mgr_scripts - ''' + stage('CentOS7') { + agent { + label 'isis-centos-7' + } + steps { + sh """ + conda env create -n isis3 -f environment.yml + source activate isis3 + cd build + set +e + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + ctest -V -R _unit_ --timeout 500 + ctest -V -R _app_ --timeout 500 + ctest -V -R _module_ --timeout 500 + """ + } } } - steps { - sh """ - conda env create -n isis3 -f environment.yml - source activate isis3 - cd build - set +e - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ - } } } // post { @@ -73,4 +61,4 @@ pipeline { // cleanWs() // } // } -} +} -- GitLab From 4ab2fdd940a925f4f3a53d900cd6c3db939fdb44 Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Sat, 1 Dec 2018 12:19:20 -0700 Subject: [PATCH 612/620] Updated anaconda install instructions (#617) --- .../documents/InstallGuide/InstallGuide.xml | 104 +++++++++--------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/isis/src/docsys/documents/InstallGuide/InstallGuide.xml b/isis/src/docsys/documents/InstallGuide/InstallGuide.xml index a05f240422..32b7056fb5 100644 --- a/isis/src/docsys/documents/InstallGuide/InstallGuide.xml +++ b/isis/src/docsys/documents/InstallGuide/InstallGuide.xml @@ -25,29 +25,40 @@ you must not upgrade the ISIS Data Files!!!

    Overview

    - This installation guide is for ISIS3 users interested in installing ISIS3 (3.6.0)+ through conda. + This installation guide is for ISIS3 users interested in installing ISIS3 (3.6.0)+ through conda. If you are a developer, we refer you to our GitHub repository.

    ISIS3 Installation With Conda

      -
    1. Download either the Anaconda or Miniconda installation script for your OS platform. Anaconda is a much larger distribtion of packages supporting scientific python, while Miniconda is a minimal installation and not as large: +
    2. Download either the Anaconda or Miniconda installation script for your OS platform. Anaconda is a much larger distribtion of packages supporting scientific python, while Miniconda is a minimal installation and not as large: Anaconda installer, Miniconda installer
    3. -
    4. If you are running on some variant of Linux, open a terminal window in the directory where you downloaded the script, and run the following commands. In this example, we chose to do a full install of Anaconda, and our OS is Linux-based. Your file name may be different depending on your environment.
    5. + +
    6. If you are running on some variant of Linux, open a terminal window in the directory where you downloaded the script, and run the following commands. In this example, we chose to do a full install of Anaconda, and our OS is Linux-based. Your file name may be different depending on your environment.
                 chmod +x Anaconda3-5.2.0-Linux-x86_64.sh
      -          ./Anaconda3-5.2.0-Linux-x86_64.sh          
      +          ./Anaconda3-5.2.0-Linux-x86_64.sh
               
      - - This will start the Anaconda installer which will guide you through the installation process. + + This will start the Anaconda installer which will guide you through the installation process.
    7. + +
    8. If you are running Mac OS X, a pkg file (which looks similar to Anaconda3-5.3.0-MacOSX-x86_64.pkg) will be downloaded. Double-click on the file to start the installation process.
    9. +
    10. After the installation has finished, open up a bash prompt in your terminal window.
    11. -
    12. If you are running Mac OS X, a pkg file (which looks similar to Anaconda3-5.3.0-MacOSX-x86_64.pkg) will be downloaded. Double-click on the file to start the installation process.
    13. -
    14. Again from within a terminal window, create a new environment for your ISIS3 installation: + +
    15. Next setup your Anaconda environment for ISIS3. In the bash prompt, run the following commands:
      -          #Add the following channels to the Anaconda installation
      -          conda config --add channels conda-forge
      -          conda config --add channels usgs-astrogeology
      +          #Create a new conda environment to install ISIS3 in
      +          conda create -n isis3 python=3.6
      +
      +          #Activate the environment
      +          #Depending on your OS, you may need to use conda activate isis3 instead
      +          source activate isis3
      +
      +          #Add the following channels to the environment
      +          conda config --env --add channels conda-forge
      +          conda config --env --add channels usgs-astrogeology
       
                 #Verify you have the correct channels:
                 conda config --show channels
      @@ -55,57 +66,47 @@ you must not upgrade the ISIS Data Files!!!
                 #You should see:
       
                 channels:
      -              - usgs-astrogeology
      -              - conda-forge
      -              - defaults
      +             - usgs-astrogeology
      +             - conda-forge
      +             - defaults
       
      -           #The order is important.  If conda-forge is before usgs-astrogeology, you will need to run:
      +          #The order is important.  If conda-forge is before usgs-astrogeology, you will need to run:
       
      -           conda config --add channels usgs-astrogeology
      +          conda config --env --add channels usgs-astrogeology
      +        
    16. - - #Create a new conda environment to install ISIS3 in. - conda create -n isis3 - - #Activate the environment - source activate isis3 - - #Download the ISIS3 version +
    17. The environment is now ready to download ISIS3 and its dependencies: +
                 conda install -c usgs-astrogeology isis3
      -          
      +        
    18. + +
    19. Finally, setup the environment variables: +
                 #Execute the ISIS3 variable initialization script with default arguments.
                 #This script prepares default values for:  $ISISROOT/$ISIS3DATA/$ISIS3TESTDATA
       
                 python $CONDA_PREFIX/scripts/isis3VarInit.py
      +        
      - Executing this script with no arguments will result in $ISIS3DATA=$CONDA_PREFIX/data, - and $ISIS3TESTDATA=$CONDA_PREFIX/testdata. The user can specify different directories - for both of these optional values: - - ./$CONDA_PREFIX/scripts/isis3VarInit --data-dir=[path to data directory] --test-dir=[path to test data directory] - - - Directions for running rsync to download ISIS3 data can be found here. - - - #Run the source activate command a second time to process the changes: - - source activate isis3 + Executing this script with no arguments will result in $ISIS3DATA=$CONDA_PREFIX/data, + and $ISIS3TESTDATA=$CONDA_PREFIX/testdata. The user can specify different directories + for both of these optional values: +
      +          python $CONDA_PREFIX/scripts/isis3VarInit.py --data-dir=[path to data directory]  --test-dir=[path to test data directory]
      +        
      - To avoid having to do this every time you open a new terminal window, we suggest adding the following lines to the end of your .bashrc file - (if running a variant of Linux) to ensure that conda is in your PATH variable. If you are running Mac OS X, these lines would be appended - to the end of your .bash_profile file: + Directions for running rsync to download ISIS3 data can be found here. - - source activate isis3 - python $CONDA_PREFIX/scripts/isis3VarInit.py + Now everytime the isis3 environment is activated, $ISISROOT, $ISIS3DATA, and $ISIS3TESTDATA + will be set to the values passed to isis3VarInit.py. This does not happen retroactively, + re-activate the isis3 envionment with the following command: +
      +          #Depending on your OS, you may need to use conda activate isis3 instead
                 source activate isis3
      +        
    20. +
    - - - -

    Operating System Requirements

    ISIS3 runs on many UNIX variants. ISIS does not run natively on MS Windows, although it has been successfully run on Windows 10 using the Windows @@ -115,14 +116,17 @@ you must not upgrade the ISIS Data Files!!! The UNIX variants ISIS3 has been successfully built on are:

    • Ubuntu 18.04 LTS
    • -
    • Mac OS X 10.13.6 High Sierra
    • +
    • Mac OS X 10.13.6 High Sierra
    • Fedora 28
    • +
    • CentOS 7.2

    ISIS3 may be run on other Linux or macOS operating systems then those listed above, but it has not been tested and is not supported.

    + +

    Hardware Requirements

    Here are the minimum hardware requirements

      @@ -220,7 +224,7 @@ is a popular choice and may be downloaded below. To download all ISIS3 data (approximately 180 GB), enter the following commands at the command prompt:

      -
            
      +      
             cd $ISIS3DATA
             rsync -azv --delete --partial isisdist.astrogeology.usgs.gov::isis3data/data .
             
      -- GitLab From fee8957b14e98dcfe115c2e1415141d68ca9274b Mon Sep 17 00:00:00 2001 From: Evin Dunn Date: Mon, 3 Dec 2018 08:39:58 -0700 Subject: [PATCH 613/620] Uses scripted syntax for Jenkinsfile for GitHub hook compat (#625) --- Jenkinsfile | 163 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 104 insertions(+), 59 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1681a9752f..7a3511742a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,64 +1,109 @@ -pipeline { - agent none - environment { - ISISROOT="${workspace}" + "/build/" - ISIS3TESTDATA="/usgs/cpkgs/isis3/testData/" - ISIS3DATA="/usgs/cpkgs/isis3/data/" +properties([pipelineTriggers([githubPush()])]) + +def nodes = [:] + +nodes["isis-fedora-25"] = { + node("isis-fedora-25") { + withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { + stage ("Fedora 25") { + git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' + sh """ + git clone https://github.com/abseil/googletest.git gtest + sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml + sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml + sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml + conda env create -n isis3 -f environment.yml + source activate isis3 + mkdir -p ./install ./build && cd build + cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis + set +e + ninja -j8 && ninja install + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + ctest -V -R _unit_ --timeout 500 + ctest -V -R _app_ --timeout 500 + ctest -V -R _module_ --timeout 500 + """ + } + } + } +} + +nodes["isis-centos-7"] = { + node("isis-centos-7") { + withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { + stage ("CentOS 7") { + git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' + sh """ + git clone https://github.com/abseil/googletest.git gtest + sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml + sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml + sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml + conda env create -n isis3 -f environment.yml + source activate isis3 + mkdir -p ./install ./build && cd build + cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis + set +e + ninja -j8 && ninja install + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + ctest -V -R _unit_ --timeout 500 + ctest -V -R _app_ --timeout 500 + ctest -V -R _module_ --timeout 500 + """ + } + } } - stages { - stage('Build') { - parallel { - stage('Fedora25') { - agent { - label 'isis-fedora-25' - } - steps { - sh """ - conda env create -n isis3 -f environment.yml - source activate isis3 - mkdir -p ./install ./build && cd build - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis - set +e - ninja -j8 && ninja install - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ - } - } - stage('CentOS7') { - agent { - label 'isis-centos-7' - } - steps { - sh """ - conda env create -n isis3 -f environment.yml - source activate isis3 - cd build - set +e - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ - } - } +} + +nodes["isis-debian-9"] = { + node("isis-debian-9") { + withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { + stage ("Debian 9") { + git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' + sh """ + git clone https://github.com/abseil/googletest.git gtest + sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml + sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml + sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml + conda env create -n isis3 -f environment.yml + source activate isis3 + mkdir -p ./install ./build && cd build + cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis + set +e + ninja -j8 && ninja install + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + ctest -V -R _unit_ --timeout 500 + ctest -V -R _app_ --timeout 500 + ctest -V -R _module_ --timeout 500 + """ + } + } + } +} + +nodes["isis-ubuntu-1804"] = { + node("isis-ubuntu-1804") { + withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { + stage ("Ubuntu 18.04") { + git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' + sh """ + git clone https://github.com/abseil/googletest.git gtest + sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml + sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml + sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml + conda env create -n isis3 -f environment.yml + source activate isis3 + mkdir -p ./install ./build && cd build + cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis + set +e + ninja -j8 && ninja install + source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . + ctest -V -R _unit_ --timeout 500 + ctest -V -R _app_ --timeout 500 + ctest -V -R _module_ --timeout 500 + """ } } } -// post { -// success { -// sh 'pwd && ls' -// archiveArtifacts artifacts: "build/objects/*.o" -// } -// always { -// mail to: 'ccombs@usgs.gov', -// subject: "Build Finished: ${currentBuild.fullDisplayName}", -// body: "Link: ${env.BUILD_URL}" -// sh "rm -rf build/* && rm -rf install/*" -// cleanWs() -// } -// } } + +parallel nodes -- GitLab From 3943057b6b72ef850e041459bdd598e9693eb711 Mon Sep 17 00:00:00 2001 From: Kelvin Rodriguez Date: Mon, 3 Dec 2018 12:07:08 -0700 Subject: [PATCH 614/620] removed logic from Jenkinsfile, makes testing hooks easier for now (#628) --- Jenkinsfile | 128 ++++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7a3511742a..21a76b5c62 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,22 +7,22 @@ nodes["isis-fedora-25"] = { withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { stage ("Fedora 25") { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' - sh """ - git clone https://github.com/abseil/googletest.git gtest - sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml - sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml - sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml - conda env create -n isis3 -f environment.yml - source activate isis3 - mkdir -p ./install ./build && cd build - cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis - set +e - ninja -j8 && ninja install - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ +// sh """ +// git clone https://github.com/abseil/googletest.git gtest +// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml +// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml +// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda env create -n isis3 -f environment.yml +// source activate isis3 +// mkdir -p ./install ./build && cd build +// cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis +// set +e +// ninja -j8 && ninja install +// source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . +// ctest -V -R _unit_ --timeout 500 +// ctest -V -R _app_ --timeout 500 +// ctest -V -R _module_ --timeout 500 +// """ } } } @@ -33,22 +33,22 @@ nodes["isis-centos-7"] = { withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { stage ("CentOS 7") { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' - sh """ - git clone https://github.com/abseil/googletest.git gtest - sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml - sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml - sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml - conda env create -n isis3 -f environment.yml - source activate isis3 - mkdir -p ./install ./build && cd build - cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis - set +e - ninja -j8 && ninja install - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ +// sh """ +// git clone https://github.com/abseil/googletest.git gtest +// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml +// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml +// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda env create -n isis3 -f environment.yml +// source activate isis3 +// mkdir -p ./install ./build && cd build +// cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis +// set +e +// ninja -j8 && ninja install +// source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . +// ctest -V -R _unit_ --timeout 500 +// ctest -V -R _app_ --timeout 500 +// ctest -V -R _module_ --timeout 500 +// """ } } } @@ -59,22 +59,22 @@ nodes["isis-debian-9"] = { withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { stage ("Debian 9") { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' - sh """ - git clone https://github.com/abseil/googletest.git gtest - sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml - sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml - sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml - conda env create -n isis3 -f environment.yml - source activate isis3 - mkdir -p ./install ./build && cd build - cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis - set +e - ninja -j8 && ninja install - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ +// sh """ +// git clone https://github.com/abseil/googletest.git gtest +// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml +// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml +// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda env create -n isis3 -f environment.yml +// source activate isis3 +// mkdir -p ./install ./build && cd build +// cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis +// set +e +// ninja -j8 && ninja install +// source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . +// ctest -V -R _unit_ --timeout 500 +// ctest -V -R _app_ --timeout 500 +// ctest -V -R _module_ --timeout 500 +// """ } } } @@ -85,22 +85,22 @@ nodes["isis-ubuntu-1804"] = { withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { stage ("Ubuntu 18.04") { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' - sh """ - git clone https://github.com/abseil/googletest.git gtest - sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml - sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml - sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml - conda env create -n isis3 -f environment.yml - source activate isis3 - mkdir -p ./install ./build && cd build - cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis - set +e - ninja -j8 && ninja install - source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . - ctest -V -R _unit_ --timeout 500 - ctest -V -R _app_ --timeout 500 - ctest -V -R _module_ --timeout 500 - """ +// sh """ +// git clone https://github.com/abseil/googletest.git gtest +// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml +// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml +// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda env create -n isis3 -f environment.yml +// source activate isis3 +// mkdir -p ./install ./build && cd build +// cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis +// set +e +// ninja -j8 && ninja install +// source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . +// ctest -V -R _unit_ --timeout 500 +// ctest -V -R _app_ --timeout 500 +// ctest -V -R _module_ --timeout 500 +// """ } } } -- GitLab From 0609a2820c0a3c0407795ca3ee3e424b52ded7d1 Mon Sep 17 00:00:00 2001 From: Stuart Sides Date: Tue, 4 Dec 2018 13:15:52 -0700 Subject: [PATCH 615/620] Modified to have cubeit remove mosaic pixel tracking info from labels. Fixes #5533 --- isis/src/base/apps/cubeit/cubeit.xml | 3 +++ isis/src/base/apps/cubeit/main.cpp | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/isis/src/base/apps/cubeit/cubeit.xml b/isis/src/base/apps/cubeit/cubeit.xml index c6f69f541b..a55a348279 100644 --- a/isis/src/base/apps/cubeit/cubeit.xml +++ b/isis/src/base/apps/cubeit/cubeit.xml @@ -79,6 +79,9 @@ Modified Makefile of badinputs app test to truncate paths before data directory. Allows tests to pass when not using the default data area. Fixes #4783. + + Removed the tracking lable group if it exists in the output cube. Fixes #5533. + diff --git a/isis/src/base/apps/cubeit/main.cpp b/isis/src/base/apps/cubeit/main.cpp index 35e677f8c2..971245e190 100644 --- a/isis/src/base/apps/cubeit/main.cpp +++ b/isis/src/base/apps/cubeit/main.cpp @@ -183,6 +183,13 @@ void IsisMain() { ocube->deleteBlob("Table", "InputImages"); } + // Delete the Tracking group if it exists (3.6.0 and up) + // The tracking group could be transfered from the first input cube, but it does not + // represent the images used in any other band after cubeit. + if(ocube->hasGroup("Tracking")) { + ocube->deleteGroup("Tracking"); + } + p2.EndProcess(); // Now loop and mosaic in each cube -- GitLab From f26bb0352ad691ed16d12397342980122858c622 Mon Sep 17 00:00:00 2001 From: Stuart Sides Date: Tue, 4 Dec 2018 16:54:52 -0700 Subject: [PATCH 616/620] Update cubeit.xml Fixed a typo --- isis/src/base/apps/cubeit/cubeit.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/isis/src/base/apps/cubeit/cubeit.xml b/isis/src/base/apps/cubeit/cubeit.xml index a55a348279..139d378463 100644 --- a/isis/src/base/apps/cubeit/cubeit.xml +++ b/isis/src/base/apps/cubeit/cubeit.xml @@ -80,7 +80,7 @@ to pass when not using the default data area. Fixes #4783. - Removed the tracking lable group if it exists in the output cube. Fixes #5533. + Removed the tracking label group if it exists in the output cube. Fixes #5533. -- GitLab From c1f322e2e0b4c6103ff12725b31e7406aeece9bd Mon Sep 17 00:00:00 2001 From: Evin Dunn Date: Fri, 7 Dec 2018 10:42:00 -0700 Subject: [PATCH 617/620] Fixes conda channels in Jenkinsfile & adds a MacOS node (#633) --- Jenkinsfile | 60 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 21a76b5c62..67aec8e33c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,9 +9,11 @@ nodes["isis-fedora-25"] = { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' // sh """ // git clone https://github.com/abseil/googletest.git gtest -// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml -// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml -// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda config --set channel_alias http://astro-bin.wr.usgs.gov/conda +// conda config --prepend channels anaconda +// conda config --append channels conda-forge +// conda config --append channels usgs-astrogeology +// conda config --prepend default_channels anaconda // conda env create -n isis3 -f environment.yml // source activate isis3 // mkdir -p ./install ./build && cd build @@ -35,9 +37,11 @@ nodes["isis-centos-7"] = { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' // sh """ // git clone https://github.com/abseil/googletest.git gtest -// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml -// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml -// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda config --set channel_alias http://astro-bin.wr.usgs.gov/conda +// conda config --prepend channels anaconda +// conda config --append channels conda-forge +// conda config --append channels usgs-astrogeology +// conda config --prepend default_channels anaconda // conda env create -n isis3 -f environment.yml // source activate isis3 // mkdir -p ./install ./build && cd build @@ -61,9 +65,11 @@ nodes["isis-debian-9"] = { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' // sh """ // git clone https://github.com/abseil/googletest.git gtest -// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml -// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml -// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda config --set channel_alias http://astro-bin.wr.usgs.gov/conda +// conda config --prepend channels anaconda +// conda config --append channels conda-forge +// conda config --append channels usgs-astrogeology +// conda config --prepend default_channels anaconda // conda env create -n isis3 -f environment.yml // source activate isis3 // mkdir -p ./install ./build && cd build @@ -87,9 +93,39 @@ nodes["isis-ubuntu-1804"] = { git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' // sh """ // git clone https://github.com/abseil/googletest.git gtest -// sed -i "s|usgs-astrogeology|http://astro-bin.wr.usgs.gov/conda-usgs-astrogeology|" environment.yml -// sed -i "s|conda-forge|http://astro-bin.wr.usgs.gov/conda-forge|" environment.yml -// sed -i "s|defaults|http://astro-bin.wr.usgs.gov/conda|" environment.yml +// conda config --set channel_alias http://astro-bin.wr.usgs.gov/conda +// conda config --prepend channels anaconda +// conda config --append channels conda-forge +// conda config --append channels usgs-astrogeology +// conda config --prepend default_channels anaconda +// conda env create -n isis3 -f environment.yml +// source activate isis3 +// mkdir -p ./install ./build && cd build +// cmake -GNinja -DJP2KFLAG=OFF -Dpybindings=OFF -DCMAKE_INSTALL_PREFIX=../install -Disis3Data=/usgs/cpkgs/isis3/data -Disis3TestData=/usgs/cpkgs/isis3/testData ../isis +// set +e +// ninja -j8 && ninja install +// source /usgs/cpkgs/isis3/isis3mgr_scripts/initIsisCmake.sh . +// ctest -V -R _unit_ --timeout 500 +// ctest -V -R _app_ --timeout 500 +// ctest -V -R _module_ --timeout 500 +// """ + } + } + } +} + +nodes["mac1013"] = { + node("mac1013") { + withEnv(["ISISROOT=" + "${workspace}" + "/build/", "ISIS3TESTDATA=/usgs/cpkgs/isis3/testData/", "ISIS3DATA=/usgs/cpkgs/isis3/data/"]) { + stage ("MacOS 10.13 (High Sierra)") { + git branch: 'dev', url: 'https://github.com/USGS-Astrogeology/ISIS3.git' +// sh """ +// git clone https://github.com/abseil/googletest.git gtest +// conda config --set channel_alias http://astro-bin.wr.usgs.gov/conda +// conda config --prepend channels anaconda +// conda config --append channels conda-forge +// conda config --append channels usgs-astrogeology +// conda config --prepend default_channels anaconda // conda env create -n isis3 -f environment.yml // source activate isis3 // mkdir -p ./install ./build && cd build -- GitLab From 3adc5a726d5afc885b61957f2c40d25b0fb5d7cd Mon Sep 17 00:00:00 2001 From: Jesse Mapel Date: Mon, 10 Dec 2018 08:45:30 -0700 Subject: [PATCH 618/620] Merged dev and cleaned up header conflicts --- isis/CMakeLists.txt | 3 +- .../apollo/apps/apollopanstitcher/Trans2d3p.h | 57 ++--- isis/src/base/apps/crop/crop.h | 5 + isis/src/base/apps/smtk/PointPlot.h | 70 +++--- isis/src/base/apps/smtk/Stereo.cpp | 200 ------------------ isis/src/base/apps/smtk/Stereo.h | 74 ------- isis/src/base/apps/stats/main.cpp | 2 +- .../apps/stats/{StatsFunc.cpp => stats.cpp} | 2 +- .../base/apps/stats/{StatsFunc.h => stats.h} | 5 + isis/src/clementine/apps/clem2isis/jpeg_c.h | 4 + isis/src/clementine/apps/clem2isis/pds.h | 4 + .../apps/mrf2pds/ProcessExportMiniRFLroPds.h | 5 + isis/src/mgs/apps/mocuncompress/array.h | 5 + isis/src/mgs/apps/mocuncompress/image_io.h | 5 + isis/src/mgs/apps/mocuncompress/initBlock.cpp | 6 +- .../src/mgs/apps/mocuncompress/invFdct16x16.h | 5 + .../src/mgs/apps/mocuncompress/invFwht16x16.h | 7 +- .../{limits.h => mocuncompresslimits.h} | 4 +- isis/src/mgs/apps/mocuncompress/msdp.h | 5 + .../{StatsFuncTests.cpp => statsTests.cpp} | 16 +- 20 files changed, 132 insertions(+), 352 deletions(-) delete mode 100644 isis/src/base/apps/smtk/Stereo.cpp delete mode 100644 isis/src/base/apps/smtk/Stereo.h rename isis/src/base/apps/stats/{StatsFunc.cpp => stats.cpp} (99%) rename isis/src/base/apps/stats/{StatsFunc.h => stats.h} (90%) rename isis/src/mgs/apps/mocuncompress/{limits.h => mocuncompresslimits.h} (98%) rename isis/tests/{StatsFuncTests.cpp => statsTests.cpp} (95%) diff --git a/isis/CMakeLists.txt b/isis/CMakeLists.txt index 754b19278c..5239c8fdbd 100644 --- a/isis/CMakeLists.txt +++ b/isis/CMakeLists.txt @@ -443,7 +443,8 @@ add_custom_target(docs COMMAND ${CMAKE_COMMAND} # will be executed when running "ninja install" # On a clean build, all files will be copied over. add_custom_target(incs ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp ${CMAKE_BINARY_DIR}/inc) + ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.h ${CMAKE_SOURCE_DIR}/src/*/objs/*/*.hpp + ${CMAKE_SOURCE_DIR}/src/*/apps/*/*.h ${CMAKE_BINARY_DIR}/inc) add_dependencies(isis3 incs) # Add a custom build target to clean out everything that gets added to the source diff --git a/isis/src/apollo/apps/apollopanstitcher/Trans2d3p.h b/isis/src/apollo/apps/apollopanstitcher/Trans2d3p.h index f79883e736..4b6bcbfe97 100644 --- a/isis/src/apollo/apps/apollopanstitcher/Trans2d3p.h +++ b/isis/src/apollo/apps/apollopanstitcher/Trans2d3p.h @@ -1,45 +1,48 @@ +#ifndef trans2d3p_h +#define trans2d3p_h + #include "Cube.h" #include "Transform.h" #include -/** - * @file - * $Revision: 1.7 $ - * $Date: 2005/10/03 22:43:39 $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution +/** + * @file + * $Revision: 1.7 $ + * $Date: 2005/10/03 22:43:39 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ using namespace Isis; -/** +/** * @brief Brief coming soon - * + * * Description coming soon - * + * * @author 2011-09-19 Orrin Thomas - * - * @internal + * + * @internal * @history 2011-09-19 Orrin Thomas - Original version - */ + */ class Trans2d3p : public Transform { -public: +public: Trans2d3p(double theta, double sampOffset, double lineOffset,int samples, int lines) { m_lines = lines; m_samples = samples; @@ -74,3 +77,5 @@ private: int m_lines; int m_samples; }; + +#endif diff --git a/isis/src/base/apps/crop/crop.h b/isis/src/base/apps/crop/crop.h index bbe9fbd549..d6142d72bb 100644 --- a/isis/src/base/apps/crop/crop.h +++ b/isis/src/base/apps/crop/crop.h @@ -1,3 +1,6 @@ +#ifndef crop_h +#define crop_h + #include "Cube.h" #include "ProcessByLine.h" #include "SpecialPixel.h" @@ -11,3 +14,5 @@ #include "UserInterface.h" extern Isis::PvlGroup crop(Isis::UserInterface &ui); + +#endif diff --git a/isis/src/base/apps/smtk/PointPlot.h b/isis/src/base/apps/smtk/PointPlot.h index c8760792bf..09a567efff 100644 --- a/isis/src/base/apps/smtk/PointPlot.h +++ b/isis/src/base/apps/smtk/PointPlot.h @@ -1,28 +1,28 @@ #ifndef PointPlot_h #define PointPlot_h -/** - * @file - * $Revision: 1.1 $ - * $Date: 2009/09/09 23:42:41 $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution +/** + * @file + * $Revision: 1.1 $ + * $Date: 2009/09/09 23:42:41 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html * in a browser or see the Privacy & Disclaimers page on the Isis website, * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ + * http://www.usgs.gov/privacy.html. + */ #include "Camera.h" #include "Stereo.h" @@ -31,20 +31,20 @@ namespace Isis { - /** - * @brief Provide stereo information/data for a point or relationship - * - * This class serves as a functor object to collect points within an ISIS - * output tile, perhaps the most efficient access method to ISIS cubes. It - * will collect pointers to valid SmtkPoints that fall within a the - * boundaries of a tile. It allows for some expansion of the tile is edges - * have a little extra point coverage as lat/lon coordinates from the stereo - * matching is used to compute the output pixel coordinate of the tile. - * + /** + * @brief Provide stereo information/data for a point or relationship + * + * This class serves as a functor object to collect points within an ISIS + * output tile, perhaps the most efficient access method to ISIS cubes. It + * will collect pointers to valid SmtkPoints that fall within a the + * boundaries of a tile. It allows for some expansion of the tile is edges + * have a little extra point coverage as lat/lon coordinates from the stereo + * matching is used to compute the output pixel coordinate of the tile. + * * @author 2009-09-11 Kris Becker * * @internal - */ + */ class PointPlot { public: @@ -52,7 +52,7 @@ namespace Isis { * @brief Construct a PointPlot object */ PointPlot () { } - + /** Construct with a generalized buffer with extents around the buffer */ PointPlot(const Buffer &bmap, const double &extent = 0.0) { m_extent = extent; @@ -86,7 +86,7 @@ namespace Isis { stErr = Null; eigen = Null; if (size() == 0) return (0); - + m_outPnts = 0; for (unsigned i = 0 ; i < m_points.size() ; i++) { SmtkPoint *point(m_points[i]); @@ -98,7 +98,7 @@ namespace Isis { double rhSamp = point->getRight().getSample(); if (rhcam.SetImage(rhSamp, rhLine) && rhcam.InCube()) { double radius, lat, lon, sepang, error; - if (Stereo::Elevation(lhcam, rhcam, radius, lat, lon, sepang, error)) { + if (Stereo::elevation(lhcam, rhcam, radius, lat, lon, sepang, error)) { int index; if (WithinTile(lhcam, lat, lon, radius, dem, index)) { double elevation = radius - lhcam.LocalRadius().meters(); @@ -136,7 +136,7 @@ namespace Isis { } /** Checks a latitude/longitude coordinate if it falls within a buffer */ - bool WithinTile(Camera &cam, const double &latitude, const double &longitude, + bool WithinTile(Camera &cam, const double &latitude, const double &longitude, const double radius, Buffer &obuf, int &index) { if (!(cam.SetUniversalGround(latitude, longitude) && cam.InCube())) { return (false); @@ -147,7 +147,7 @@ namespace Isis { if (!inBuffer(Coordinate(line,samp), 0.5)) { return (false); } - index = obuf.Index(static_cast(samp+0.5), + index = obuf.Index(static_cast(samp+0.5), static_cast(line+0.5),1); return (true); } diff --git a/isis/src/base/apps/smtk/Stereo.cpp b/isis/src/base/apps/smtk/Stereo.cpp deleted file mode 100644 index 5c4beb08bc..0000000000 --- a/isis/src/base/apps/smtk/Stereo.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/** - * @file - * $Revision: 1.1 $ - * $Date: 2009/09/09 23:42:41 $ - - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "Camera.h" -#include "SpecialPixel.h" -#include "Stereo.h" -#include "TProjection.h" - -namespace Isis { - - - bool Stereo::Elevation(Camera &cam1, Camera &cam2, double &radius, - double &latitude, double &longitude, - double &sepang, double &error) { - - // Gut check on input Camera points - radius = latitude = longitude = Isis::Null; - if ( !cam1.HasSurfaceIntersection() ) return (false); - if ( !cam2.HasSurfaceIntersection() ) return (false); - - // Get spacecraft position from target - double TC1[3], TC2[3]; - TargetToSpacecraft(cam1, TC1); - TargetToSpacecraft(cam2, TC2); - - - // Get surface vectors from center of body to surface - double TP1[3], TP2[3]; - TargetToSurface(cam1, TP1); - TargetToSurface(cam2, TP2); - - // Stereo angle - sepang = vsep_c(TC1, TC2) * dpr_c(); - - SpiceDouble CP1[3], CP2[3]; - vsub_c(TC1, TP1, CP1); - vsub_c(TC2, TP2, CP2); - - sepang = vsep_c(CP1, CP2) * dpr_c(); - - double DR1, DR2; - DR1 = vnorm_c(CP1); - DR2 = vnorm_c(CP2); - - vscl_c(1.0/DR1, CP1, CP1); - vscl_c(1.0/DR2, CP2, CP2); - - // Do stereo intersections - double aa = CP2[0]; - double bb = CP2[1]; - double cc = CP2[2]; - double xx = CP1[0]; - double yy = CP1[1]; - double zz = CP1[2]; - - // Vector between both spacecraft - double dd = TC2[0] - TC1[0]; - double ee = TC2[1] - TC1[1]; - double ff = TC2[2] - TC1[2]; - - // Do the stereo intersection - double bzcy = bb*zz - cc*yy; - double cebf = cc*ee - bb*ff; - double cxaz = cc*xx - aa*zz; - double afcd = aa*ff - cc*dd; - double aybx = aa*yy - bb*xx; - double bdae = bb*dd - aa*ee; - - // Get fraction `T' along left vector to "intersection point" - double T=-(bzcy*cebf+cxaz*afcd+aybx*bdae)/ - (bzcy*bzcy+cxaz*cxaz+aybx*aybx); - double lx=TC1[0] + T * CP1[0]; - double ly=TC1[1] + T * CP1[1]; - double lz=TC1[2] + T * CP1[2]; - - // Find the Perp. vector between both lines (at shortest sep.) - double x = TC2[0] - lx; - double y = TC2[1] - ly; - double z = TC2[2] - lz; - - // Find the separation distance - useful later - double rx = y * CP2[2] - CP2[1] * z; - double ry = CP2[0] * z - x * CP2[2]; - double rz = x * CP2[1] - CP2[0] * y; - double dr = std::sqrt(rx*rx+ry*ry+rz*rz); - - // Find position of intersection on lower line - rx = CP1[1] * CP2[2] - CP2[1] * CP1[2]; - ry = CP2[0] * CP1[2] - CP1[0] * CP2[2]; - rz = CP1[0] * CP2[1] - CP2[0] * CP1[1]; - double raa = std::sqrt(rx*rx+ry*ry+rz*rz); - - // Normalize our new Perpendicular vector - rx = rx/raa; - ry = ry/raa; - rz = rz/raa; - - // Get the other intersection position - rx = lx - rx*dr; - ry = ly - ry*dr; - rz = lz - rz*dr; - - // Compute the mid point of the intersection on the planets - // surface - double mx = (lx+rx)/2.0; - double my = (ly+ry)/2.0; - double mz = (lz+rz)/2.0; - Rectangular(mx, my, mz, latitude, longitude, radius); - radius *= 1000.0 ; // convert to meters - error = dr * 1000.0; - return (true); - } - - - void Stereo::Spherical(const double latitude, const double longitude, - const double radius, - double &x, double &y, double &z) { - SpiceDouble rec[3]; - latrec_c(radius/1000.0, longitude*rpd_c(), latitude*rpd_c(), &rec[0]); - x = rec[0]; - y = rec[1]; - z = rec[2]; - return; - } - - void Stereo::Rectangular(const double x, const double y, const double z, - double &latitude, double &longitude, - double &radius) { - SpiceDouble rec[3]; - rec[0] = x; - rec[1] = y; - rec[2] = z; - reclat_c(&rec[0], &radius, &longitude, &latitude); - longitude *= dpr_c(); - latitude *= dpr_c(); - longitude = TProjection::To360Domain(longitude); - return; - return; - } - - std::vector Stereo::Array2StdVec(const double d[3]) { - std::vector v; - for ( int i = 0 ; i < 3 ; i++ ) { - v.push_back(d[i]); - } - return (v); - } - - double *Stereo::StdVec2Array(const std::vector &v, double *d) { - if ( d == NULL ) { - d = new double[v.size()]; - } - - for ( unsigned int i = 0 ; i < v.size() ; i++ ) { - d[i] = v[i]; - } - return (d); - } - - void Stereo::TargetToSpacecraft(Camera &camera, double TP[3]) { - camera.instrumentPosition(TP); - return; - } - - void Stereo::TargetToSurface(Camera &camera, double TC[3]) { - camera.Coordinate(TC); - return; - } - -} diff --git a/isis/src/base/apps/smtk/Stereo.h b/isis/src/base/apps/smtk/Stereo.h deleted file mode 100644 index 64a4e44d6c..0000000000 --- a/isis/src/base/apps/smtk/Stereo.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef Stereo_h -#define Stereo_h - -/** - * @file - * $Revision: 1.1 $ - * $Date: 2009/09/09 23:42:41 $ - * - * Unless noted otherwise, the portions of Isis written by the USGS are - * public domain. See individual third-party library and package descriptions - * for intellectual property information, user agreements, and related - * information. - * - * Although Isis has been used by the USGS, no warranty, expressed or - * implied, is made by the USGS as to the accuracy and functioning of such - * software and related material nor shall the fact of distribution - * constitute any such warranty, and no responsibility is assumed by the - * USGS in connection therewith. - * - * For additional information, launch - * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html - * in a browser or see the Privacy & Disclaimers page on the Isis website, - * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on - * http://www.usgs.gov/privacy.html. - */ - -#include "Camera.h" - -namespace Isis { - - /** - * @brief Provide stereo information/data for a point or relationship - * - * @author 2009-09-11 Kris Becker - * - * @internal - * @history 2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis - * coding standards. References #972. - * @history 2012-12-06 Debbie A. Cook - Changed to use TProjection instead of Projection. - * References #775. - */ - class Stereo { - public: - - /** - * @brief Construct a Stereo object - */ - Stereo () { } - - /** Destructor for Stereo */ - virtual ~Stereo() {} - - static bool Elevation(Camera &cam1, Camera &cam2, double &radius, - double &latitude, double &longitude, - double &sepang, double &error); - - static void Spherical(const double latitude, const double longitude, - const double radius, double &x, double &y, - double &z); - - static void Rectangular(const double x, const double y, const double z, - double &latitude, double &longitude, - double &radius); - - private: - static std::vector Array2StdVec(const double d[3]); - static double *StdVec2Array(const std::vector &v, double *d = 0); - static void TargetToSpacecraft(Camera &camera, double TP[3]); - static void TargetToSurface(Camera &camera, double TC[3]); - - }; -}; - -#endif diff --git a/isis/src/base/apps/stats/main.cpp b/isis/src/base/apps/stats/main.cpp index 1e20a388a6..150cec80e5 100644 --- a/isis/src/base/apps/stats/main.cpp +++ b/isis/src/base/apps/stats/main.cpp @@ -1,7 +1,7 @@ #include "Isis.h" #include "UserInterface.h" -#include "StatsFunc.h" +#include "stats.h" using namespace Isis; diff --git a/isis/src/base/apps/stats/StatsFunc.cpp b/isis/src/base/apps/stats/stats.cpp similarity index 99% rename from isis/src/base/apps/stats/StatsFunc.cpp rename to isis/src/base/apps/stats/stats.cpp index 59ddac7e5a..4c94087bf2 100644 --- a/isis/src/base/apps/stats/StatsFunc.cpp +++ b/isis/src/base/apps/stats/stats.cpp @@ -1,4 +1,4 @@ -#include "StatsFunc.h" +#include "stats.h" #include #include diff --git a/isis/src/base/apps/stats/StatsFunc.h b/isis/src/base/apps/stats/stats.h similarity index 90% rename from isis/src/base/apps/stats/StatsFunc.h rename to isis/src/base/apps/stats/stats.h index d1d075caa2..f751914004 100644 --- a/isis/src/base/apps/stats/StatsFunc.h +++ b/isis/src/base/apps/stats/stats.h @@ -1,3 +1,6 @@ +#ifndef stats_h +#define stats_h + #include #include @@ -17,3 +20,5 @@ namespace Isis { bool writeHeader, std::ostream *stream); } + +#endif diff --git a/isis/src/clementine/apps/clem2isis/jpeg_c.h b/isis/src/clementine/apps/clem2isis/jpeg_c.h index e6a54bdfc1..1aeaeb79db 100644 --- a/isis/src/clementine/apps/clem2isis/jpeg_c.h +++ b/isis/src/clementine/apps/clem2isis/jpeg_c.h @@ -1,3 +1,5 @@ +#ifndef jpeg_c_h +#define jpeg_c_h /* Structure Definitions */ enum FmodeDef { INPUT, OUTPUT }; @@ -57,3 +59,5 @@ extern void inithuffcode(); extern void encode(short *, BitStream *); extern void decode(short *, BitStream *); extern void decomp(BitStream *bs, CHARH *Image, long rows, long cols); + +#endif diff --git a/isis/src/clementine/apps/clem2isis/pds.h b/isis/src/clementine/apps/clem2isis/pds.h index 42f8d4adf4..79d316f7d4 100644 --- a/isis/src/clementine/apps/clem2isis/pds.h +++ b/isis/src/clementine/apps/clem2isis/pds.h @@ -1,3 +1,5 @@ +#ifndef pds_h +#define pds_h #if defined(__BORLANDC__) && !defined(__WIN32__) #define CHARH unsigned char huge @@ -19,3 +21,5 @@ typedef struct { //extern FILE *qparm; //removed qparm references BMG 2006-07-18 extern PDSINFO *PDSR(char *fname, long *rows, long *cols); + +#endif diff --git a/isis/src/lro/apps/mrf2pds/ProcessExportMiniRFLroPds.h b/isis/src/lro/apps/mrf2pds/ProcessExportMiniRFLroPds.h index c6d8096114..ec6efad39a 100644 --- a/isis/src/lro/apps/mrf2pds/ProcessExportMiniRFLroPds.h +++ b/isis/src/lro/apps/mrf2pds/ProcessExportMiniRFLroPds.h @@ -1,3 +1,6 @@ +#ifndef processexportminirflropds_h +#define processexportminirflropds_h + /** * Unless noted otherwise, the portions of Isis written by the * USGS are public domain. See individual third-party library @@ -49,3 +52,5 @@ namespace Isis { virtual void CreateImageLabel(void); }; } + +#endif diff --git a/isis/src/mgs/apps/mocuncompress/array.h b/isis/src/mgs/apps/mocuncompress/array.h index 52089c5838..c9acb52b50 100644 --- a/isis/src/mgs/apps/mocuncompress/array.h +++ b/isis/src/mgs/apps/mocuncompress/array.h @@ -1,3 +1,6 @@ +#ifndef mocuncompress_array_h +#define mocuncompress_array_h + /* NOTICE @@ -52,3 +55,5 @@ extern int array_len(Array *a); extern char *array_data(Array *a); extern void array_free(Array *a); extern int array_slot_delete(Array *a, int slot, int len); + +#endif diff --git a/isis/src/mgs/apps/mocuncompress/image_io.h b/isis/src/mgs/apps/mocuncompress/image_io.h index f12dce46a1..34afca0f09 100644 --- a/isis/src/mgs/apps/mocuncompress/image_io.h +++ b/isis/src/mgs/apps/mocuncompress/image_io.h @@ -1,3 +1,6 @@ +#ifndef mocuncompress_image_io_h +#define mocuncompress_image_io_h + /* NOTICE @@ -48,3 +51,5 @@ struct image_header { #define IMAGE_HEADER_LENGTH 1024 #define IMAGE_LABEL_OFFSET 24 #define MAGIC 1659 + +#endif diff --git a/isis/src/mgs/apps/mocuncompress/initBlock.cpp b/isis/src/mgs/apps/mocuncompress/initBlock.cpp index a644632c65..72021fe9ba 100644 --- a/isis/src/mgs/apps/mocuncompress/initBlock.cpp +++ b/isis/src/mgs/apps/mocuncompress/initBlock.cpp @@ -3,7 +3,7 @@ ================================================== 2018-OCT-19 Kaitlyn Lee - US Geological Survey -Removed the register keyword because it is deprecated in C++17. +Removed the register keyword because it is deprecated in C++17. ================================================== NOTICE @@ -56,7 +56,7 @@ Copyright (C) 1999 Malin Space Science Systems. All Rights Reserved. #include #include "fs.h" -#include "limits.h" +#include "mocuncompresslimits.h" #include "encodeCoefs.static.h" #include "initBlock.h" @@ -91,7 +91,7 @@ uint32 i; static int compare(const void *v1, const void *v2) { BITTREE *e1 = (BITTREE *)v1; - BITTREE *e2 = (BITTREE *)v2; + BITTREE *e2 = (BITTREE *)v2; uint32 c1, c2; c1 = e1->code; c2 = e2->code; diff --git a/isis/src/mgs/apps/mocuncompress/invFdct16x16.h b/isis/src/mgs/apps/mocuncompress/invFdct16x16.h index 33dc04c50a..8c0551f658 100644 --- a/isis/src/mgs/apps/mocuncompress/invFdct16x16.h +++ b/isis/src/mgs/apps/mocuncompress/invFdct16x16.h @@ -1,3 +1,6 @@ +#ifndef mocuncompress_invfdct16x16_h +#define mocuncompress_invfdct16x16_h + /* NOTICE @@ -47,3 +50,5 @@ SCCSID @(#)invFdct16x16.h 1.1 10/04/99 extern void invFdct16x16(int16 *in, int16 *out); #endif + +#endif diff --git a/isis/src/mgs/apps/mocuncompress/invFwht16x16.h b/isis/src/mgs/apps/mocuncompress/invFwht16x16.h index a58fe392d9..b069258513 100644 --- a/isis/src/mgs/apps/mocuncompress/invFwht16x16.h +++ b/isis/src/mgs/apps/mocuncompress/invFwht16x16.h @@ -1,9 +1,12 @@ +#ifndef mocuncompress_invfwht16x16_h +#define mocuncompress_invfwht16x16_h + /* ================================================== 2018-OCT-19 Kaitlyn Lee - US Geological Survey -Removed the register keyword because it is deprecated in C++17. +Removed the register keyword because it is deprecated in C++17. ================================================== NOTICE @@ -54,3 +57,5 @@ SCCSID @(#)invFwht16x16.h 1.1 10/04/99 extern void invFwht16x16(int16 *in, int16 *out); #endif + +#endif diff --git a/isis/src/mgs/apps/mocuncompress/limits.h b/isis/src/mgs/apps/mocuncompress/mocuncompresslimits.h similarity index 98% rename from isis/src/mgs/apps/mocuncompress/limits.h rename to isis/src/mgs/apps/mocuncompress/mocuncompresslimits.h index 1f8f19b16e..69474bb754 100644 --- a/isis/src/mgs/apps/mocuncompress/limits.h +++ b/isis/src/mgs/apps/mocuncompress/mocuncompresslimits.h @@ -40,9 +40,9 @@ SCCSID @(#)limits.h 1.1 10/04/99 */ /* SCCShid @(#)limits.h (limits.h) 1.4 */ -#ifndef limits_h +#ifndef mocuncompress_limits_h -#define limits_h +#define mocuncompress_limits_h /* * The transform block size. IMPORTANT NOTE: If changed to another number diff --git a/isis/src/mgs/apps/mocuncompress/msdp.h b/isis/src/mgs/apps/mocuncompress/msdp.h index 241b934fe3..5a9464b018 100644 --- a/isis/src/mgs/apps/mocuncompress/msdp.h +++ b/isis/src/mgs/apps/mocuncompress/msdp.h @@ -1,3 +1,6 @@ +#ifndef mocuncompress_msdp_h +#define mocuncompress_msdp_h + /* NOTICE @@ -101,3 +104,5 @@ struct msdp_header { #define BYTE3(i) (((i)&0xff000000)>>24) #define STUFFSHORT(p,v) ((p)[0] = (v)&0xff, (p)[1] = (v)>>8) + +#endif diff --git a/isis/tests/StatsFuncTests.cpp b/isis/tests/statsTests.cpp similarity index 95% rename from isis/tests/StatsFuncTests.cpp rename to isis/tests/statsTests.cpp index 52128ac469..09edc877c7 100644 --- a/isis/tests/StatsFuncTests.cpp +++ b/isis/tests/statsTests.cpp @@ -1,4 +1,4 @@ -#include "StatsFunc.h" +#include "stats.h" #include @@ -23,7 +23,7 @@ class MockCube : public Cube { QString msg)); }; -class StatsFunc_FlatFileTest : public ::testing::Test { +class stats_FlatFileTest : public ::testing::Test { protected: Pvl testPvl; @@ -41,7 +41,7 @@ class StatsFunc_FlatFileTest : public ::testing::Test { } }; -class StatsFunc_MockHist : public ::testing::Test { +class stats_MockHist : public ::testing::Test { protected: MockCube *mockCube; @@ -92,7 +92,7 @@ class StatsFunc_MockHist : public ::testing::Test { }; -TEST_F(StatsFunc_MockHist, TestStats) { +TEST_F(stats_MockHist, TestStats) { Pvl statsPvl = stats( mockCube, Isis::ValidMinimum, @@ -136,7 +136,7 @@ TEST_F(StatsFunc_MockHist, TestStats) { EXPECT_EQ(1, (int) (band2Stats.findKeyword("HrsPixels"))); } -TEST(StatsFunc, ValidMinimum) { +TEST(stats, ValidMinimum) { Histogram *testStats = new Histogram(-1000,1000); MockCube *mockCube = new MockCube(); @@ -163,7 +163,7 @@ TEST(StatsFunc, ValidMinimum) { // The histogram will be cleaned up in the stats function } -TEST(StatsFunc, ValidMaximum) { +TEST(stats, ValidMaximum) { Histogram *testStats = new Histogram(-1000,1000); MockCube *mockCube = new MockCube(); @@ -190,7 +190,7 @@ TEST(StatsFunc, ValidMaximum) { // The histogram will be cleaned up in the stats function } -TEST_F(StatsFunc_FlatFileTest, FlatFile) { +TEST_F(stats_FlatFileTest, FlatFile) { std::ostringstream *testStream = new std::ostringstream(); writeStatsStream(testPvl, false, testStream); EXPECT_EQ(testStream->str(), "0.0,Hello\nstats here,stats here\n"); @@ -199,7 +199,7 @@ TEST_F(StatsFunc_FlatFileTest, FlatFile) { testStream = nullptr; } -TEST_F(StatsFunc_FlatFileTest, FlatFileHeader) { +TEST_F(stats_FlatFileTest, FlatFileHeader) { std::ostringstream *testStream = new std::ostringstream(); writeStatsStream(testPvl, true, testStream); EXPECT_EQ(testStream->str(), "NumberKey,StringKey\n0.0,Hello\nstats here,stats here\n"); -- GitLab From c8dc71525e6b5d46ee357023db22222f60391172 Mon Sep 17 00:00:00 2001 From: jlaura Date: Mon, 10 Dec 2018 06:14:15 -0700 Subject: [PATCH 619/620] Update for #619. --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e8abd6034e..63686ef867 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -23,6 +23,7 @@ - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) +- [ ] Documentation change (update to the documentation; no code change) - [ ] Breaking change (fix or feature that would cause existing functionality to change) ## Checklist: -- GitLab From 625006337a53a9db35adcce22a2507f3f306b4ac Mon Sep 17 00:00:00 2001 From: Kristin Date: Mon, 17 Dec 2018 09:49:33 -0700 Subject: [PATCH 620/620] Cleanup of merge of virtis changes --- .../base/objs/SpiceRotation/SpiceRotation.cpp | 18 +++++++----------- .../base/objs/SpiceRotation/SpiceRotation.h | 2 +- isis/src/rosetta/apps/rosvirtis2isis/main.cpp | 3 +-- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp b/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp index d3b821508f..3868666681 100644 --- a/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp +++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.cpp @@ -306,7 +306,7 @@ namespace Isis { * @param status The DownsizeStatus enumeration value. */ void SpiceRotation::MinimizeCache(DownsizeStatus status) { - p_minimizeCache = status; + p_minimizeCache = status; } @@ -607,7 +607,7 @@ namespace Isis { if (p_degree > 0 && p_cacheAv.size() > 1) p_cacheAv.clear(); // Load the time cache first - p_minimizeCache = No; + p_minimizeCache = No; LoadTimeCache(); if (p_fullCacheSize > 1) { @@ -635,7 +635,7 @@ namespace Isis { p_cacheAv.clear(); // Reload the time cache first - p_minimizeCache = No; + p_minimizeCache = No; LoadTimeCache(); for (std::vector::size_type pos = 0; pos < maxSize; pos++) { @@ -714,8 +714,7 @@ namespace Isis { LineCache(tableName); //std::cout << "Full cache size is " << p_cache.size() << endl; - - p_minimizeCache = Yes; + p_minimizeCache = Yes; LoadTimeCache(); //std::cout << "Minimized cache size is " << p_cache.size() << endl; @@ -1931,7 +1930,6 @@ namespace Isis { return; } - // NEW: sets the cache time void SpiceRotation::SetCacheTime(std::vector cacheTime) { // Do not reset the cache times if they are already loaded. if (p_cacheTime.size() <= 0) { @@ -2303,7 +2301,7 @@ namespace Isis { ktotal_c("ck", (SpiceInt *) &count); // Downsize the loaded cache - if ((p_source == Memcache) && p_minimizeCache == Yes) { + if ((p_source == Memcache) && p_minimizeCache == Yes) { // Multiple ck case, type 5 ck case, or PolyFunctionOverSpice // final step -- downsize loaded cache and reload @@ -2486,13 +2484,11 @@ namespace Isis { // Load times according to cache size (body rotations) -- handle first round of type 5 ck case // and multiple ck case --Load a time for every line scan line and downsize later if (! (timeLoaded || (p_cacheTime.size() > 1))) { - double cacheSlope = 0.0; + double cacheSlope = 0.0; if (p_fullCacheSize > 1) cacheSlope = (p_fullCacheEndTime - p_fullCacheStartTime) / (double)(p_fullCacheSize - 1); for (int i = 0; i < p_fullCacheSize; i++) p_cacheTime.push_back(p_fullCacheStartTime + (double) i * cacheSlope); - // could try to change the kernels: type, resample, something else? check on type 2 or 3, concerned about interpolation - // it's already type 2 or 3... if (p_source == Nadir) { p_minimizeCache = No; } @@ -3103,7 +3099,7 @@ namespace Isis { (p_cacheTime[cacheIndex+1] - p_cacheTime[cacheIndex]); /* Quaternion Q2 (p_cache[cacheIndex+1]); Quaternion Q1 (p_cache[cacheIndex]);*/ - std::vector CJ2(p_cache[cacheIndex+1]); + std::vector CJ2(p_cache[cacheIndex+1]); std::vector CJ1(p_cache[cacheIndex]); SpiceDouble J2J1[3][3]; mtxm_c((SpiceDouble( *)[3]) &CJ2[0], (SpiceDouble( *)[3]) &CJ1[0], J2J1); diff --git a/isis/src/base/objs/SpiceRotation/SpiceRotation.h b/isis/src/base/objs/SpiceRotation/SpiceRotation.h index 3d53c04b2f..f7f2fecc83 100644 --- a/isis/src/base/objs/SpiceRotation/SpiceRotation.h +++ b/isis/src/base/objs/SpiceRotation/SpiceRotation.h @@ -280,7 +280,7 @@ namespace Isis { enum DownsizeStatus { Yes, //!< Downsize the cache Done, //!< Cache is downsized - No, //!< Do not downsize the cache + No //!< Do not downsize the cache }; /** diff --git a/isis/src/rosetta/apps/rosvirtis2isis/main.cpp b/isis/src/rosetta/apps/rosvirtis2isis/main.cpp index d471ed55bd..d0c95abc25 100644 --- a/isis/src/rosetta/apps/rosvirtis2isis/main.cpp +++ b/isis/src/rosetta/apps/rosvirtis2isis/main.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include @@ -410,7 +409,7 @@ void IsisMain () scs2e_c( (SpiceInt) -226, stopScet.toLatin1().data(), &etEnd); PvlKeyword &frameParam = inst["FrameParameter"]; - exposureTime = toDouble(frameParam[0]); + double exposureTime = toDouble(frameParam[0]); QString startTime = iTime(etStart-exposureTime).UTC(); QString stopTime = iTime(etEnd-exposureTime).UTC(); -- GitLab
    - The GainChannelNormalize module in hicalbeta uses the + The GainChannelNormalize module in hical uses the bin, TDI, CCD, and Channel dependent coefficients described below in the equation "GCN = GCNc * 128 / (TDI * bin^2)" where GCNc is the normalization coefficient @@ -1270,7 +1270,7 @@ End_Object
    Specifies the filter dependent gain correction factor. Note that these values are found in the BG, RED, and IR - profiles and hicalbeta relies on the profile + profiles and hical relies on the profile options to load the proper parameter at runtime.