This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository otb.
commit a778cec3b5520d1f3bab4cf0f92b6a5845893080 Author: Bas Couwenberg <[email protected]> Date: Sat Oct 28 10:11:48 2017 +0200 New upstream version 6.2.0+dfsg --- CMake/OTBApplicationMacros.cmake | 161 ++++++++++++--------- CMake/OTBModuleExternal.cmake | 3 + CMake/OTBStandaloneModuleMacros.cmake | 2 +- CMake/otbcli_app.bat.in | 18 --- CMake/otbcli_app.sh.in | 20 --- CMake/otbgui_app.bat.in | 18 --- CMake/otbgui_app.sh.in | 20 --- .../OSSIMAdapters/src/otbMapProjectionAdapter.cxx | 11 +- .../include/otbTrainImagesBase.txx | 2 +- .../app/otbHyperspectralUnmixing.cxx | 2 +- .../Applications/AppImageUtils/app/otbConvert.cxx | 17 ++- .../AppMathParserX/app/otbBandMathX.cxx | 6 +- .../app/otbOpticalCalibration.cxx | 6 +- .../AppSegmentation/app/otbLargeScaleMeanShift.cxx | 2 +- .../AppStereo/app/otbBlockMatching.cxx | 2 +- .../test/otbGenericRSTransformGenericTest.cxx | 2 +- .../Statistics/include/otbPatternSampler.h | 4 +- Modules/IO/TestKernel/src/otbTestDriver.cxx | 2 +- .../RCC8/test/otbImageToImageRCC8Calculator.cxx | 2 +- Modules/Radiometry/Simulation/src/otbSailModel.cxx | 2 +- .../Monteverdi/src/mvdPreferencesDialog.ui | 6 + .../MonteverdiGui/include/mvdImageViewWidget.h | 2 +- .../MonteverdiGui/include/mvdProjectionBarWidget.h | 2 +- .../include/otbWrapperApplication.h | 4 +- .../include/otbWrapperCompositeApplication.h | 2 +- .../include/otbWrapperProxyParameter.h | 2 +- .../src/otbWrapperApplication.cxx | 4 + .../src/otbWrapperCommandLineLauncher.cxx | 20 ++- Modules/Wrappers/QtWidget/src/itkQtProgressBar.cxx | 19 ++- .../QtWidget/src/otbApplicationLauncherQt.cxx | 2 +- Packaging/CMakeLists.txt | 9 +- Packaging/Files/selftester.sh | 2 +- Packaging/makeself/README.md | 2 +- Packaging/post_install.cmake | 52 +++++++ RELEASE_NOTES.txt | 10 +- i18n/fr_FR.ts | 4 + 36 files changed, 245 insertions(+), 199 deletions(-) diff --git a/CMake/OTBApplicationMacros.cmake b/CMake/OTBApplicationMacros.cmake index d354b4c..49081c7 100644 --- a/CMake/OTBApplicationMacros.cmake +++ b/CMake/OTBApplicationMacros.cmake @@ -67,75 +67,51 @@ macro(otb_create_application) endif() else() install(TARGETS ${APPLICATION_TARGET_NAME} - LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib + LIBRARY DESTINATION lib COMPONENT RuntimeLibraries) endif() - # Generate a quickstart script in the build dir - #if (NOT WIN32) - - # What is the path to the applications - # a MODULE target is always treated as LIBRARY - get_target_property(APPLICATION_BINARY_PATH ${APPLICATION_TARGET_NAME} LIBRARY_OUTPUT_DIRECTORY) - - if (NOT APPLICATION_BINARY_PATH) - set(APPLICATION_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR}) - endif() - - if (WIN32) - set(SCRIPT_CLI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbcli_app.bat.in) - set(SCRIPT_CLI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli_${APPLICATION_NAME}.bat) - set(SCRIPT_CLI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbcli_${APPLICATION_NAME}.bat) - else() - set(SCRIPT_CLI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbcli_app.sh.in) - set(SCRIPT_CLI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli_${APPLICATION_NAME}) - set(SCRIPT_CLI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbcli_${APPLICATION_NAME}) - endif() - - if (EXISTS ${SCRIPT_CLI_SOURCE}) - # Generate a script in the build dir, next to the cli launcher - configure_file( ${SCRIPT_CLI_SOURCE} - ${SCRIPT_CLI_INTERMEDIATE} - @ONLY ) - - # Copy it next to the application shared lib, and give executable rights - file(COPY ${SCRIPT_CLI_INTERMEDIATE} - DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - - # Install a version of this script if we are inside the OTB build - install(PROGRAMS ${SCRIPT_CLI_INSTALLABLE} - DESTINATION ${OTB_INSTALL_RUNTIME_DIR} - COMPONENT Runtime) - endif() - - if (WIN32) - set(SCRIPT_GUI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbgui_app.bat.in) - set(SCRIPT_GUI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui_${APPLICATION_NAME}.bat) - set(SCRIPT_GUI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbgui_${APPLICATION_NAME}.bat) - else() - set(SCRIPT_GUI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbgui_app.sh.in) - set(SCRIPT_GUI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui_${APPLICATION_NAME}) - set(SCRIPT_GUI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbgui_${APPLICATION_NAME}) - endif() - - if (EXISTS ${SCRIPT_GUI_SOURCE}) - # Generate a script in the build dir, next to the cli launcher - configure_file( ${SCRIPT_GUI_SOURCE} - ${SCRIPT_GUI_INTERMEDIATE} - @ONLY ) - - # Copy it next to the application shared lib, and give executable rights - file(COPY ${SCRIPT_GUI_INTERMEDIATE} - DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - - # Install a version of this script if we are inside the OTB build - install(PROGRAMS ${SCRIPT_GUI_INSTALLABLE} - DESTINATION ${OTB_INSTALL_RUNTIME_DIR} - COMPONENT Runtime) - endif() - #endif() + # What is the path to the applications + # a MODULE target is always treated as LIBRARY + get_target_property(APPLICATION_BINARY_PATH ${APPLICATION_TARGET_NAME} LIBRARY_OUTPUT_DIRECTORY) + + if (NOT APPLICATION_BINARY_PATH) + set(APPLICATION_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + if(CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(_script_output_dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + else() + set(_script_output_dir ${CMAKE_BINARY_DIR}/bin) + endif() + if(OTB_INSTALL_RUNTIME_DIR) + set(_script_install_dir ${OTB_INSTALL_RUNTIME_DIR}) + else() + set(_script_install_dir bin) + endif() + set(INTERMEDIATE_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) + set(SCRIPT_EXT "") + if(WIN32) + set(SCRIPT_EXT ".bat") + endif() + + # ----- Create and install launcher scripts ------ + foreach(type CLI GUI) + string(TOLOWER "${type}" type_lower) + set(SCRIPT_NAME otb${type_lower}_${APPLICATION_NAME}${SCRIPT_EXT}) + otb_write_app_launcher( + NAME ${APPLICATION_NAME} + OUTPUT ${INTERMEDIATE_DIR}/${SCRIPT_NAME} + TYPE ${type}) + # Copy it next to the application shared lib, and give executable rights + file(COPY ${INTERMEDIATE_DIR}/${SCRIPT_NAME} + DESTINATION ${_script_output_dir} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + # Install a version of this script if we are inside the OTB build + install(PROGRAMS ${_script_output_dir}/${SCRIPT_NAME} + DESTINATION ${_script_install_dir} + COMPONENT Runtime) + endforeach() list(APPEND OTB_APPLICATIONS_NAME_LIST ${APPLICATION_NAME}) list(REMOVE_DUPLICATES OTB_APPLICATIONS_NAME_LIST) @@ -170,3 +146,56 @@ macro(otb_test_application) -testenv ${TESTAPPLICATION_TESTENVOPTIONS}) endif() endmacro() + +macro(otb_write_app_launcher) + cmake_parse_arguments(APPLAUNCHER "" "NAME;OUTPUT;TYPE" "" ${ARGN} ) + if("${APPLAUNCHER_TYPE}" STREQUAL "CLI") + set(_launcher_type "otbcli") + elseif("${APPLAUNCHER_TYPE}" STREQUAL "GUI") + set(_launcher_type "otbgui") + else() + message(FATAL_ERROR "Unknown launcher type : ${APPLAUNCHER_TYPE}, only support CLI and GUI") + endif() + + if(WIN32) + # Launcher script in Batch format + file(WRITE "${APPLAUNCHER_OUTPUT}" +"@echo off +:: +:: Autogenerated by OTB installation process +:: DO NOT MODIFY +:: +set CURRENT_SCRIPT_DIR=%~dp0 +if exist %CURRENT_SCRIPT_DIR%${_launcher_type}.bat ( + :: Prefer using the launcher inside the script dir + set OTB_LAUNCHER=%CURRENT_SCRIPT_DIR%${_launcher_type}.bat +) else ( + :: Use the one from the PATH + set OTB_LAUNCHER=${_launcher_type}.bat +) + +:: start the application +%OTB_LAUNCHER% ${APPLAUNCHER_NAME} %* +") + else() + # Launcher script in Shell format + file(WRITE "${APPLAUNCHER_OUTPUT}" +"#!/bin/sh +# +# Autogenerated by OTB installation process +# DO NOT MODIFY +# +CURRENT_SCRIPT_DIR=$(dirname \"\$0\") +if [ -e \"\$CURRENT_SCRIPT_DIR/${_launcher_type}\" ] ; then + # Prefer using the launcher inside the script dir + OTB_LAUNCHER=$CURRENT_SCRIPT_DIR/${_launcher_type} +else + # Use the one from the PATH + OTB_LAUNCHER=${_launcher_type} +fi + +# start the application +\$OTB_LAUNCHER ${APPLAUNCHER_NAME} \"$@\" +") + endif() +endmacro() diff --git a/CMake/OTBModuleExternal.cmake b/CMake/OTBModuleExternal.cmake index 8fdf276..75ce8c2 100644 --- a/CMake/OTBModuleExternal.cmake +++ b/CMake/OTBModuleExternal.cmake @@ -76,6 +76,9 @@ else() if(NOT OTB_INSTALL_PACKAGE_DIR) set(OTB_INSTALL_PACKAGE_DIR "lib/cmake/OTB-${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}") endif() + if(NOT OTB_INSTALL_APP_DIR) + set(OTB_INSTALL_APP_DIR lib/otb/applications) + endif() # Use OTB's flags. set(CMAKE_C_FLAGS "${OTB_REQUIRED_C_FLAGS} ${CMAKE_C_FLAGS}") diff --git a/CMake/OTBStandaloneModuleMacros.cmake b/CMake/OTBStandaloneModuleMacros.cmake index 0ae7355..b82b04c 100644 --- a/CMake/OTBStandaloneModuleMacros.cmake +++ b/CMake/OTBStandaloneModuleMacros.cmake @@ -262,7 +262,7 @@ macro(otb_module_impl) set(OTBAPP_BASELINE ${OTB_DATA_ROOT}/Baseline/OTB-Applications/Images) set(OTBAPP_BASELINE_FILES ${OTB_DATA_ROOT}/Baseline/OTB-Applications/Files) - if(${BUILD_TESTING}) + if(BUILD_TESTING) enable_testing() endif() diff --git a/CMake/otbcli_app.bat.in b/CMake/otbcli_app.bat.in deleted file mode 100644 index e4af53d..0000000 --- a/CMake/otbcli_app.bat.in +++ /dev/null @@ -1,18 +0,0 @@ -@echo off -:: -:: Autogenerated by OTB installation process -:: DO NOT MODIFY -:: - -set CURRENT_SCRIPT_DIR=%~dp0 - -if exist %CURRENT_SCRIPT_DIR%otbcli.bat ( - :: Prefer using the launcher inside the script dir - set OTB_CLI_LAUNCHER=%CURRENT_SCRIPT_DIR%otbcli.bat -) else ( - :: Use the one from the PATH - set OTB_CLI_LAUNCHER=otbcli.bat -) - -:: start the application -%OTB_CLI_LAUNCHER% @APPLICATION_NAME@ %* diff --git a/CMake/otbcli_app.sh.in b/CMake/otbcli_app.sh.in deleted file mode 100644 index c073ae1..0000000 --- a/CMake/otbcli_app.sh.in +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# -# Autogenerated by OTB installation process -# DO NOT MODIFY -# - -CURRENT_SCRIPT_DIR=$(dirname "$0") - -if [ -e "$CURRENT_SCRIPT_DIR/otbcli" ] -then - # Prefer using the launcher inside the script dir - OTB_CLI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbcli -else - # Use the one from the PATH - OTB_CLI_LAUNCHER=otbcli -fi - -# start the application -$OTB_CLI_LAUNCHER @APPLICATION_NAME@ "$@" diff --git a/CMake/otbgui_app.bat.in b/CMake/otbgui_app.bat.in deleted file mode 100644 index 5752728..0000000 --- a/CMake/otbgui_app.bat.in +++ /dev/null @@ -1,18 +0,0 @@ -@echo off -:: -:: Autogenerated by OTB installation process -:: DO NOT MODIFY -:: - -set CURRENT_SCRIPT_DIR=%~dp0 - -if exist %CURRENT_SCRIPT_DIR%otbgui.bat ( - :: Prefer using the launcher inside the script dir - set OTB_GUI_LAUNCHER=%CURRENT_SCRIPT_DIR%otbgui.bat -) else ( - :: Use the one from the PATH - set OTB_GUI_LAUNCHER=otbgui.bat -) - -:: start the application -%OTB_GUI_LAUNCHER% @APPLICATION_NAME@ %* diff --git a/CMake/otbgui_app.sh.in b/CMake/otbgui_app.sh.in deleted file mode 100644 index 7243475..0000000 --- a/CMake/otbgui_app.sh.in +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# -# Autogenerated by OTB installation process -# DO NOT MODIFY -# - -CURRENT_SCRIPT_DIR=$(dirname "$0") - -if [ -e "$CURRENT_SCRIPT_DIR/otbgui" ] -then - # Prefer using the launcher inside the script dir - OTB_GUI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbgui -else - # Use the one from the PATH - OTB_GUI_LAUNCHER=otbgui -fi - -# start the application -$OTB_GUI_LAUNCHER @APPLICATION_NAME@ "$@" diff --git a/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx index cf7fe71..5478525 100644 --- a/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx +++ b/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx @@ -195,9 +195,16 @@ std::string MapProjectionAdapter::GetParameter(const std::string& key) const if (projectionName.compare("ossimTransMercatorProjection") == 0) { const ossimTransMercatorProjection* tmProjection = dynamic_cast<const ossimTransMercatorProjection*>(this->GetMapProjection()); - if (key.compare("ScaleFactor") == 0) + if (!tmProjection) { - return Utils::ConvertToString(tmProjection->getScaleFactor()); + itkExceptionMacro("Error casting object to ossimTransMercatorProjection."); + } + else + { + if (key.compare("ScaleFactor") == 0) + { + return Utils::ConvertToString(tmProjection->getScaleFactor()); + } } } diff --git a/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx b/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx index 325d3b9..a646cea 100644 --- a/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx +++ b/Modules/Applications/AppClassification/include/otbTrainImagesBase.txx @@ -128,7 +128,7 @@ void TrainImagesBase::InitClassification() AddApplication( "TrainVectorClassifier", "training", "Model training" ); AddParameter( ParameterType_InputVectorDataList, "io.valid", "Validation Vector Data List" ); - SetParameterDescription( "io.valid", "A list of vector data to select the training samples." ); + SetParameterDescription( "io.valid", "A list of vector data to select the validation samples." ); MandatoryOff( "io.valid" ); ShareClassificationParams(); diff --git a/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx b/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx index 3ed9b7c..8d51046 100644 --- a/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx +++ b/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx @@ -103,7 +103,7 @@ private: "spectrum associated with each pixel is a linear combination of pure" "materials in the recovery area, commonly known as endmembers. Endmembers can" "be estimated using the VertexComponentAnalysis application.\n\n" - "The application allows to estimate the abundance maps with several algorithms :\n" + "The application allows estimating the abundance maps with several algorithms :\n" " * Unconstrained Least Square (ucls)\n" //" * Fully Constrained Least Square (fcls)\n" " * Image Space Reconstruction Algorithm (isra)\n" diff --git a/Modules/Applications/AppImageUtils/app/otbConvert.cxx b/Modules/Applications/AppImageUtils/app/otbConvert.cxx index cae4ff2..51ce7f3 100644 --- a/Modules/Applications/AppImageUtils/app/otbConvert.cxx +++ b/Modules/Applications/AppImageUtils/app/otbConvert.cxx @@ -222,6 +222,10 @@ private: template<class TImageType> void GenericDoExecute() { + + // Clear previously registered filters + m_Filters.clear(); + std::string rescaleType = this->GetParameterString("type"); if( (rescaleType != "none") && (rescaleType != "linear") && (rescaleType != "log2") ) @@ -383,7 +387,7 @@ private: rescaler->SetGamma(GetParameterFloat("type.linear.gamma")); } - m_TmpFilter = rescaler; + m_Filters.push_back(rescaler.GetPointer()); SetParameterOutputImage<TImageType>("out", rescaler->GetOutput()); } @@ -440,19 +444,19 @@ private: { typedef MultiToMonoChannelExtractROI<FloatVectorImageType::InternalPixelType, typename TImageType::InternalPixelType> ExtractROIFilterType; - typedef ObjectList<ExtractROIFilterType> ExtractROIFilterListType; typedef otb::ImageList<otb::Image<typename TImageType::InternalPixelType> > ImageListType; typedef ImageListToVectorImageFilter<ImageListType, TImageType > ListConcatenerFilterType; typename ImageListType::Pointer imageList; typename ListConcatenerFilterType::Pointer concatener; - typename ExtractROIFilterListType::Pointer extractorList; imageList = ImageListType::New(); concatener = ListConcatenerFilterType::New(); - extractorList = ExtractROIFilterListType::New(); + //m_Filters.push_back(imageList.GetPointer()); + m_Filters.push_back(concatener.GetPointer()); + const bool monoChannel = IsParameterEnabled("channels.grayscale"); // get band order @@ -461,16 +465,15 @@ private: for (auto && channel : channels) { typename ExtractROIFilterType::Pointer extractROIFilter = ExtractROIFilterType::New(); + m_Filters.push_back(extractROIFilter.GetPointer()); extractROIFilter->SetInput(GetParameterImage("in")); if (!monoChannel) extractROIFilter->SetChannel(channel); extractROIFilter->UpdateOutputInformation(); - extractorList->PushBack(extractROIFilter); imageList->PushBack(extractROIFilter->GetOutput()); } concatener->SetInput(imageList); concatener->UpdateOutputInformation(); - concatener->Update(); return concatener->GetOutput(); } @@ -507,8 +510,8 @@ private: } } - itk::ProcessObject::Pointer m_TmpFilter; TransferLogType::Pointer m_TransferLog; + std::vector<itk::LightObject::Pointer> m_Filters; }; } diff --git a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx index 06da000..7c56aa8 100644 --- a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx +++ b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx @@ -74,7 +74,7 @@ private: "The list of features and the syntax of muParserX is available at [1].\n\n" "As opposed to muParser (and thus the BandMath OTB-application [2]), " - "muParserX supports vector expressions which allows to output multi-band " + "muParserX supports vector expressions which allows outputting multi-band " "images.\n\n" "Hereafter is a brief reference of the muParserX syntax\n\n" @@ -106,10 +106,10 @@ private: "im1b2Mean\n" " mean of the 2nd component of the 1st input (global statistics)\n\n" - "im1b2Min\n" + "im1b2Mini\n" " minimum of the 2nd component of the 1st input (global statistics)\n\n" - "im1b2Max\n" + "im1b2Maxi\n" " minimum of the 2nd component of the 1st input (global statistics)\n\n" "im1b2Sum\n" diff --git a/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx b/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx index 7707ead..87e7dc3 100644 --- a/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx +++ b/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx @@ -186,7 +186,7 @@ private: AddDocTag(Tags::Calibration); AddParameter(ParameterType_InputImage, "in", "Input"); - SetParameterDescription("in", "Input image filename (values in DN)"); + SetParameterDescription("in", "Input image filename"); AddParameter(ParameterType_OutputImage, "out", "Output"); SetParameterDescription("out","Output calibrated image filename"); @@ -205,8 +205,8 @@ private: DisableParameter("milli"); MandatoryOff("milli"); - AddParameter(ParameterType_Empty, "clamp", "Clamp of reflectivity values between [0, 100]"); - SetParameterDescription("clamp", "Clamping in the range [0, 100]. It can be useful to preserve area with specular reflectance."); + AddParameter(ParameterType_Empty, "clamp", "Clamp of reflectivity values between [0, 1]"); + SetParameterDescription("clamp", "Clamping in the range [0, 1]. It can be useful to preserve area with specular reflectance."); EnableParameter("clamp"); MandatoryOff("clamp"); diff --git a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx index d0dfadb..27f8da8 100644 --- a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx +++ b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx @@ -64,7 +64,7 @@ private: "This application can be a preliminary step for an object-based analysis.\n\n" "It generates a vector data file containing the regions extracted with " "the MeanShift algorithm. The spatial and range radius parameters allow " - "to adapt the sensitivity of the algorithm depending on the image dynamic " + "adapting the sensitivity of the algorithm depending on the image dynamic " "and resolution. There is a step to remove small regions whose size " "(in pixels) is less than the given 'minsize' parameter. These regions " "are merged to a similar neighbor region. In the output vectors, there " diff --git a/Modules/Applications/AppStereo/app/otbBlockMatching.cxx b/Modules/Applications/AppStereo/app/otbBlockMatching.cxx index 4884c77..2ec8f7e 100644 --- a/Modules/Applications/AppStereo/app/otbBlockMatching.cxx +++ b/Modules/Applications/AppStereo/app/otbBlockMatching.cxx @@ -141,7 +141,7 @@ private: "The application searches locally for the displacement between a reference" " image and a secondary image. The correspondence is evaluated for each " "pixel, based on a pair of local neighborhood windows. The displacement " - "evaluated can be 1D (along lines) or 2D. Parameters allows to set the " + "evaluated can be 1D (along lines) or 2D. Parameters allow setting the " "minimum and maximum disparities to search (both for horizontal and " "vertical directions). A winner-take-all approach is used to select the " "best match. There are different metrics implemented to evaluate the " diff --git a/Modules/Filtering/Projection/test/otbGenericRSTransformGenericTest.cxx b/Modules/Filtering/Projection/test/otbGenericRSTransformGenericTest.cxx index 4237cce..3898a1d 100644 --- a/Modules/Filtering/Projection/test/otbGenericRSTransformGenericTest.cxx +++ b/Modules/Filtering/Projection/test/otbGenericRSTransformGenericTest.cxx @@ -249,7 +249,7 @@ int otbGenericRSTransformGenericTest(int argc, char * argv[]) if(inRes>inThreshold) { failed = true; - std::cerr<<"Input residual ("<<outRes<<") outpasses the threshold ("<<inThreshold<<")"<<std::endl; + std::cerr<<"Input residual ("<<inRes<<") outpasses the threshold ("<<inThreshold<<")"<<std::endl; std::cerr<<std::endl; } diff --git a/Modules/Filtering/Statistics/include/otbPatternSampler.h b/Modules/Filtering/Statistics/include/otbPatternSampler.h index 5a9b640..cc9dd94 100644 --- a/Modules/Filtering/Statistics/include/otbPatternSampler.h +++ b/Modules/Filtering/Statistics/include/otbPatternSampler.h @@ -49,7 +49,7 @@ public: typedef struct Parameter { /** Maximum size of the internal patterns */ - unsigned long MaxPatternSize; + unsigned long MaxPatternSize = 0; /** First sampling pattern */ std::vector<bool> Pattern1; @@ -59,7 +59,7 @@ public: std::vector<bool> Pattern2; /** Seed used to randomly generate patterns (used only if greater than 0) */ - unsigned int Seed; + unsigned int Seed = 0; bool operator!=(const struct Parameter & param) const; } ParameterType; diff --git a/Modules/IO/TestKernel/src/otbTestDriver.cxx b/Modules/IO/TestKernel/src/otbTestDriver.cxx index 27d45ef..349a224 100644 --- a/Modules/IO/TestKernel/src/otbTestDriver.cxx +++ b/Modules/IO/TestKernel/src/otbTestDriver.cxx @@ -114,7 +114,7 @@ int parseCommandLine(int ac, char * av[], std::vector<char *>& remainingArgs) if (oldenv2) { libpath64 += KWSYS_SHARED_FORWARD_PATH_SEP; - libpath64 += oldenv; + libpath64 += oldenv2; } itksys::SystemTools::PutEnv(libpath64.c_str()); } diff --git a/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx b/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx index 90769aa..f9137e4 100644 --- a/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx +++ b/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx @@ -94,7 +94,7 @@ int otbImageToImageRCC8Calculator(int itkNotUsed(argc), char* argv[]) { std::cout << "Test failed: Result with level3AprioriKnowledge "; std::cout << "different from result without a priori knowledge" << std::endl; - std::cout << calc->GetValue() << "!=" << calc1->GetValue() << std::endl; + std::cout << calc->GetValue() << "!=" << calc2->GetValue() << std::endl; return EXIT_FAILURE; } } diff --git a/Modules/Radiometry/Simulation/src/otbSailModel.cxx b/Modules/Radiometry/Simulation/src/otbSailModel.cxx index 1049da6..e2c1ef0 100644 --- a/Modules/Radiometry/Simulation/src/otbSailModel.cxx +++ b/Modules/Radiometry/Simulation/src/otbSailModel.cxx @@ -34,7 +34,7 @@ namespace otb /** Constructor */ SailModel ::SailModel() : m_LAI(2), m_Angl(50), m_PSoil(1), m_Skyl(70), m_HSpot(0.2), - m_TTS(30), m_TTO(0), m_PSI(0), m_FCoverView(0.0), m_UseSoilFile(false) + m_TTS(30), m_TTO(0), m_PSI(0), m_FCoverView(0.0), m_UseSoilFile(false), m_SoilIndex(0) { this->ProcessObject::SetNumberOfRequiredInputs(2); this->ProcessObject::SetNumberOfRequiredOutputs(4); diff --git a/Modules/Visualization/Monteverdi/src/mvdPreferencesDialog.ui b/Modules/Visualization/Monteverdi/src/mvdPreferencesDialog.ui index 300d407..c715d1e 100644 --- a/Modules/Visualization/Monteverdi/src/mvdPreferencesDialog.ui +++ b/Modules/Visualization/Monteverdi/src/mvdPreferencesDialog.ui @@ -120,6 +120,9 @@ <verstretch>0</verstretch> </sizepolicy> </property> + <property name="toolTip"> + <string>When the image width or height is lower than this minimum, overview generation is not proposed</string> + </property> <property name="text"> <string>Minimum size:</string> </property> @@ -127,6 +130,9 @@ </item> <item row="1" column="2"> <widget class="QSpinBox" name="overviewsSpinBox"> + <property name="toolTip"> + <string>When the image width or height is lower than this minimum, overview generation is not proposed</string> + </property> <property name="maximum"> <number>999999999</number> </property> diff --git a/Modules/Visualization/MonteverdiGui/include/mvdImageViewWidget.h b/Modules/Visualization/MonteverdiGui/include/mvdImageViewWidget.h index 4ce167a..c32699f 100644 --- a/Modules/Visualization/MonteverdiGui/include/mvdImageViewWidget.h +++ b/Modules/Visualization/MonteverdiGui/include/mvdImageViewWidget.h @@ -163,7 +163,7 @@ public: void SetPickingEnabled( bool ); /** - * This allows to set the fallback behaviour for picking + * This allows setting the fallback behaviour for picking */ void SetPickingDefaultStatus( bool ); /** diff --git a/Modules/Visualization/MonteverdiGui/include/mvdProjectionBarWidget.h b/Modules/Visualization/MonteverdiGui/include/mvdProjectionBarWidget.h index 5a2d40e..be92647 100644 --- a/Modules/Visualization/MonteverdiGui/include/mvdProjectionBarWidget.h +++ b/Modules/Visualization/MonteverdiGui/include/mvdProjectionBarWidget.h @@ -69,7 +69,7 @@ class ProjectionBarWidget; * \ingroup OTBMonteverdiGUI * \brief ProjectionBarWidget widget class. * - * This Widget allow to change the zoom level of the current selected projection. + * This Widget allows changing the zoom level of the current selected projection. */ class OTBMonteverdiGUI_EXPORT ProjectionBarWidget : public QWidget { diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h index aa0cdd0..cbc0f7f 100644 --- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h +++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h @@ -622,9 +622,9 @@ public: { \ Image##Type::Pointer ret; \ Parameter* param = GetParameterByKey(parameter); \ - if (dynamic_cast<ComplexInputImageParameter*>(param)) \ + ComplexInputImageParameter* paramDown = dynamic_cast<ComplexInputImageParameter*>(param); \ + if (paramDown) \ { \ - ComplexInputImageParameter* paramDown = dynamic_cast<ComplexInputImageParameter*>(param); \ ret = paramDown->Get##Image(); \ } \ return ret; \ diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperCompositeApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperCompositeApplication.h index 859e6a8..601b945 100644 --- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperCompositeApplication.h +++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperCompositeApplication.h @@ -32,7 +32,7 @@ namespace Wrapper /** \class CompositeApplication * \brief This class is a base class for composite applications * - * This class allows to create & store internal applications with the same logic + * This class allows creating & storing internal applications with the same logic * as parameters. You choose the application type to create, you choose an * identifier (alphanumeric string), and you can give a short description. * Later, you will refer to this application using the identifier. In the diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperProxyParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperProxyParameter.h index 7715c97..1a93c24 100644 --- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperProxyParameter.h +++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperProxyParameter.h @@ -35,7 +35,7 @@ namespace Wrapper * \brief Parameter class acting as a proxy to a different parameter * * The target parameter of this proxy is defined as a pair of a group parameter - * containing the target and the targets key. It allows to define proxies on + * containing the target and the targets key. It allows defining proxies on * parameters that may be themselves replaced by a proxy * * \ingroup OTBApplicationEngine diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx index 120365d..47c4e85 100644 --- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx +++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx @@ -250,6 +250,10 @@ void Application::SetParameterString(std::string parameter, std::string value, b if ( !paramDown->SetFileName(value) ) otbAppLogCRITICAL( <<"Invalid XML parameter filename " << value <<"."); } + else + { + otbAppLogWARNING( <<"This parameter can't be set using SetParameterString()."); + } this->SetParameterUserValue(parameter, hasUserValueFlag); } diff --git a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx index 736ad39..5d57a83 100644 --- a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx +++ b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx @@ -817,18 +817,22 @@ std::string CommandLineLauncher::DisplayParameterHelp(const Parameter::Pointer & if (type == ParameterType_Choice) { - std::vector<std::string> keys = dynamic_cast<ChoiceParameter*>(param.GetPointer())->GetChoiceKeys(); - std::vector<std::string> names = dynamic_cast<ChoiceParameter*>(param.GetPointer())->GetChoiceNames(); + ChoiceParameter* paramDown = dynamic_cast<ChoiceParameter*>(param.GetPointer()); + if (paramDown) + { + std::vector<std::string> keys = paramDown->GetChoiceKeys(); + std::vector<std::string> names = paramDown->GetChoiceNames(); - oss << "["; - for(unsigned int i=0; i<keys.size(); i++) + oss << "["; + for(unsigned int i=0; i<keys.size(); i++) { - oss<<keys[i]; - if( i != keys.size()-1 ) - oss << "/"; + oss<<keys[i]; + if( i != keys.size()-1 ) + oss << "/"; } - oss << "]"; + oss << "]"; + } } if(m_Application->IsMandatory(paramKey)) diff --git a/Modules/Wrappers/QtWidget/src/itkQtProgressBar.cxx b/Modules/Wrappers/QtWidget/src/itkQtProgressBar.cxx index 0cb4344..ba8070c 100644 --- a/Modules/Wrappers/QtWidget/src/itkQtProgressBar.cxx +++ b/Modules/Wrappers/QtWidget/src/itkQtProgressBar.cxx @@ -62,10 +62,12 @@ QtProgressBar::ProcessEvent( itk::Object * caller, ::itk::ProcessObject::Pointer process = dynamic_cast< itk::ProcessObject *>( caller ); - const int value2 = static_cast<int>( - process->GetProgress() * this->maximum() ); - - emit SetValueChanged( value2 ); + if (process) + { + const int value2 = static_cast<int>( + process->GetProgress() * this->maximum() ); + emit SetValueChanged( value2 ); + } } } @@ -78,10 +80,13 @@ QtProgressBar::ConstProcessEvent( const itk::Object * caller, itk::ProcessObject::ConstPointer process = dynamic_cast< const itk::ProcessObject *>( caller ); - const int v = static_cast<int>( - process->GetProgress() * this->maximum() ); + if (process) + { + const int v = static_cast<int>( + process->GetProgress() * this->maximum() ); - emit SetValueChanged( v ); + emit SetValueChanged( v ); + } } } diff --git a/Modules/Wrappers/QtWidget/src/otbApplicationLauncherQt.cxx b/Modules/Wrappers/QtWidget/src/otbApplicationLauncherQt.cxx index d0c6d78..5b4225f 100644 --- a/Modules/Wrappers/QtWidget/src/otbApplicationLauncherQt.cxx +++ b/Modules/Wrappers/QtWidget/src/otbApplicationLauncherQt.cxx @@ -109,7 +109,7 @@ int main(int argc, char* argv[]) int ret = qtApp.exec(); // Clean resources - if (mainWindow) delete mainWindow; + delete mainWindow; app = ITK_NULLPTR; ApplicationRegistry::CleanRegistry(); diff --git a/Packaging/CMakeLists.txt b/Packaging/CMakeLists.txt index c7f84df..e2ef02d 100644 --- a/Packaging/CMakeLists.txt +++ b/Packaging/CMakeLists.txt @@ -63,7 +63,7 @@ find_program(ZIP_EXECUTABLE NAMES 7z 7za) set(CMAKE_INSTALL_PREFIX "${SUPERBUILD_INSTALL_DIR}") #set CMAKE_MODULE_PATH to be the current source directory. -# This will allow to include all cmake files without full path and .cmake extension! +# This will allow including all cmake files without full path and .cmake extension! set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) #include superbuild_macro for get_version() @@ -93,13 +93,10 @@ set(PKG_OTB_VERSION_STRING ${PKG_OTB_VERSION_MAJOR}.${PKG_OTB_VERSION_MINOR}.${P set(PACKAGE_LONG_NAME OrfeoToolBox) set(NAME_SUFFIX "" CACHE STRING "extra suffix for package name") set(PACKAGE_NAME OTB) -if(NAME_SUFFIX) - set(PACKAGE_NAME OTB${NAME_SUFFIX}) -endif() if(APPLE) set(PACKAGE_PLATFORM_NAME "Darwin") elseif(WIN32) - set(PACKAGE_PLATFORM_NAME "win") + set(PACKAGE_PLATFORM_NAME "Win") elseif(LINUX) set(PACKAGE_PLATFORM_NAME "Linux") endif() @@ -110,7 +107,7 @@ endif() # This directory is important. # We stage/keep files that goes into final package in this directory -set(PKG_STAGE_DIR ${PACKAGE_NAME}-${PKG_OTB_VERSION_STRING}-${PACKAGE_PLATFORM_NAME}${PACKAGE_ARCH}) +set(PKG_STAGE_DIR ${PACKAGE_NAME}-${PKG_OTB_VERSION_STRING}-${PACKAGE_PLATFORM_NAME}${PACKAGE_ARCH}${NAME_SUFFIX}) set(PATCHELF_PROGRAM "${CMAKE_BINARY_DIR}/PATCHELF/src/patchelf/src/patchelf") include(External_patchelf) diff --git a/Packaging/Files/selftester.sh b/Packaging/Files/selftester.sh index 69d42e1..3d3a83c 100755 --- a/Packaging/Files/selftester.sh +++ b/Packaging/Files/selftester.sh @@ -70,7 +70,7 @@ for name in $OTB_SO_LIBRARIES $OTB_DY_LIBRARIES $OTB_EXE; do elif echo "$F_OUTPUT" | grep -q ': broken symbolic link'; then echo_and_report "$F_OUTPUT" elif echo "$F_OUTPUT" | grep -q -i -e ': ELF .*shared object' -e ': ELF .*executable'; then - LDD_ERRORS=$(ldd "$name" | grep -i -e '=> not found' -e 'not a dynamic executable') + LDD_ERRORS=$(ldd "$name" 2>&1 | grep -v 'you do not have execution permission' | grep -i -e '=> not found' -e 'not a dynamic executable') if [ -n "$LDD_ERRORS" ]; then echo_and_report "ldd $name" echo_and_report "$LDD_ERRORS" diff --git a/Packaging/makeself/README.md b/Packaging/makeself/README.md index cf7f312..116b503 100644 --- a/Packaging/makeself/README.md +++ b/Packaging/makeself/README.md @@ -128,7 +128,7 @@ Archives generated with Makeself can be passed the following arguments: * _--keep_ : Prevent the files to be extracted in a temporary directory that will be removed after the embedded script's execution. The files will then be extracted in the current working directory and will stay here until you remove them. * _--verbose_ : Will prompt the user before executing the embedded command - * _--target dir_ : Allows to extract the archive in an arbitrary place. + * _--target dir_ : Allows extracting the archive in an arbitrary place. * _--nox11_ : Do not spawn a X11 terminal. * _--confirm_ : Prompt the user for confirmation before running the embedded command. * _--info_ : Print out general information about the archive (does not extract). diff --git a/Packaging/post_install.cmake b/Packaging/post_install.cmake index 29c937e..25837fa 100644 --- a/Packaging/post_install.cmake +++ b/Packaging/post_install.cmake @@ -18,6 +18,55 @@ # limitations under the License. # +function(sanitize_system_paths input_file) + # does not support Windows ... + if(APPLE) + set(SHARED_EXT "\\.dylib") + elseif(UNIX) + set(SHARED_EXT "\\.so") + endif() + set(filtered_content) + + file(STRINGS "${input_file}" source_file_content NEWLINE_CONSUME) + string(REGEX REPLACE "\n" "\n;" source_file_content "${source_file_content}") + set(SEARCH_REGEX "(^[^#\"]+(LIBRARIES|INCLUDE_DIR[A-Z]*) +\")(.+)(\"[^\"]*)") + + foreach(line ${source_file_content}) + set(filtered_line "${line}") + if(line MATCHES "${SEARCH_REGEX}") + string(REGEX REPLACE "${SEARCH_REGEX}" "\\3" extract_str "${line}" ) + string(REGEX REPLACE ";;" ";" extract_str "${extract_str}") + set(_to_be_removed) + set(_to_be_added) + foreach(path ${extract_str}) + if(IS_ABSOLUTE ${path}) + list(APPEND _to_be_removed "${path}") + if(NOT IS_DIRECTORY ${path}) + if(path MATCHES "^.*/lib[^\\.]+${SHARED_EXT}.*") + string(REGEX REPLACE "^.*/lib([^\\.]+)${SHARED_EXT}.*" "\\1" _lib_name "${path}") + list(APPEND _to_be_added "${_lib_name}") + endif() + endif() + endif() + endforeach() + if(_to_be_removed) + list(REMOVE_ITEM extract_str ${_to_be_removed}) + endif() + if(_to_be_added) + list(INSERT extract_str 0 ${_to_be_added}) + endif() + if(extract_str) + list(REMOVE_DUPLICATES extract_str) + endif() + string(REGEX REPLACE "${SEARCH_REGEX}" "\\1${extract_str}\\4" filtered_line "${line}" ) + endif() + list(APPEND filtered_content "${filtered_line}") + endforeach() + + string(REGEX REPLACE "\n;" "\n" filtered_content "${filtered_content}") + file(WRITE "${input_file}" "${filtered_content}") +endfunction() + #check variables are set foreach(var P_DIRS P_MATCH P_REPLACE) if(NOT ${var}) @@ -42,5 +91,8 @@ foreach( p_dir ${P_DIRS} ) file(WRITE "${cmake_file}" "# This file is modified by OTB after installation. \n${cmake_file_CONTENTS}") endif() + if(UNIX) + sanitize_system_paths(${cmake_file}) + endif() endforeach() # foreach( cmake_file endforeach() # foreach( p_dir diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt index e91f39a..1f7046b 100644 --- a/RELEASE_NOTES.txt +++ b/RELEASE_NOTES.txt @@ -1,4 +1,4 @@ -OTB-v.6.2.0 - Changes since version 6.0.0 (October 4th, 2017) +OTB-v.6.2.0 - Changes since version 6.0.0 (October 26th, 2017) ---------------------------------------------------------- * Request for Changes (http://wiki.orfeo-toolbox.org/index.php/Requests_for_Changes): @@ -31,6 +31,7 @@ OTB-v.6.2.0 - Changes since version 6.0.0 (October 4th, 2017) * Documentation * 0001434: Bibliography references are not set in the Software Guide (PDF version) * 0001400: Training applications reference documentation do not include shark parameters + * 0001471: Issue with Boolean parameter in the Python application API documentation * Monteverdi * 0001431: RGE Alti files inverted on Monteverdi @@ -41,6 +42,8 @@ OTB-v.6.2.0 - Changes since version 6.0.0 (October 4th, 2017) * 0001449: Issues with OTB 6.1 standalone packages (Linux) * 0001404: OTB xdk 5.10.1 is not able to compile a simple program on a Ubuntu 16.04 VM * 0001430: building 6.0.0 fails at otbSFSTextureExtraction.cxx.o + * 0001474: OTB XDK is not working on Linux + * 0001460: Unable to compile OTB 6.2.0 RC1 with superbuild (CURL issue) * Orfeo Toolbox (OTB) * 0001453: Applications crash with inxml paramter (GUI mode) @@ -70,11 +73,16 @@ OTB-v.6.2.0 - Changes since version 6.0.0 (October 4th, 2017) * 0001426: GUI TrainimagesClassifier resets "field name" parameter when another parameter is set * 0001421: otbenv.bash has windows endline * 0001402: 404 link on otb-users + * 0001469: Superbuild with Visual Studio 15 2017 + * 0001464: otb_module_impl() called twice in ExternalModuleTemplate + * 0001459: Patch to fix spelling errors * OTB-applications * 0001441: Error in param in template otbTrainLibSVM.txx * 0001411: Training applications needs field name of type integer * 0001410: BundleToPerfectSensor composite application does not expose parameters of internal applications + * 0001467: Convert application memory allocation issue + * 0001463: BandMathX not accepting global statistics OTB-v.6.0.0 - Changes since version 5.10.1 (May 2th, 2017) diff --git a/i18n/fr_FR.ts b/i18n/fr_FR.ts index 609bada..e9ea1fe 100644 --- a/i18n/fr_FR.ts +++ b/i18n/fr_FR.ts @@ -4611,6 +4611,10 @@ Merci d'en sélectionner un autre.</translation> <source>pixel(s)</source> <translation>pixel(s)</translation> </message> + <message> + <source>When the image width or height is lower than this minimum, overview generation is not proposed</source> + <translation>Lorsque la hauteur ou la largeur d'une image est inférieure à ce minimum, la génération des aperçus n'est pas proposée</translation> + </message> </context> <context> <name>mvd::ProcessObjectObserver</name> -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/otb.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

