Change CMakeLists.txt to build examples by default (image_to_j2k and j2k_to_image).
[openjpeg.git] / codec / CMakeLists.txt
1 # Build the demo app, small examples
2
3 # First thing define the common source:
4 SET(common_SRCS
5   convert.c
6   index.c
7 )
8
9 # Then check if getopt is present:
10 INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
11 SET(DONT_HAVE_GETOPT 1)
12 IF(UNIX) #I am pretty sure only *nix sys have this anyway
13   CHECK_INCLUDE_FILE("getopt.h" CMAKE_HAVE_GETOPT_H)
14   # Seems like we need the contrary:
15   IF(CMAKE_HAVE_GETOPT_H)
16     SET(DONT_HAVE_GETOPT 0)
17   ENDIF(CMAKE_HAVE_GETOPT_H)
18 ENDIF(UNIX)
19
20 # If not getopt was found then add it to the lib:
21 IF(DONT_HAVE_GETOPT)
22   ADD_DEFINITIONS(-DDONT_HAVE_GETOPT)
23   SET(common_SRCS
24     ${common_SRCS}
25     compat/getopt.c
26   )
27 ENDIF(DONT_HAVE_GETOPT)
28
29 # Headers file are located here:
30 INCLUDE_DIRECTORIES(
31   ${OPENJPEG_SOURCE_DIR}/libopenjpeg
32   )
33
34 # Do the proper thing when building static...if only there was configured
35 # headers or def files instead
36 IF(NOT BUILD_SHARED_LIBS)
37   ADD_DEFINITIONS(-DOPJ_STATIC)
38 ENDIF(NOT BUILD_SHARED_LIBS)
39
40 FIND_PACKAGE(TIFF REQUIRED)
41 FIND_PACKAGE(PNG REQUIRED)
42 INCLUDE_DIRECTORIES( ${PNG_INCLUDE_DIR} )
43 INCLUDE_DIRECTORIES( ${TIFF_INCLUDE_DIR} )
44
45 # Loop over all executables:
46 FOREACH(exe j2k_to_image image_to_j2k j2k_dump)
47   ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS})
48   TARGET_LINK_LIBRARIES(${exe} ${OPJ_PREFIX}openjpeg ${TIFF_LIBRARIES} ${PNG_LIBRARIES})
49   ADD_TEST(${exe} ${EXECUTABLE_OUTPUT_PATH}/${exe})
50   # calling those exe without option will make them fail always:
51   SET_TESTS_PROPERTIES(${exe} PROPERTIES WILL_FAIL TRUE)
52   # On unix you need to link to the math library:
53   IF(UNIX)
54     TARGET_LINK_LIBRARIES(${exe} m)
55   ENDIF(UNIX)
56   # Install exe
57   INSTALL(TARGETS ${exe}
58     EXPORT OpenJPEGTargets
59     DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
60   )
61 ENDFOREACH(exe)
62
63 if(BUILD_TESTING)
64 # Do testing here, once we know the examples are being built:
65 FILE(GLOB_RECURSE OPENJPEG_DATA_IMAGES_GLOB
66   "${JPEG2000_CONFORMANCE_DATA_ROOT}/*.j2k"
67   "${JPEG2000_CONFORMANCE_DATA_ROOT}/*.j2c"
68   "${JPEG2000_CONFORMANCE_DATA_ROOT}/*.jp2"
69   )
70
71 foreach(filename ${OPENJPEG_DATA_IMAGES_GLOB})
72   get_filename_component(filename_temp ${filename} NAME)
73   get_filename_component(filename_ext ${filename} EXT)
74   execute_process(COMMAND ${EXECUTABLE_OUTPUT_PATH}/j2k_dump -i ${filename}
75     OUTPUT_VARIABLE dump_success
76     OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${filename_temp}.dump
77     ERROR_QUIET
78   )
79   if(dump_success)
80   file(READ ${CMAKE_CURRENT_BINARY_DIR}/${filename_temp}.dump numcomp_file)
81   string(REGEX REPLACE ".*numcomps=([0-9]+).*" "\\1"
82     numcomps "${numcomp_file}")
83   #message( "found:${output_variable} for ${filename_temp}" )
84   endif()
85   ADD_TEST(dump-${filename_temp} ${EXECUTABLE_OUTPUT_PATH}/j2k_dump -i ${filename})
86   foreach(codec_type ppm pgx bmp tif raw tga png)
87     ADD_TEST(j2i-${filename_temp}-${codec_type} ${EXECUTABLE_OUTPUT_PATH}/j2k_to_image -i ${filename} -o ${filename_temp}.${codec_type})
88     ADD_TEST(i2j-${filename_temp}-${codec_type} ${EXECUTABLE_OUTPUT_PATH}/image_to_j2k -i ${filename_temp}.${codec_type} -o ${filename_temp}.${codec_type}${filename_ext})
89     #if(UNIX)
90     #  ADD_TEST(cmp-${filename_temp}-${codec_type} cmp ${filename} ${filename_temp}.${codec_type}${filename_ext})
91     #endif(UNIX)
92   endforeach(codec_type)
93 endforeach(filename)
94 endif(BUILD_TESTING)