diff options
Diffstat (limited to 'indra/integration_tests/llimage_libtest')
-rw-r--r-- | indra/integration_tests/llimage_libtest/CMakeLists.txt | 122 | ||||
-rw-r--r-- | indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 138 |
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; } |