summaryrefslogtreecommitdiff
path: root/indra/integration_tests/llimage_libtest
diff options
context:
space:
mode:
Diffstat (limited to 'indra/integration_tests/llimage_libtest')
-rw-r--r--indra/integration_tests/llimage_libtest/CMakeLists.txt122
-rw-r--r--indra/integration_tests/llimage_libtest/llimage_libtest.cpp138
2 files changed, 202 insertions, 58 deletions
diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt
index e3c508659b..0733e5e283 100644
--- a/indra/integration_tests/llimage_libtest/CMakeLists.txt
+++ b/indra/integration_tests/llimage_libtest/CMakeLists.txt
@@ -1,25 +1,22 @@
# -*- cmake -*-
-# Integration tests of the llimage library (JPEG2000 images reading and writing)
-
-if (VIEWER)
+# Integration tests of the llimage library (JPEG2000, PNG, jpeg, etc... images reading and writing)
project (llimage_libtest)
include(00-Common)
include(LLCommon)
+include(Linking)
+include(LLSharedLibs)
include(LLImage)
include(LLImageJ2COJ)
include(LLKDU)
include(LLMath)
-#include(LLVFS) # ugh, needed for LLDir
-#include(LLXML)
-#include(LLXUIXML)
-include(Linking)
-# include(Tut)
+include(LLVFS)
include_directories(
${LLCOMMON_INCLUDE_DIRS}
+ ${LLVFS_INCLUDE_DIRS}
${LLIMAGE_INCLUDE_DIRS}
${LLMATH_INCLUDE_DIRS}
)
@@ -38,12 +35,23 @@ set_source_files_properties(${llimage_libtest_HEADER_FILES}
list(APPEND llimage_libtest_SOURCE_FILES ${llimage_libtest_HEADER_FILES})
-add_executable(llimage_libtest ${llimage_libtest_SOURCE_FILES})
+add_executable(llimage_libtest
+ WIN32
+ MACOSX_BUNDLE
+ ${llimage_libtest_SOURCE_FILES}
+)
-# Link with OS-specific libraries
+set_target_properties(llimage_libtest
+ PROPERTIES
+ WIN32_EXECUTABLE
+ FALSE
+)
+
+# OS-specific libraries
if (DARWIN)
- find_library(COCOA_LIBRARY Cocoa)
- set(OS_LIBRARIES ${COCOA_LIBRARY})
+ include(CMakeFindFrameworks)
+ find_library(COREFOUNDATION_LIBRARY CoreFoundation)
+ set(OS_LIBRARIES ${COREFOUNDATION_LIBRARY})
elseif (WINDOWS)
#ll_stack_trace needs this now...
list(APPEND WINDOWS_LIBRARIES dbghelp)
@@ -51,64 +59,72 @@ elseif (WINDOWS)
elseif (LINUX)
set(OS_LIBRARIES)
else (DARWIN)
- message(FATAL_ERROR "unknown platform")
+ message(FATAL_ERROR "Unknown platform")
endif (DARWIN)
-# Libraries on which this library depends, needed for Linux builds
+# Libraries on which this application depends on
# Sort by high-level to low-level
target_link_libraries(llimage_libtest
+ ${LLCOMMON_LIBRARIES}
+ ${LLVFS_LIBRARIES}
${LLIMAGE_LIBRARIES}
${LLKDU_LIBRARIES}
${KDU_LIBRARY}
${LLIMAGEJ2COJ_LIBRARIES}
${OS_LIBRARIES}
- ${GOOGLE_PERFTOOLS_LIBRARIES}
)
if (DARWIN)
- set_target_properties(llimage_libtest
- PROPERTIES
- OUTPUT_NAME "llimage_libtest"
- MACOSX_BUNDLE_INFO_STRING "llimage test utility"
- MACOSX_BUNDLE_GUI_IDENTIFIER "llimage_libtest"
- MACOSX_BUNDLE_LONG_VERSION_STRING "0.5"
- MACOSX_BUNDLE_BUNDLE_NAME "llimage_libtest"
- MACOSX_BUNDLE_SHORT_VERSION_STRING "v0.5"
- MACOSX_BUNDLE_BUNDLE_VERSION "v0.5"
- MACOSX_BUNDLE_COPYRIGHT "Copyright Linden Lab 2011"
- )
- # TODO : Copy over libs in the bundle
-elseif (WINDOWS)
- set_target_properties(llimage_libtest
- PROPERTIES
- LINK_FLAGS "/NODEFAULTLIB:LIBCMT"
- LINK_FLAGS_DEBUG "/NODEFAULTLIB:MSVCRT /NODEFAULTLIB:LIBCMTD"
- )
-
- # Copy over OpenJPEG.dll
- # *NOTE: On Windows with VS2005, only the first comment prints
- set(OPENJPEG_RELEASE
- "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/openjpeg.dll")
- add_custom_command( TARGET llimage_libtest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${OPENJPEG_RELEASE} ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Copying OpenJPEG DLLs to binary directory"
- )
- set(OPENJPEG_DEBUG
- "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/openjpegd.dll")
- add_custom_command( TARGET llimage_libtest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${OPENJPEG_DEBUG} ${CMAKE_CURRENT_BINARY_DIR}
- )
-elseif (LINUX)
- # TODO : please help me get this to build and run for Linux!
+ # Path inside the app bundle where we'll need to copy libraries
+ set(LLIMAGE_LIBTEST_DESTINATION_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llimage_libtest.app/Contents/Resources
+ )
+ # Create the Contents/Resources directory
+ add_custom_command(
+ TARGET llimage_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ ARGS
+ -E
+ make_directory
+ ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+ COMMENT "Creating Resources directory in app bundle."
+ )
else (DARWIN)
- message(FATAL_ERROR "unknown platform")
+ set(LLIMAGE_LIBTEST_DESTINATION_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
+ )
endif (DARWIN)
+get_target_property(BUILT_LLCOMMON llcommon LOCATION)
+add_custom_command(TARGET llimage_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON} ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+ DEPENDS ${BUILT_LLCOMMON}
+)
+
+if (DARWIN)
+ # Copy the required libraries to the package app
+ add_custom_command(TARGET llimage_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libapr-1.0.3.7.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libapr-1.0.3.7.dylib
+ add_custom_command(TARGET llimage_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libaprutil-1.0.3.8.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libaprutil-1.0.3.8.dylib
+ add_custom_command(TARGET llimage_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexception_handler.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexception_handler.dylib
+ add_custom_command(TARGET llimage_libtest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexpat.0.5.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+ DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libexpat.0.5.0.dylib
+ )
+endif (DARWIN)
+
+if (WINDOWS)
+ # Check indra/test_apps/llplugintest/CMakeLists.txt for an example of what to copy over for Windows and how
+endif (WINDOWS)
+
# Ensure people working on the viewer don't break this library
# *NOTE: This could be removed, or only built by TeamCity, if the build
# and link times become too long.
add_dependencies(viewer llimage_libtest)
-endif (VIEWER)
+ll_deploy_sharedlibs_command(llimage_libtest)
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
index a4a4d10bcb..e8fe4864fb 100644
--- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
+++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
@@ -25,23 +25,151 @@
* $/LicenseInfo$
*/
#include "linden_common.h"
+#include "llpointer.h"
#include "llimage_libtest.h"
-// linden library includes
+// Linden library includes
+#include "llimage.h"
+#include "llimagejpeg.h"
+#include "llimagepng.h"
+#include "llimagebmp.h"
+#include "llimagetga.h"
+#include "llimagej2c.h"
+#include "lldir.h"
+// system libraries
#include <iostream>
-// *TODO: switch to using TUT
-// *TODO: teach TeamCity about this program, run automatically after full builds
+static const char USAGE[] = "\n"
+"usage:\tllimage_libtest [options]\n"
+"\n"
+" --help print this help\n"
+"\n";
-void init_llimage()
+LLPointer<LLImageRaw> load_image(const std::string &src_filename)
{
+ std::string exten = gDirUtilp->getExtension(src_filename);
+ U32 codec = LLImageBase::getCodecFromExtension(exten);
+
+ LLPointer<LLImageFormatted> image;
+ switch (codec)
+ {
+ case IMG_CODEC_BMP:
+ image = new LLImageBMP();
+ break;
+ case IMG_CODEC_TGA:
+ image = new LLImageTGA();
+ break;
+ case IMG_CODEC_JPEG:
+ image = new LLImageJPEG();
+ break;
+ case IMG_CODEC_J2C:
+ image = new LLImageJ2C();
+ break;
+ case IMG_CODEC_PNG:
+ image = new LLImagePNG();
+ break;
+ default:
+ return NULL;
+ }
+
+ if (!image->load(src_filename))
+ {
+ return NULL;
+ }
+
+ if( (image->getComponents() != 3) && (image->getComponents() != 4) )
+ {
+ std::cout << "Image files with less than 3 or more than 4 components are not supported\n";
+ return NULL;
+ }
+
+ LLPointer<LLImageRaw> raw_image = new LLImageRaw;
+ if (!image->decode(raw_image, 0.0f))
+ {
+ return NULL;
+ }
+
+ return raw_image;
+}
+
+bool save_image(const std::string &filepath, LLPointer<LLImageRaw> raw_image)
+{
+ std::string exten = gDirUtilp->getExtension(filepath);
+ U32 codec = LLImageBase::getCodecFromExtension(exten);
+
+ LLPointer<LLImageFormatted> image;
+ switch (codec)
+ {
+ case IMG_CODEC_BMP:
+ image = new LLImageBMP();
+ break;
+ case IMG_CODEC_TGA:
+ image = new LLImageTGA();
+ break;
+ case IMG_CODEC_JPEG:
+ image = new LLImageJPEG();
+ break;
+ case IMG_CODEC_J2C:
+ image = new LLImageJ2C();
+ break;
+ case IMG_CODEC_PNG:
+ image = new LLImagePNG();
+ break;
+ default:
+ return NULL;
+ }
+
+ if (!image->encode(raw_image, 0.0f))
+ {
+ return false;
+ }
+
+ return image->save(filepath);
}
int main(int argc, char** argv)
{
- init_llimage();
+ // Init whatever is necessary
+ ll_init_apr();
+ LLImage::initClass();
+
+ // Analyze command line arguments
+ for (int arg=1; arg<argc; ++arg)
+ {
+ if (!strcmp(argv[arg], "--help"))
+ {
+ // always send the usage to standard out
+ std::cout << USAGE << std::endl;
+ return 0;
+ }
+
+ }
+
+ // List of (input,output) files
+
+ // Load file
+ LLPointer<LLImageRaw> raw_image = load_image("lolcat-monorail.jpg");
+ if (raw_image)
+ {
+ std::cout << "Image loaded\n" << std::endl;
+ }
+ else
+ {
+ std::cout << "Image not found\n" << std::endl;
+ }
+
+ // Save file
+ if (raw_image)
+ {
+ save_image("monorail.png",raw_image);
+ }
+
+ // Output stats on each file
+
+ // Cleanup and exit
+ LLImage::cleanupClass();
return 0;
}